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

自動化運維工具--saltstack

簡介

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

基本原理

SaltStack採用C/S模式,server端就是salt的master,client端就是minion,minion與master之間通過ZeroMQ訊息佇列通訊。

minion上線後先與master端聯絡,把自己的pub key發過去,這時master端通過salt-key -L命令就會看到minion的key,接受該minion-key後,也就是master與minion已經互信。

master可以傳送任何指令讓minion執行了,salt有很多可執行模組,比如說cmd模組,在安裝minion的時候已經自帶了,它們通常位於你的python庫中,locate salt | grep /usr/可以看到salt自帶的所有東西。

這些模組是python寫在的檔案,裡面會有好多函式,如cmd.run,當我們執行 salt '*' cmd.run 'uptime'時候,master下發任務匹配到的minion上去,minion執行模組函式,並返回結果。master監聽4505t 4506埠,4505對應的ZMQ的PUB system,用來發送訊息,4506對應的是REP system來接受訊息的。

 

具體步驟如下

  1. Salt stack的Master與Minion之間通過ZeroMq進行訊息傳遞,使用了ZeroMq的釋出-訂閱模式,連線方式包括tcp,ipc
  2. salt命令,將cmd.run ls命令從salt.client.LocalClient.cmd_cli釋出到master,獲取一個Jodid,根據jobid獲取命令執行結果。
  3. master接收到命令後,將要執行的命令傳送給客戶端minion。
  4. minion從訊息總線上接收到要處理的命令,交給minion._handle_aes處理
  5. minion._handle_aes發起一個本地執行緒呼叫cmdmod執行ls命令。執行緒執行完ls後,呼叫minion._return_pub
    方法,將執行結果通過訊息匯流排返回給master
  6. master接收到客戶端返回的結果,呼叫master._handle_aes方法,將結果寫的檔案中
  7. salt.client.LocalClient.cmd_cli通過輪詢獲取Job執行結果,將結果輸出到終端。