SaltStack介紹簡單配置安裝及通信原理
SaltStack介紹
一種全新的基礎設施管理方式,部署輕松,在幾分鐘內可運行起來,擴展性好,很容易管理上萬臺服務器,速度夠快,服務器之間秒級通訊。
salt底層采用動態的連接總線, 使其可以用於編配, 遠程執行, 配置管理等等.
通信原理
SaltStack 采用 C/S模式
master和minion之間是通過秘鑰對建立信任關系,建立信任關系以後,master進程起來會監聽2個端口(4505和4506)
4505端口對應的是ZMQ的PUB system, 用於和minion建立長連接並發送數據
4506端口對應的是REP system,用於接受minion的數據
在minion端口啟動minion進程,不會監聽任何端口,minion會用隨機的端口和master通信
master和minion之間的通信用到了zeromq消息隊列
master每一次下發任務所有的minion都會收到任務,minion會根據任務條件判斷是否需要返回數據給master
具體步驟如下
-
Salt stack的Master與Minion之間通過ZeroMq進行消息傳遞,使用了ZeroMq的發布-訂閱模式,連接方式包括tcp,ipc
-
salt命令,將
cmd.run ls
命令從salt.client.LocalClient.cmd_cli
發布到master,獲取一個Jodid,根據jobid獲取命令執行結果。 -
master接收到命令後,將要執行的命令發送給客戶端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執行結果,將結果輸出到終端。
環境說明
CentOS7.2 64bit linux-node1.example.com 192.168.56.11 (salt-master和salt-minion) CentOS7.2 64bit linux-node2.example.com 192.168.56.12 (salt-minion)
在192.168..56.11安裝salt-master和salt-minion並啟動master
[[email protected] ~]# yum install -y salt-master salt-minion
[[email protected]-node1 ~]# systemctl start salt-master
master上進入salt目錄查看目錄結構
[[email protected] ~]# cd /etc/salt/ [[email protected]-node1 salt]# ls master minion pki [[email protected]-node1 salt]# tree pki/ pki/ └── master ├── master.pem #私鑰 ├── master.pub ├── minions ├── minions_autosign ├── minions_denied ├── minions_pre └── minions_rejected 6 directories, 2 files
在192.168.56.12和192.168.56.11上面安裝salt-minon,修改minion配置文件master
[[email protected] ~]# yum install -y salt-minion
[[email protected] ~]vi /etc/salt/minion #修改master 和id默認是主機名
[[email protected]-node2 salt]# grep -n ^master minion 16:master: 192.168.56.11
[[email protected]-node2 ~]#systemctl start salt-minion
#在node1上面做同樣的設置
在192.168.56.11上面查看pki情況,顯示已經有2個minion準備加入
[[email protected]node1 salt]# tree pki pki ├── master │ ├── master.pem │ ├── master.pub │ ├── minions │ ├── minions_autosign │ ├── minions_denied │ ├── minions_pre #minion啟動以後給master發送申請,master在這裏可以看到正在申請加入的minion-id │ │ ├── linux-node1.example.com │ │ └── linux-node2.example.com │ └── minions_rejected └── minion ├── minion.pem └── minion.pub 7 directories, 6 files
在master上面接受minion加入
[[email protected] salt]# salt-key -A The following keys are going to be accepted: Unaccepted Keys: linux-node1.example.com linux-node2.example.com Proceed? [n/Y] Y Key for minion linux-node1.example.com accepted. Key for minion linux-node2.example.com accepted.
秘鑰接受後,查看pki的密碼變化,秘鑰名稱是和minionID名稱一樣(公鑰)
[[email protected]node1 salt]# tree pki pki ├── master │ ├── master.pem │ ├── master.pub │ ├── minions #已經進入到master的minion │ │ ├── linux-node1.example.com │ │ └── linux-node2.example.com │ ├── minions_autosign │ ├── minions_denied │ ├── minions_pre │ └── minions_rejected └── minion ├── minion_master.pub ├── minion.pem └── minion.pub 7 directories, 7 files
在minion節點查看 master的公鑰也給到了minion後面就可以正常通信了
[[email protected] salt]# tree pki/ pki/ └── minion ├── minion_master.pub #這個會傳送給master,在master上面存放的文件名稱是minionID ├── minion.pem └── minion.pub
在master上面查看key的信任關系
Accepted Keys: linux-node1.example.com linux-node2.example.com Denied Keys: Unaccepted Keys: Rejected Keys:
檢查master和minion之間通信是否正常,如果返回True則說明正常
[[email protected] ~]# salt "*" test.ping linux-node1.example.com: True linux-node2.example.com: True
使用salt的執行模塊進行維護管理 ,一般在公司使用會通過web界面包裝定義作業,然後進行審批執行
[[email protected] ~]# salt "*" cmd.run "w" # "*" 是執行對象 cmd 是執行模塊 run是cmd的方法 "w" 是方法的參數 也就是命令 linux-node2.example.com: 14:23:31 up 8:38, 1 user, load average: 0.00, 0.01, 0.05 USER TTY FROM [email protected] IDLE JCPU PCPU WHAT root pts/0 192.168.56.1 13:46 21:23 0.15s 0.15s -bash linux-node1.example.com: 14:23:30 up 8:38, 1 user, load average: 0.01, 0.03, 0.05 USER TTY FROM [email protected] IDLE JCPU PCPU WHAT root pts/0 192.168.56.1 13:46 2.00s 0.43s 0.32s /usr/bin/python /usr/bin/salt * cmd.run w [[email protected]-node1 ~]# salt "*" cmd.run "date" linux-node2.example.com: Sun Oct 15 14:23:39 EDT 2017 linux-node1.example.com: Sun Oct 15 14:23:38 EDT 2017
SaltStack介紹簡單配置安裝及通信原理