saltstack原理
SalStack由master和minion構成,master是服務端,表示一台伺服器;minion是用戶端,表示多台伺服器。在Master上發送指令給符合條件的minion,Minion就會執行相應的指令。Master和Minion之間是通過ZeroMQ(消息隊列)進行通信的。
SaltStack的Master端的監聽端口是4505和4506,4505端口是Master和Minion認證通信端口;4506端口是Master用來發送指令或者接收Minion的指令執行傳回資訊。
當用戶端啟動後,會主動連接配接Master端注冊,然後一直保持該TCP連接配接,而Master通過這條TCP連接配接對用戶端進行控制。
saltstack常用子產品
(1)、pkg子產品
pkg子產品的作用是包管理,包括增删更新。
(2)、file子產品
file子產品的作用的管理檔案操作,包括同步檔案、設定檔案權限和所屬使用者組、删除檔案等操作。
(3)、cmd子產品
cmd子產品的作用是在Minion上執行指令或者腳本。
(4)、user子產品
user子產品的作用是管理系統賬戶操作。
(5)、service子產品
service子產品的作用是管理系統服務操作。
(6)、cron子產品
cron子產品的作用是管理cron服務操作。
SaltStack部署安裝
- 部署環境
角色 | 主機名 | IP位址 |
---|---|---|
master | master.saltstack.com | 172.16.10.138 |
minion | web01.saltstack.com | 172.16.10.147 |
web02.saltstack.com | 172.16.10.146 |
安裝部署的操作步驟
- 修改三台伺服器的主機名
vim /etc/hostname
三台主機分别為:
master.saltstack.com //(管理)
web01.saltstack.com //(被管理)
web02.saltstack.com //(被管理)
- 修改主機解析檔案
vim /etc/hosts
172.16.10.138 master.saltstack.com
172.16.10.147 web01.saltstack.com
172.16.10.146 web02.saltstack.com
//修改完成後,init 6 重新開機伺服器使配置生效
- 重新開機完成後,首先關閉防火牆
systemctl stop firewalld.service //關閉防火牆
setenforce 0 //關閉增強性安全功能
- 安裝服務
yum install -y epel-release //配置安裝軟體源
yum install -y salt-master //管理端安裝
yum install -y epel-release //配置安裝軟體源
yum install -y salt-minion //被管理端安裝
- 管理端配置(修改管理端的配置檔案)
vim /etc/salt/master
修改如下:
15行 interface: 172.16.10.138 //監聽位址(本地位址)
215行 auto_accept: True //避免要運作salt-key來确認證書認證
416行 file_roots:
base:
- /srv/salt //saltstack檔案根目錄位置,目錄需要建立
710行組分類:
nodegroups:
group1: 'web01.saltstack.com'
group2: 'web02.saltstack.com'
552行 pillar_opts: True //開啟pillar功能,同步檔案功能
529行
pillar_roots:
base:
- /srv/pillar //pillar的主目錄,需要建立
- 檢視對主配置檔案做的更改
cat /etc/salt/master | grep -v ^$ | grep -v ^#

- 建立saltstack檔案根目錄、pillar的主目錄
mkdir /srv/salt //建立saltstack檔案根目錄
mkdir /srv/pillar //建立pillar的主目錄
- 啟動master伺服器(管理端)
systemctl start salt-master.service //開啟salt-master服務
systemctl enable salt-master.service //設定開機自啟動
netstat -anpt | egrep '4505|4506' //檢查master的端口是否開啟
- 被管理端配置
vim /etc/salt/minion
16行 master: 172.16.10.138 //指定主要端IP
78行 id: web01.saltstack.com //指定被控端主機名
id: web02.saltstack.com //第二台被控端主機名
- 開啟被控端的服務
systemctl start salt-minion.service
- 主要端測試與被控端的通信狀态
salt '*' test.ping //*表示所有主機
salt '*' cmd.run 'df -h' //遠端執行指令
salt-key //檢視在 master 上已經被接受過的用戶端
salt 'web01.saltstack.com' grains.items (靜态資料)
salt 'web01.saltstack.com' pillar.items (動态資料)

配置管理安裝Apache
- 在主要端建立入口檔案
vim /srv/salt/top.sls
base:
'*':
- apache
注意:'*',則表示在所有的用戶端執行 apache 子產品。
- 建立apache.sls檔案并寫入以下内容
vim /srv/salt/apache.sls
apache-service:
pkg.installed:
- names: // 如果隻有一個服務,那麼就可以寫成 –name: httpd 不用再換一行
- httpd
- httpd-devel
service.running:
- name: httpd
- enable: True
注意:apache-service 是自定義的 id 名。pkg.installed 為包安裝函數,下面是要安裝的包的名字。service.running 也是一個函數,來保證指定的服務啟動,enable 表示開機啟動。
- 重新開機控制端服務
systemctl restart salt-master.service
- 重新整理state配置指令,使兩台被控端安裝apache并配置啟動服務
salt '*' state.highstate
- 被控端檢查驗證acaphe服務是否安裝啟動