1. 程式人生 > >SaltStack介紹簡單配置安裝及通信原理

SaltStack介紹簡單配置安裝及通信原理

centos osi pts 處理 訂閱模式 /etc/ 定義 並發 說明

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

具體步驟如下

  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執行結果,將結果輸出到終端。

環境說明

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介紹簡單配置安裝及通信原理