1. 程式人生 > >運維工具saltstack學習(1)

運維工具saltstack學習(1)

一、Saltstack簡介   概念:salt是一種全新的基礎設施管理方式,是一個基於C/S(client/server)架構的伺服器基礎架構集中化管理平臺,能夠維護預定義狀態的遠端節點;一個分散式遠端執行系統,用來在遠端節點上執行命令和查詢資料。部署輕鬆,執行快,擴充套件性好,速度快,伺服器之間秒級通訊。底層採用的是動態的連線匯流排,使其可以用於遠端執行、配置管理(服務、檔案、使用者、組等的管理)、雲管理等。   特點:相對於puppet(運維工具);並行執行,併發能力強;基於ZeroMQ等成熟的技術做伺服器端和客戶端的通訊,採用的是AES的加密方式;具有python API,通過API自定義擴充套件saltstack的功能等;是靈活且開放;通過輕量級訊息佇列(ZeroMQ)與python第三方模組(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)的結合而構建。
  SaltStack 保持了輸入、輸出、配置檔案的一致性,所有檔案均使用YAML格式。主要負責配置管理和遠端執行(在遠端主機執行預定義或任意的命令,也叫遠端執行)。通過部署saltstack環境,可以在多臺伺服器上批量執行命令,根據不同業務特性進行配置集中化管理、檔案分發、採集伺服器資料和軟體包管理等工作。   缺點:需要單獨安裝客戶端(Ansible不需要客戶端);安全隱患大,因為minion中會具有root許可權。   二、Saltstack原理   SaltStack 採用 C/S模式,服務端server端就是salt的master,客戶端client端就是minion。minion與master之間通過ZeroMQ訊息佇列通訊。master和minion都以守護程序的方式執行。master可以傳送任何指令讓minion執行,salt有很多可執行模組,比如cmd模組,通常位於python庫中,locate salt | grep /usr/ 可以看到salt自帶的所有東西。具體步驟如下:
第一步:salt stack的master與minion之間通過ZeroMq進行訊息傳遞,使用了ZeroMq的釋出-訂閱(pub/sub)服務模式,連線方式包括tcp,ipc。 第二步:salt命令,以ls檢視為例,將cmd.run ls命令從salt.client.LocalClient.cmd_cli釋出到master,獲取一個Jobid,根據Jobid獲取命令執行結果。 第三步:master接收到命令後,把自己的pub key發過去,master端通過salt-key -L命令就會看到minion的key,將要執行的命令傳送給客戶端minion。 第四步:minion從訊息總線上接收到要處理的命令,交給minion._handle_aes處理。
第五步:minion._handle_aes發起一個本地執行緒呼叫cmdmod執行ls命令。執行緒執行完ls後,呼叫minion._return_pub方法,將執行結果通過訊息匯流排返回給master。 第六步:master接收到客戶端返回的結果,呼叫master._handle_aes方法,將結果寫入檔案中。 第七步:salt.client.LocalClient.cmd_cli通過輪詢獲取Job執行結果,將結果輸出到終端。 原理圖解釋:
  • Minion 是 SaltStack 需要管理的客戶端安裝元件,會主動去連線 Master 端,並從 Master 端得到資源狀態資訊,同步資源管理資訊。
  • Master 作為控制中心執行在主機伺服器上,負責 Salt 命令執行和資源狀態的管理。
  • ZeroMQ 是一款開源的訊息佇列軟體,用於在 Minion 端與 Master 端建立系統通訊橋樑。
  • Daemon 是運行於每一個成員內的守護程序,承擔著釋出訊息及通訊埠監聽的功能
 操作執行原理圖:   埠: master預設監聽4505和4506埠,minion開啟4505。 4505對應的是ZMQ的PUB system,master端用來發送系統訊息給minion。 4506對應的是REP system用來接受訊息,客戶端和服務端之間的通訊介面,用來接收minion的訊息。 檢視埠資訊:netstat -antlp