Salt是一個基礎平臺管理工具。SaltStack 採用 C/S模式,server端就是salt的master,client端就是minion,minion與master之間經過ZeroMQ消息隊列通訊。master監聽4505和4506端口,4505爲master和minion認證通訊端口,4506爲master用來發送命令或者接收minion的命令執行返回信息。node
官網:docs.saltstack.comweb
SaltStack經常使用模塊apache
pkg模塊 | 是包管理,包括增刪更新。 |
file模塊 | 管理文件操做,包括同步文件、設置文件權限和所屬用戶組、刪除文件等操做。 |
cmd模塊 | 是在Minion上執行命令或者腳本。 |
user模塊 | 管理系統帳戶操做。 |
service模塊 | 管理系統服務操做 |
cron模塊 | 管理cron服務操做 |
Saltstack工做機制bash
• Master和Minion都以守護進程的方式運行服務器
• Master監聽配置文件裏定義的ret_port(接收minion請求),和publish_port(發佈消息)的端口網絡
• 當Minion運行時,它會自動鏈接到配置文件裏定義的Master地址ret_port端口進行鏈接認證app
• 當Master和Minion能夠正常通訊後,就能夠進行各類各樣的配置管理工做了ide
操做篇函數
操做環境:工具
192.168.80.181 | Master | salt-master salt-minion |
192.168.80.182 | Minion | salt-minion |
192.168.80.183 | Minion | salt-minion |
注:三臺都是NAT模式
----
1 修改主機名
hostnamectl set-hostname master.saltstack.com
hostnamectl set-hostname web01.saltstack.com
hostnamectl set-hostname web02.saltstack.com
init 6 重啓生效
2 修改/etc/hosts文件(3臺都作)
192.168.80.181 master.saltstack.com
192.168.80.182 web01.saltstack.com
192.168.80.183 web02.saltstack.com
3 安裝
systemctl stop firewalld && setenforce 0
yum install -y epel-release
服務器:
yum -y install salt-master salt-minion
客戶端:
yum -y install salt-minion
4 服務端和客戶端配置
vi /etc/salt/minion
修改配置以下:
16行 master: 192.168.80.181 //指定主控端IP
78行 id: web01.saltstack.com //指定被控端主機名
注:改爲相應的主機名
5 啓動被控端服務
systemctl start salt-minion
systemctl start salt-master
6 認證
salt-key -L 查看待認證的服務器
Accepted Keys:認證經過
Denied Keys:舊的的認證
Unaccepted Keys:等待認證
Rejected Keys:拒絕認證
手動添加認證:
認證的方式是salt-key -a 客戶端id
salt-key -a web01
salt-key -a web02
salt-key -a master
說明:-a :accept ,-A:accept-all,-d:delete,-D:delete-all。可使用 salt-key 命令查看到已經簽名的客戶端。此時咱們在客戶端的 /etc/salt/pki/minion 目錄下面會多出一個minion_master.pub 文件。
salt-key -L
7 在主控端測試與被控端的通訊狀態!
salt '*' test.ping
salt '*' cmd.run 'df -h' //遠程執行命令
salt-key //查看在 master 上已經被接受過的客戶端
注:
Saltstack幾個重要的組件:
grains
grains 是在 minion(客戶端)啓動時收集到的一些信息,好比操做系統類型、網卡ip等靜態信息。
grains的信息並非動態的,並不會時時變動,它只是在 minion 啓動時收集到的
pillar
pillar 和 grains 不同,是在 master 上定義的,而且是針對 minion 定義的一些信息。像一些比較重要的數據(密碼)能夠存在 pillar 裏,還能夠定義變量等。
State
他是saltstack的最核心功能,經過預先指定好的sls文件對被控主機進行管理:包/文件/網絡配置/系統服務/系統用戶等。
在master服務器:
vi /etc/salt/master
file_roots: //416行
base:
- /srv/salt //saltstack文件根目錄位置,目錄須要建立
nodegroups: //710行組分類
group1: 'web01.saltstack.com'
group2: 'web02.saltstack.com'
pillar_opts: True //552行,開啓pillar功能
pillar_roots: //529行
base:
- /srv/pillar //pillar的主目錄,須要建立
cat /etc/salt/master | grep -v ^$ | grep -v ^# //查看對主配置文件作的更改
systemctl restart salt-master
netstat -anpt | egrep '4505|4506'
查看被控主機上grains全部值:(每次minion在啓動是都會獲取客戶端信息)
salt 'master' grains.ls // 列出全部的 grains 項目名字
salt 'web01.saltstack.com' grains.items (靜態數據)
salt 'web01.saltstack.com' pillar.items (動態數據)
配置管理安裝Apache
下面進行的演示是遠程經過 yum 方式安裝 Apache。步驟以下:
修改配置文件
注意:環境: base、dev(開發環境)、test(測試環境)、prod(生產環境)。
vi /srv/salt/top.sls
base: '*': - apache
vi /srv/salt/apache.sls
apache-service: pkg.installed: - names: - httpd - httpd-devel service.running: - name: httpd - enable: True
注意:apache-service 是自定義的 id 名。pkg.installed 爲包安裝函數,下面是要安裝的包的名字。service.running 也是一個函數,來保證指定的服務啓動,enable 表示開機啓動。
重啓服務
systemctl restart salt-master
執行命令
salt 'web01.saltstack.com' state.highstate
而且被控端已經運行了httpd服務