saltstack多節點推送實現haproxy負載均衡叢集
一.saltstack一鍵部署負載均衡叢集
實驗環境:
172.25.45.1 haproxy
172.25.45.2 http
172.25.45.3 nginx
1.安裝服務
這裡為了方便直接在master server1端安裝現在server1上安裝minion,並加入salt-key
yum install -y salt-minion
cd /etc/salt/
vim minion 16
/etc/init.d/salt-minion start
2.分發金鑰
salt-key -L
salt-key -A salt-key -L
3.編輯網頁訪問內容server2和server3
在server2中:
vim /var/www/html/index.html
在server3中:
vim /usr/local/nginx/html/index.html
4.在yum源里加入LoadBalancer
5.在base目錄下建立haproxy的install.sls,完成後執行
cd /srv/salt/
mkdir haproxy
vim haproxy/install.sls
salt server1 state.sls haproxy.install
[[email protected] haproxy]# cd /etc/haproxy/
[ [email protected] haproxy]# ls
haproxy.cfg
[[email protected] haproxy]# mkdir /srv/salt/haproxy/files
[[email protected] haproxy]# cp haproxy.cfg /srv/salt/haproxy/files/
[[email protected] haproxy]# cd /srv/salt/haproxy/
[[email protected] haproxy]# vim install.sls
6.實現負載均衡,更改全域性base目錄下的haproxy.cfg配置檔案
[[email protected] haproxy]# cd files/
[[email protected] files]# ls
haproxy.cfg
[[email protected] files]# vim haproxy.cfg
[[email protected] files]# /etc/init.d/haproxy start
Starting haproxy: [ OK ]
[[email protected] files]# /etc/init.d/haproxy stop
Stopping haproxy: [ OK ]
[[email protected] files]# salt server1 state.sls haproxy.install
7.實現一鍵推送
vim /srv/salt/top.sls
salt '*' state.highstate
8.測試:(看sevrer2的apache服務和server3的nginx服務是否輪詢)
網頁訪問:172.25.45.1
也可以通過命令測試:
當關掉apache或者nginx服務後,將不再輪詢
二·多節點推送
[[email protected] salt]# cd /srv/salt/
[[email protected] salt]# vim top.sls #指令碼名字必須是top.sls
[[email protected] salt]# cat top.sls
base:
"server1":
- haproxy.install
'roles:apache':
- match: grain
- apache.install
"roles:nginx":
- match: grain
- nginx.service
[[email protected] salt]# salt '*' state.highstste #會呼叫top.sls指令碼實現多節點推送
在server2中:
vim /etc/salt/minion vim /etc/salt/grains /etc/init.d/salt-minion restart
在server3中:
在server1中測試:
salt server3 saltutil.sync_grains
salt '*' grains.item roles
三·匯入模組grains和pillar
grains負責採集客戶端的一些基本資訊;pillar資料是儲存在master端的,而在客戶端有快取,通常pillar資料是一些配置資訊。
1、grains
grains的資訊不是動態的,並不會時時更新,只是在minion啟動時收集到
1)在master檢視minion的grains的值
salt server2 grains.item ipv4 ##檢視server2的ipv4
salt server2 grains.item os ##檢視server2系統名稱
salt server2 grains.item fqdn ##檢視server2主機名稱
2)三種方法設定grains
第一種:在minion配置檔案裡找到grains節點進行新增或編輯,如下圖
在server2中:vim /etc/salt/minion
測試:salt server2 grains.item roles
第二種方法:在/etc/salt建立編寫grains檔案
第三種方法:在master的base目錄下建python檔案來從minion上取得環境引數
cd /srv/salt/
mkdir _grains vim _grains/my_grains.py
然後將此自定義grains檔案同步到minion上
2、pillar配置
pillar和grains不一樣,是在master上定義的,並且是針對minion定義的一些資訊,還可以定義變數
首先需要在master配置檔案中修改pillar根目錄
vim /etc/salt/master
這個目錄沒有,需要自己建立,完成後重啟服務,並在目錄下可以建立目錄,編輯pillar資料
[[email protected] salt]# mkdir /srv/pillar
[[email protected] salt]# /etc/init.d/salt-master restart
Stopping salt-master daemon: [ OK ]
Starting salt-master daemon: [ OK ]
[[email protected] salt]# cd /srv/pillar/
[[email protected] pillar]# mkdir web
[[email protected] pillar]# cd web/
[[email protected] web]# vim apache.sls
[[email protected] web]# cat apache.sls
{% if grains['fqdn'] == 'server2' %}
webserver: apache
{% elif grains['fqdn'] == 'server3' %}
webserver: nginx
{% endif %}
然後在在pillar目錄中新增top.sls一鍵部署
[[email protected] web]# cd ..
[[email protected] pillar]# vim top.sls
[[email protected] pillar]# cat top.sls
base:
'*':
- web.install
[[email protected] pillar]# /etc/init.d/salt-master restart
Stopping salt-master daemon: [ OK ]
Starting salt-master daemon: [ OK ]
在server1中測試:
salt '*' saltutil.refresh_pillar ###重新整理minion的pillar資料
salt '*' pillar.items
salt -I 'webserver:nginx' test.ping
salt -S '172.25.41.0/24' test.ping
salt -G 'roles:apache' test.ping
salt -G 'roles:nginx' test.ping
salt -I 'webserver:apache' test.ping
salt -I 'webserver:nginx' test.ping
五·jinja的使用
方法一:
[[email protected] pillar]# cd /srv/salt/apache/
[[email protected] apache]# vim install.sls
[[email protected] apache]# vim files/httpd.conf
[[email protected] apache]# salt server2 state.sls apache.install
方法二:
[[email protected] apache]# cd files/
[[email protected] files]# vim httpd.conf
[[email protected] files]# salt server2 state.sls apache.install
za
在server2檢視埠:
vim /etc/httpd/conf/httpd.conf #檢視埠
方法三:
[[email protected] files]# cd /srv/salt/apache/
[[email protected] apache]# vim lib.sls
[[email protected] apache]# cat lib.sls
{% set port = 80 %}
[[email protected] apache]# vim files/httpd.conf
1 {% from 'apache/lib.sls' import port with context %}
[[email protected] apache]# salt server2 state.sls apache.install
發現埠又變為80
在server2檢視埠: vim /etc/httpd/conf/httpd.conf #檢視埠
方法四:
[[email protected] apache]# salt server2 grains.item ipv4
server2:
----------
ipv4:
- 127.0.0.1
- 172.25.45.2
[[email protected] apache]# vim install.sls
[[email protected] apache]# vim /srv/salt/apache/files/httpd.conf
去掉第一行並將埠號行改為:Listen {{ grains['ipv4'][-1] }}:{{ port }}
##擷取ipv4的最後一個元素
[[email protected] apache]# salt server2 state.sls apache.install
方法五:
[[email protected] ~]# cd /srv/pillar/web/
[[email protected] web]# vim install.sls
[[email protected] web]# cat install.sls
{% if grains['fqdn'] == 'server2' %}
webserver: apache
bind: 172.25.45.2
port: 80
{% elif grains['fqdn'] == 'server3' %}
webserver: nginx
{% endif %}
[[email protected] web]# vim /srv/salt/apache/files/httpd.conf
Listen {{ pillar['bind'] }}:{{ pillar['port'] }}
[[email protected] web]# vim /srv/salt/apache/install.sls
bind: {{ pillar['bind'] }}
port: {{ pillar['port'] }}
[[email protected] web]# salt server2 state.sls apache.install
在server2檢視埠是否開啟: