Salt是一個(gè)基礎(chǔ)平臺(tái)管理工具,基于 python 語(yǔ)言開發(fā)。SaltStack 采用 C/S模式,server端就是salt的master,client端就是minion,minion與master之間通過(guò)ZeroMQ消息隊(duì)列通信。master監(jiān)聽4505和4506端口,4505為master和minion認(rèn)證通信端口,4506為master用來(lái)發(fā)送命令或者接收minion的命令執(zhí)行返回信息。
長(zhǎng)海ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來(lái)市場(chǎng)廣闊!成為成都創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
1、輕量級(jí)管理工具,批量執(zhí)行命令;
2、常用模板:
pkg:包,有增刪更新;
file:用于管理文件,包括同步文件、設(shè)置文件權(quán)限和所屬用戶組、刪除文件等操作;
cmd:在 minion 上執(zhí)行命令或者腳本;
user:管理系統(tǒng)賬戶操作;
service:管理系統(tǒng)服務(wù)操作;
cron:管理 crontab任務(wù)
3、saltstack 數(shù)據(jù)系統(tǒng):
Grains(靜態(tài)數(shù)據(jù));
pillar(動(dòng)態(tài)數(shù)據(jù));
4、三大功能:
(1)遠(yuǎn)程執(zhí)行
(2)配置管理
(3)云管理
(1)grains:
grains 是在 minion(客戶端)啟動(dòng)時(shí)收集到的一些信息,比如操作系統(tǒng)類型、網(wǎng)卡ip等靜態(tài)信息。
grains 的信息并不是動(dòng)態(tài)的,并不會(huì)時(shí)時(shí)變更,它只是在 minion 啟動(dòng)時(shí)收集到的。
(2)pillar:
pillar 和 grains 不一樣,是在 master 上定義的,并且是針對(duì) minion 定義的一些信息。像一些比較重要的數(shù)據(jù)(密碼)可以存在 pillar 里,還可以定義變量等。
(3)state:
是 saltstack 的最核心的功能,通過(guò)預(yù)先指定好的 sls 文件對(duì) 被控主機(jī)進(jìn)行管理(包括:包、網(wǎng)絡(luò)配置、系統(tǒng)服務(wù)、系統(tǒng)用戶 等)
SaltStack 客戶端(Minion)在啟動(dòng)時(shí),會(huì)自動(dòng)生成一套密鑰,包含私鑰和公鑰。之后將公鑰發(fā)送給服務(wù)器端,服務(wù)器端驗(yàn)證并接受公鑰,以此來(lái)建立可靠且加密的通信連接。同時(shí)通過(guò)消息隊(duì)列 ZeroMQ 在客戶端與服務(wù)端之間建立消息發(fā)布連接。
1、Minion 是 SaltStack 需要管理的客戶端安裝組件,會(huì)主動(dòng)去連接 Master 端,并從 Master 端得到資源狀態(tài)信息,同步資源管理信息。
2、Master 作為控制中心運(yùn)行在主機(jī)服務(wù)器上,負(fù)責(zé) Salt 命令運(yùn)行和資源狀態(tài)的管理,Master 上執(zhí)行某條指令通過(guò)隊(duì)列下發(fā)到各個(gè) Minions 去執(zhí)行,并返回結(jié)果。
3、ZeroMQ 是一款開源的消息隊(duì)列軟件,用于在 Minion 端與 Master 端建立系統(tǒng)通信橋梁。
1、管理配置講究的是更快更穩(wěn)
ansible基于SSH協(xié)議傳輸數(shù)據(jù);Saltstack使用消息隊(duì)列zeroMQ傳輸數(shù)據(jù),速度更快,是ssh的40倍。
2、ansible安裝部署過(guò)程特別簡(jiǎn)單,saltstack要部署 minion 端較為不便。
1、修改主機(jī)名
修改主機(jī)名:
[root@localhost ~]# hostnamectl set-hostname master.saltstack.com
[root@localhost ~]# hostnamectl set-hostname web01.saltstack.com
[root@localhost ~]# hostnamectl set-hostname web02.saltstack.com
修改 /etc/hosts文件(用scp遠(yuǎn)程復(fù)制,三臺(tái)主機(jī)都一樣):
vim /etc/hosts
192.168.220.131 master.saltstack.com
192.168.220.140 web01.saltstack.com
192.168.220.136 web02.saltstack.com
關(guān)閉防火墻:
systemctl stop firewalld.service
setenforce 0
分別為三臺(tái)主機(jī)添加epel源:
yum install -y epel-release
2、安裝 saltstack:
1、master上安裝:
yum install -y salt-master
2、被管理端(minion)上安裝:
yum install -y salt-minion
3、配置 master主機(jī):
vim /etc/salt/master
interface: 192.168.220.131 //修改監(jiān)聽地址(master的地址)
auto_accept: True //修改為true,避免要運(yùn)行salt-key來(lái)確定證書認(rèn)證
file_roots: //開啟saltstack文件根目錄位置,此目錄需要自己創(chuàng)建
base:
- /srv/salt
nodegroups: //開啟、設(shè)置組分類
group1: 'web01.saltstack.com'
group2: 'web02.saltstack.com'
pillar_opts: True //開啟pillar功能,同步文件功能
pillar_roots: //開啟pillar主目錄,這個(gè)也需要自己創(chuàng)建
base:
- /srv/pillar
4、開啟服務(wù):
[root@master ~]# systemctl start salt-master.service
[root@master ~]# netstat -napt | egrep '4506|4505'
tcp 0 0 192.168.220.131:4505 0.0.0.0:* LISTEN 68112/python
tcp 0 0 192.168.220.131:4506 0.0.0.0:* LISTEN 68136/python
(5)配置 minino 端:
vim /etc/salt/minino
第一臺(tái):
master: 192.168.220.131 //第16行,指定主控端IP地址
id: web01.saltstack.com //第78行,指定被控制端的主機(jī)名
第二臺(tái):
master: 192.168.220.131
id: web02.saltstack.com
systemctl start salt-minion.service //開啟服務(wù)
(6)在主控端測(cè)試與被控端的通信狀態(tài)
[root@master ~]# salt '*' test.ping //查看通信狀態(tài)
web01.saltstack.com:
True
[root@master ~]# salt '*' test.ping
web01.saltstack.com:
True
web02.saltstack.com:
True
salt '*' cmd.run 'df -h' //查看所有被管理段的掛載情況
[root@master ~]# salt-key //查看在master上已經(jīng)被接受過(guò)的客戶端
Accepted Keys:
web01.saltstack.com
web02.saltstack.com
Denied Keys:
Unaccepted Keys:
Rejected Keys:
查看被監(jiān)控主機(jī)上grains所有值(每次minino在啟動(dòng)時(shí)都會(huì)獲取客戶端信息):
salt 'web01.saltstack.com' grains.items (靜態(tài)數(shù)據(jù))
salt 'web01.saltstack.com' pillar.items (動(dòng)態(tài)數(shù)據(jù))
(7)開始批量安裝Apache服務(wù):
下面演示的是遠(yuǎn)程通過(guò) yum 安裝 Apache :
mkdir /srv/salt
vim /srv/salt/top.sls
base:
'*':
- apache
//注意:'*',則表示在所有的客戶端執(zhí)行 apache 模塊。
vim /srv/salt/apache.sls
apache-service:
pkg.installed:
- names: // 如果只有一個(gè)服務(wù),那么就可以寫成 – name: httpd 不用再換一行
- httpd
- httpd-devel
service.running:
- name: httpd
- enable: True
//注意:apache-service 是自定義的 id 名。pkg.installed 為包安裝函數(shù),下面是要安裝的包的名字。service.running 也是一個(gè)函數(shù),來(lái)保證指定的服務(wù)啟動(dòng),enable 表示開機(jī)啟動(dòng)。
systemctl restart salt-master //重啟服務(wù)
salt '*' state.highstate //執(zhí)行刷新state配置命令
接下來(lái),去兩臺(tái) minino上驗(yàn)證一下 httpd是否安裝成功: