自動化運維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遠端執行底層原理:
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模組列表