1 saltstack簡介
1.1 salt定位
saltstack, 簡稱salt, 是有Thomas Hatch先生于2011年創建的一個開源專案,最初是為了實作一個快速的遠程控制系統,后來逐步發展成為如今的基于配置管理和分布式遠程執行系統的強大平臺, 通過一臺master即可遠程管理成千上萬的服務器,
1.2 基本概念
1.2.1 salt基本組成
salt是基于python實作的C/S架構平臺,底層使用ZeroMQ訊息佇列以pub/sub方式通信,主要的機器角色有三種:master、minion以及syndic,其中使用最多的是master和minion,顧名思義,master是salt的中心管理控制系統,而minion則是被遠程控制的具體執行的客戶端,
基本架構有三種:
-
master和minion直連,即一個master連接多個minon,這種架構最常見

-
master通過syndic控制minion

-
只有minion
直接本地運行即可
1.2.2 salt-client、master和minion介紹
1.2.2.1 salt-client
簡稱salt-cli, 此處說的salt-cli主要指的是 用來和用戶互動的命令工具,類似docker、kubectl, etcdctl等,salt-client通常和master在同一臺主機上,其主要的抽象概念為LocalClient, 主要的作用有二:
- 發送請求到master上的ReqServer(4506埠),通過master來控制minion
- 通過監聽事件總線發布者,在master收到minion回應后,收集結果展示給用戶
1.2.2.2 salt master
salt master守護行程運行在指定角色為master機器上,用來提供身份驗證、發送和接收minion的請求、回應salt-cli等功能,當salt-master啟動時會啟動多個不同作用的行程:
- Publisher: 負責將任務發送給連接的minion,系結4505埠和publish_pull.ipc
- EventPublisher: 負責將主事件發布給所有的偵聽器,系結master_event_pull.ipc和master_event_pub.ipc
- MWorker: 管理salt master的后端操作的worker行程,worker行程是數量可在主組態檔中的worker_threads引數定義,至少為1,系結workers.ipc
- ReqServer: 接收請求,并分發給可用的MWorker行程進行處理,同時還接收來自minion的回復,系結4505埠和workers.ipc
1.2.2.3 salt minion
salt minion是通過salt管理的機器上運行的一個單行程,它即可以在本地執行salt-call時作為獨立的守護行程運行,也可以連回主服務器遠程接收命令,啟動時,salt minion會通過自己組態檔里配置的master地址發起連接,會同時通過4505、4506埠建立tcp連接,
1.2.3 salt完整的通信流程
簡化的流程為:salt-cli通過4506埠驗證身份并發送一個salt命令給master,master通過4505埠發布任務給所有的minions, minion匹配成功后執行任務,并將結果通過master的4506埠發送給master,此時salt-cli會負責收集和展示結果給用戶,
- minion只需要在組態檔中配置master ip,不需要監聽埠
- master需要監聽4505和4506兩個埠,其中4505為Publisher埠,提供異步發送執行命令的能力
- master監聽的4506埠為ReqServer,主要用來接受minion/salt-cli的請求,同時提供auth等能力和接受minion的回復資訊
- 每個minion都會 和監聽4505的Publisher、監聽4506的ReqServer建立連接

1.3 salt job的生命周期
salt-master的作業方式是向所有的minion發送執行命令,而minion則是通過對照命令來配置自己的執行內容,job可以理解為一次完整的執行任務,從master的角度出發,典型的job生命周期為:
- salt-cli 上執行一個簡單的salt命令,如:“salt my_minion test.ping”
- "salt"命令使用LocalClient生成對salt-master的請求,并通過master: 4506埠提交一個任務給ReqServer
- salt-master ReqServer收到請求后,會將其通過 workers.ipc 發送給可用的MWorker
- worker 接收并開始處理請求: 第一步,確認發送請求的用戶具有發出命令的權限(個人注:一般使用root用戶執行);第二步,發送命令到所有可以連接的minion
- 位于master event bus (master事件總線) 的worker宣布:master即將發送一個任務給所有連接的minion, 其實作機制為:通過將event放置在主事件總線(master_event_pull.ipc)上,EventPublisher在事件總線上將此event分發到master_event_pub.ipc上所有已連接的event偵聽器
- 即將發送給minion的訊息都是經過加密,然后通過publish_pull.ipc上的IPC發送給master Publisher
- 已和master連接的minions在4505埠上和Publisher建立了一個會話,并等待指令,當Publiser接收通過publish_pull接收到job時,它會將job通過線路發送給minions處理
- minions接收到請求后進行解密,在確認自己是執行者后開始執行所有的請求內容,否則丟棄
- 當minions準備好response后,會將job執行完的結果進行加密,通過4506埠發送給master,在這里,ReqServer再次獲取job內容并轉發到可用的MWorker進行處理(這里同樣是通過workers.ipc來傳遞訊息給可用的workers)
- 當MWorker 接收到job后進行解密,并在master event bus(master_event_pull.ipc)上發起一個event
- EventPublisher 發現此event后,在event bus上重新發布它給master event bus(on master_event_pub.ipc)上的所有監聽者,此時,LocalClient已經處于等待狀態,監聽到master event bus的minions的反饋后,將收集任務并將結果存盤起來
- 當收到所有的minion回復或者請求超時后,salt client會在CLI上向用戶展示所有任務的執行結果,
參考官網:https://docs.saltproject.io/en/latest/contents.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/251728.html
標籤:其他
上一篇:MySQL事務隔離級別和MVCC
下一篇:mysql 學習筆記
