1. 程式人生 > >自動化運維saltstack

自動化運維saltstack

一、簡介

     SaltStack是一個伺服器基礎架構集中化管理平臺,具備配置管理遠端執行監控等功能,一般可以理解為簡化版的puppet和加強版的func。SaltStack基於Python語言實現,結合輕量級訊息佇列(ZeroMQ)與 Python第三方模組(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)構建。

     通過部署SaltStack環境,我們可以在成千上萬臺伺服器上做到批量執行命令,根據不同業務特性進行配置集中化管理、分發檔案、採集伺服器資料、作業系統基礎及軟體包管理等,SaltStack是運維人員提高工作效率、規範業務配置與操作的利器。

二、特性

(1) 部署簡單、方便;功能強大、擴充套件性強;
(2) 支援大部分UNIX/Linux及Windows環境;
(3) 主從集中化管理;
(4) 支援API及自定義模組,可通過Python輕鬆擴充套件。
(5) 主控端(master)和被控端(minion)基於證書認證,安全可靠;

三、Master與Minion認證

(1)minion在第一次啟動時,會在/etc/salt /pki/minion/(該路徑在/etc/salt/minion裡面設定)下自動生成minion.pem(private key)和 minion.pub(public key),然後將 minion.pub傳送給master。

(2)master在接收到minion的public key後,通過salt-key命令accept minion public key,這樣在master的/etc/salt/pki/master/minions下將會存放以minion id命名的 public key,然後master就能對minion傳送指令了。

四、salt遠端執行底層原理:


http://s3.51cto.com/wyfs02/M00/57/9A/wKiom1Sfzr-i8BUjAAF0EW4NxyY818.jpg

Salt的底層通訊是通過ZeroMQ完成的,採用了ZeroMQ的訂閱釋出模式(Pub和Sub)如下圖所示:

簡單來 講,Pub/Sub模式類似於廣播電臺,在訂閱釋出模式中Pub將訊息傳送到匯流排,所有的Sub收到來自匯流排的訊息後,根據自己的條件來接收特定的訊息。對應到salt中就是master將事件釋出到訊息匯流排,minion訂閱並監聽事件,然後minion會檢視事件是否和自己匹配以確定是否需要執行,匹配條件就是多種主機匹配方法。saltmaster和minion的通訊過程中,會啟動監聽兩個埠,預設是4505和4506。

4505:為salt的訊息釋出專用埠

4506:為客戶端與服務端通訊的埠

Salt minion啟動時從配置檔案中獲取master的地址,如果為域名,則進行解析。解析完成後,會連線master的4506(ret介面)進行key認證。認證通過,會獲取到master的publish_port(預設是4505),然後連線publish_port訂閱來自master pub介面任務。當master下發操作指令時,所有的minion都能接收到,然後minion會檢查本機是否匹配。如果匹配,則執行。執行完畢後,把 結果傳送到master的4506(ret介面)由master進行處理,命令傳送通訊完成是非同步的,並且命令包很小。此外,這些命令包通過 maqpack進行序列化後資料會進一步壓縮(Maqpack是一種高效的二進位制序列化格式),所以salt的網路負載非常低。

五、相關配置

實驗環境:

server:172.25.66.1    minion:172.25.66.2

server端:

 vim /etc/yum.repos.d/rhel-source.repo

scp rhel-source.repo 172.25.66.2:/etc/yum.repos.d/

yum install -y salt-master

minion端:

yum install salt-minion 

/etc/init.d/salt-minion start

master端:

實現遠端安裝軟體

vim /etc/salt/master

在server2上檢視:

實現檔案傳輸

vim web.sls

另外一種寫法:

在server2上檢視:

實現開啟服務

測試:

實現服務的開機自啟

測試:

更改httpd預設檔案後會重新載入

將server2上的httpd主配置檔案傳到server1上,並修改預設埠

salt server2 state.sls apache.service

測試:

使用include方法實現上述功能

vim service.sls

Nginx的一鍵部署

vim install.sls    原始碼編譯安裝nginx

salt server2 state.sls nginx.install

在server2中檢視:

寫一個開啟nginx的檔案:

在server2檢視:出現了80埠

在salt-minion端將nginx的配置檔案scp到salt-master的指定目錄下

實現建立ngxin使用者並且自動啟動載入

vim service.sls

將/srv/salt/nginx/files/nginx.conf更改:

salt sevver2 state.sls nginx.service

在server2上檢視:

一鍵部署haproxy並實現負載均衡

server1:haproxy

server2:nginx

server3:httpd

新開一臺虛擬機器server3安裝httpd服務

server3:

yum install salt-minion -y

cd /etc/salt

vim minion

/etc/init.d/salt-minion start

master端:

在master端安裝minion

配置高可用yum源:

cd /etc/haproxy/

cp haproxy.cfg /srv/salt/haproxy/files/ 

cd /srv/salt/haproxy/

vim install.sls  

vim files/haproxy.cfg

vim top.sls

測試:在瀏覽器中訪問172.25.66.1,實現輪詢

所有內建的state模組列表

http://docs.saltstack.cn/ref/states/all/index.html