saltstack介紹:
saltstack是基於python開發的一套C/S自動化運維工具,通信采用了zeromq消息隊列的(pub/sub),數據傳輸采用了AES(高級加密)保證安全性,認證采用了SSL方式。
一. ZeroMQ介紹:
ZeroMQ是由一套組件組成,內封裝的有網絡通信,消息隊列,線程調度等功能並向上層提供了簡潔的API接口,應用程序通過加載庫文件,調用API函數來實現高性能網絡通信。
ZeroMQ將網絡通信分成4種模型,分別是一對一結對模型(Exclusive-Pair)、請求回應模型(Request-Reply)、發布訂閱模型(Publish-Subscribe)、推拉模型(Push-Pull)。這4種模型總結出了通用的網絡通信模型,在實際中可以根據應用需要,組合其中的2種或多種模型來形成自己的解決方案。
saltstack-master與minion通信就采用了zeromq的請求回應模型(request-reply)和發布訂閱模型(publish-subscribe):
1. 請求回應模型
由請求端發起請求,然后等待回應端應答。一個請求必須對應一個回應,從請求端的角度來看是發-收配對,從回應端的角度是收-發對。跟一對一結對模型的區別在於請求端可以是1~N個。該模型主要用於遠程調用及任務分配等。Echo服務就是這種經典模型的應用。
2. 發布訂閱模型
發布端單向分發數據,且不關心是否把全部信息發送給訂閱端。如果發布端開始發布信息時,訂閱端尚未連接上來,則這些信息會被直接丟棄。訂閱端未連接導致信息丟失的問題,可以通過與請求回應模型組合來解決。訂閱端只負責接收,而不能反饋,且在訂閱端消費速度慢於發布端的情況下,會在訂閱端堆積數據。該模型主要用於數據分發。天氣預報、微博明星粉絲可以應用這種經典模型。
salt-master啟動時會運行兩個端口4505和4506:
4505:他是salt的消息發布,系統底層基於zeromq pub(發布訂閱),可以在master的配置文件中publish_port修改參數。
作用:負責下發命令,並且所有的minion都會連接到4505這個端口,可通過lsof -i:4505命令查看,注:可在minion的配置文件修改master參數指定主master。
4506:他是salt消息收集,系統底層基於zeromq REQ/REP(請求回應模型),在master配置文件中ret_port修改參數。
作用:負責接收客戶端發送過來的結果。
二. master與minion的認證:
minion在第一次啟動時會在/etc/salt/下生成/pki/minion目錄,並在下面創建minion.pem(私鑰)和minion.pub(公鑰),然后主動將minion.pub發送到master的/etc/salt/pki/master/minions.pre/下面,並且文件以minion的id文件內的數據命名,等待認證。在master上執行salt-key -L命令可以查看等待簽證的minion。執行salt-key -A -y命令同意所有沒有簽證的minion。這時minion會在/etc/salt/pki/minion/下生成minion_master.pub文件,注這個是master的公鑰文件。並且master會將/pki/master/minions.pre目錄下的公鑰轉移到/pki/master/minions/目錄下表示已經認證,這時master就可以管理minion了。
三. saltstack數據系統(grains和pillar):
grains是靜態數據在minion啟動時會收集一些本地的屬性信息例如:(CPU,內存,系統,版本,ip,mac,硬盤,設備型號)等等,並向master提交。注:重啟便會重新收集。
1.基本數據查看與獲取:
salt ‘zcl*’ grains.items:列出ID以zcl開頭的minion,並顯示所有的grains靜態變量與值。
salt ‘zcl*’ grains.ls:列出ID以zcl開頭的minion,並顯示所有的grains靜態變量名。
salt ‘zcl*’ grains.items os:顯示某一個變量與值
salt ‘zcl*’ grains.get os:直接獲取某一個變量的值
2.根據目標屬性條件進行使用命令:
salt -G ‘os:CentOS’ test.ping:所有minion主機為centos系統的進行ping測試。
salt -G ‘os:CentOS’ cmd.run ‘date’:所有minion主機為centos系統的執行date命令
3.自定義靜態變量:
第一種:
vi /etc/salt/minion
重啟或者使用salt ‘*’ saltutil.sync_grains命令可不重啟。
第二種: 一般生產環境都用第二種。
vi /etc/salt/grains
salt ‘*’ saltutil.sync_grains
salt '*' grains.get zcl
salt '*' grains.item zcl roles:列出多個變量