Saltstack (一) --- Saltstack簡介及部署

一、Saltstack簡介

saltstack是一個配置管理系統,能夠維護預定義狀態的遠程節點。

saltstack是一個分佈式遠程執行系統,用來在遠程節點上執行命令和查詢數據。

saltstack是運維人員提高工作效率、規範業務配置與操作的利器。

Salt的核心功能:

  • 使命令發送到遠程系統是並行的而不是串行的
  • 使用安全加密的協議
  • 使用最小最快的網絡載荷
  • 提供簡單的編程接口

Salt同樣引入了更加細緻化的領域控制系統來遠程執行,使得系統成爲目標不止可以通過主機名,還可以通過系統屬性。

二、saltstack通信驗證機制

SaltStack 的通訊架構模型

Salt 採用服務端-代理的通訊模型(也可以通過 SSH 方式實現非代理模式)。服務端稱爲 Salt master,代理端稱爲 Salt minion。

Salt master 負責發送命令予 Salt minion,隨後收集並展示這些命令的執行結果。一臺 Salt master 可以管理幾千臺的系統。

saltstack通信機制

SaltStack 採用 C/S模式,minion與master之間通過ZeroMQ消息隊列通信,默認監聽4505端口。
在這裏插入圖片描述
Salt Master運行的第二個網絡服務就是ZeroMQ REP系統,默認監聽4506端口。

在這裏插入圖片描述

Salt minion 驗證機制:

(1).當 minion 啓動時,其將搜索網絡中的 master。當找到時, minion 將發送公鑰給 Salt master,從而實現初次握手。其過程如下圖所示。

在這裏插入圖片描述
(2).當初次握手後,Salt minion 的公鑰將被保存在服務端,此時 master 需要使用過 salt-key 命令接收公鑰(也可以採用自動機制)。注意:在 Salt minion 的公鑰被接收前,Salt master 是不會將密鑰發放給 minion 的,也就是說 minion 在此之前不會執行任何命令。
(3).當 Salt minion 的公鑰被接收後,Salt master 就會把公鑰連同用於加解密 master 信息的可變動 AES 密鑰發送至 Salt minion。其中,返回給 Salt minion 的 AES 密鑰由 minion 的公鑰加密,可由 Salt minion 解密。

三、saltstack安裝與配置

主機準備

主機名 ip 作用
server1 172.25.63.1 salt-master
server2 172.25.63.2 salt-minion
server3 172.25.63.3 salt-minion

以上主機系統爲 rhel7.6,且防火牆和selinux均爲關閉狀態。

官網:https://www.saltstack.com/

安裝可以參考:https://repo.saltstack.com/#rhel

設置官方YUM倉庫(每個主機都要操作):

yum install https://repo.saltstack.com/yum/redhat/salt-repo-latest.el7.noarch.rpm

master主機配置

安裝master端:

[root@server1 yum.repos.d]# yum install salt-master -y

設置master自啓動並啓動服務:

[root@server1 ~]# systemctl enable --now salt-master
Created symlink from /etc/systemd/system/multi-user.target.wants/salt-master.service to /usr/lib/systemd/system/salt-master.service.

master端的配置文件爲/etc/salt/master

啓動後查看端口可以看出開啓了4505和4506兩個端口:

在這裏插入圖片描述

minion端配置

安裝minion端:

以下操作以server2爲例,server3和server2的操作相同:

[root@server2 ~]# yum install -y salt-minion

minion端的配置文件爲/etc/salt/minion

[root@server2 ~]# cd /etc/salt/
[root@server2 salt]# vim minion
[root@server2 salt]# cat -n minion | grep 1616行設置master主機的ip:
    16	master: 172.25.63.1

自啓動:

[root@server2 salt]# systemctl enable --now salt-minion

server3與server2操作相同。

配置連接

當打開server2時使用lsof工具查看4506端口情況:

[root@server1 salt]# lsof -i :4506
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
/usr/bin/ 4717 root   23u  IPv4  33911      0t0  TCP *:4506 (LISTEN)
/usr/bin/ 4717 root   30u  IPv4  37251      0t0  TCP server1:4506->server2:40236 (ESTABLISHED)

可以看出4506端口接收到了server2的信息,查看公鑰情況:

[root@server1 salt]# salt-key -L
Accepted Keys:
Denied Keys:
Unaccepted Keys:
server2
Rejected Keys:

可以看出server2正在等待確認,使用以下命令確認:

[root@server1 salt]# salt-key -A
The following keys are going to be accepted:
Unaccepted Keys:
server2
Proceed? [n/Y] y
Key for minion server2 accepted.

-A表示接受所有,-a表示指定接受,-d表示指定刪除,-D表示全部刪除。

再次查看公鑰情況可以看出server2已經確認:

[root@server1 salt]# salt-key -L
Accepted Keys:
server2
Denied Keys:
Unaccepted Keys:
Rejected Keys:

此時server2已經與server1連接成功:

[root@server1 salt]# lsof -i :4505
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
/usr/bin/ 4711 root   15u  IPv4  33856      0t0  TCP *:4505 (LISTEN)
/usr/bin/ 4711 root   17u  IPv4  38277      0t0  TCP server1:4505->server2:34148 (ESTABLISHED)

他們之間的公鑰保存在/etc/salt/pki目錄中。

server3打開salt-minion後接受公鑰與server1連接。

連接後Saltstack集羣部署完成。

部署完成後可以使用以下命令測試:

[root@server1 minions]# salt '*' test.ping
server2:
    True
server3:
    True

其中,'*'代表集羣中的所有主機(即server2和server3),test表示模塊,作用與python中的模塊類似,ping表示test模塊中的函數,作用與python中的函數類似。

從返回值可以看出部署沒有問題。

[root@server1 minions]# salt server2 test.ping
server2:
    True
[root@server1 minions]# salt server3 test.ping
server3:
    True

minion端更改主機名後

當minion端更改主機名後我們在master端查看會發現沒有改變,此時我們需要將保存minion端主機名的緩存刪除,緩存保存在/etc/salt/minion_id文件中,刪除這個文件後重啓salt-minion即可。

[root@server2 minion]# cd /etc/salt/
[root@server2 salt]# ls
cloud         cloud.deploy.d  cloud.profiles.d   master    minion    minion_id  proxy    roster
cloud.conf.d  cloud.maps.d    cloud.providers.d  master.d  minion.d  pki        proxy.d
[root@server2 salt]# cat minion_id
server2
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章