1. 程式人生 > >saltstack多節點推送實現haproxy負載均衡叢集

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檢視埠是否開啟: