自动化运维之 部署Saltstack 并批量部署 Nginx
Saltstack 原理
???????? Saltstack由Master和Minion構(gòu)成,master是服務(wù)端,表示一臺(tái)服務(wù)器;minion是客戶服務(wù)端,表示多臺(tái)服務(wù)器。在Master 上發(fā)送命令給符合條件的 Minion,Minion 就會(huì)執(zhí)行響應(yīng)的命令,Master和Minion之間通過(guò)ZeroMQ(消息隊(duì)列)進(jìn)行通信。
???????? Saltstack的master端監(jiān)聽(tīng)4505和4506端口,4505為master和 Minion 認(rèn)證通信端口,4506為 Master 用來(lái)發(fā)送命令或接收Minion的命令執(zhí)行返回信息。
????????? 當(dāng)客戶端啟動(dòng)后,會(huì)主動(dòng)連接 Master 端注冊(cè),然后一直保持該TCP連接,而 Master 通過(guò)這條TCP連接對(duì)客戶端進(jìn)行控制。如果連接斷開(kāi),Master 對(duì)客戶端將不能進(jìn)行控制。但是,當(dāng)客戶端檢查到連接斷開(kāi)后,會(huì)定期向 Master 端請(qǐng)求注冊(cè)連接。
Saltstack 常用模塊
? Saltstack 提供了非常多的功能模塊,以便于對(duì)操作系統(tǒng)的基礎(chǔ)功能和常用工具的操作。
(1)pkg 模塊
pkg 模塊的作用是包管理,包括增刪更新。
(2)file 模塊
file 模塊的作用是管理文件操作,包括同步文件、設(shè)置文件權(quán)限和所屬用戶組、刪除文件等操作。
(3)cmd 模塊
cmd 模塊的作用是在 Minion 上執(zhí)行命令或腳本。
(4)user 模塊
user 模塊的作用是管理系統(tǒng)賬戶操作。
(5)service 模塊
service 模塊的作用是管理系統(tǒng)服務(wù)操作。
(6)cron 模塊
cron 模塊的作用是管理 cron 服務(wù)操作。
部署環(huán)境
三臺(tái)服務(wù)器參數(shù)如表所示。
?
| 角色 ? | 主機(jī)名 | ??ip地址 | 所需的軟件包 |
| master | master.saltstack.com? | 192.168.66.140 | saltstack-master |
| minion | web01.saltstack.com | 192.168.66.143 | saltstack-minion |
| minion | web02.saltstack.com? | 192.168.66.144 | saltstack-minio |
操作步驟
一 . 部署前的準(zhǔn)備工作。
1. 更改主機(jī)名,修改 hosts 文件(分別在三臺(tái)服務(wù)器上操作),配置完成后,重新啟動(dòng)主機(jī),主機(jī)名才可以生效。
vim /etc/hostname
master.saltstack.com
[root@localhost ~]# vim /etc/hosts
192.168.66.140 master.saltstack.com
192.168.66.143 web01.saltstack.com
192.168.66.144 web02.saltstack.com
關(guān)閉防火墻
[root@master ~]# systemctl stop firewalld.service?
[root@master ~]# setenforce 0
2.在三臺(tái)服務(wù)器上都需要安裝 epel 源,因?yàn)楹竺嫘枰惭b Saltstack 服務(wù)端和客戶端。
[root@master ~]# yum install epel-release –y
[root@web01 ~]# yum install epel-release -y
[root@web02 ~]# yum install epel-release –y
二 . 部署 Saltstack 主控端(也就是master)。
1 . 部署 salt-master? 軟件包
[root@master ~]# yum install salt-master –y
2.配置主控端配置文件 /etc/salt/master
[root@master ~]# vim /etc/salt/master
15 interface: 192.168.66.140????????????????????????????? //修改監(jiān)聽(tīng)地址(master)
215 auto_accept:?True????????????????????
修改第215行的主控端會(huì)自動(dòng)認(rèn)證被控端的認(rèn)證,只有被控端在設(shè)置完主控端的 IP 地址后啟動(dòng)服務(wù),主控端就會(huì)運(yùn)行被控端自動(dòng)認(rèn)證,以避免以后每次都需要運(yùn)行 salt-key 來(lái)確認(rèn)證書(shū)信任。
416?file_roots:????????????????????????????????????? //saltastack 文件根目錄位置,注意這個(gè)目錄默認(rèn)是沒(méi)有的,需要?jiǎng)?chuàng)建。
417?? base:
418?????- /srv/salt
710 nodegroups:???????????????????????????????? //修改組分類(lèi)
711???group1: 'web01.saltstack.com'
712???group2: 'web02.saltstack.com'
552 pillar_opts:?True??????????????????????????? //開(kāi)啟 pillar 功能??????????
529?pillar_roots:?????????????????????????????????? //pillar 的主目錄,注意這個(gè)目錄默認(rèn)是沒(méi)有的,需喲創(chuàng)建。
530?? base:
531????- /srv/pillar
過(guò)濾查看修改的配置文件內(nèi)容
[root@master ~]# cat /etc/salt/master | grep -v ^$ | grep -v ^#
interface: 192.168.66.140
auto_accept: True
file_roots:
?? base:
???? - /srv/salt
pillar_roots:
?? base:
???? - /srv/pillar
pillar_opts: True
nodegroups:
?? group1: 'web01.saltstack.com'
?? group2: 'web02.saltstack.com'
3.主控端做完上述操作后啟動(dòng) salt-master 服務(wù),并查看端口
[root@master ~]# systemctl start salt-master
[root@master ~]# netstat -ntap | egrep '4505|4506'
tcp??????? 0????? 0 192.168.66.140:4505???? 0.0.0.0:*?????????????? LISTEN????? 1987/python?????????
tcp??????? 0????? 0 192.168.66.140:4506???? 0.0.0.0:*?????????????? LISTEN????? 2001/python???
創(chuàng)建 salt 文件根目錄及 pillar 目錄
[root@master ~]# mkdir /srv/salt
[root@master ~]# mkdir /srv/pillar
三 . 部署 Saltstack 被控端 (也就是兩臺(tái) minion)
1.安裝 salt-minion 軟件包
[root@web01 ~]# yum install salt-minion –y
2 . 配置兩臺(tái)被控端配置和文件 /etc/salt/minion
[root@web01 ~]# vim /etc/salt/minion
16 master:?192.168.66.140????????????????????????? //指定主控端 IP
78?id: web01.saltstack.com????????????????????????? //指定被控主機(jī)名,另一臺(tái)是 web02.saltstack.com
3. 分別啟動(dòng)兩臺(tái)被控端服務(wù)
[root@web01 ~]# systemctl start salt-minion.service
[root@web02 ~]# systemctl start salt-minion.service
?
???????此時(shí)控制端和被控制端的配置以及完成,并啟動(dòng)服務(wù)。在主控端上做一個(gè)簡(jiǎn)單測(cè)試一下主控端和被控端的通信狀態(tài),如果返回都是True ,則說(shuō)明正常。注意這里的 ping 和我們平常的 ping 命令不同,它只是 test 類(lèi)下面的一個(gè)方法而已,用來(lái)驗(yàn)證主控端和被控端的通信狀態(tài)。注意 * 表示所有通過(guò)認(rèn)證的被控端,還可以支持其他很多正則表達(dá)式的匹配。
[root@master ~]# salt '*' test.ping
web02.saltstack.com:
???? True
web01.saltstack.com:
????True
?
查看秘鑰
[root@master ~]# salt-key
Accepted Keys:
web01.saltstack.com
web02.saltstack.com
Denied Keys:
Unaccepted Keys:
Rejected Keys:
查看被控端主機(jī)掛載情況
[root@master ~]# salt '*' cmd.run 'df –h'???????????????? //使用 cmd 模塊
web02.saltstack.com:
???? Filesystem????? Size? Used Avail Use% Mounted on
???? /dev/sda2??????? 20G? 3.5G?? 17G? 18% /
???? devtmpfs??????? 978M???? 0? 978M?? 0% /dev
???? tmpfs?????????? 993M?? 12K? 993M?? 1% /dev/shm
???? tmpfs?????????? 993M? 9.0M? 984M?? 1% /run
???? tmpfs?????????? 993M???? 0? 993M?? 0% /sys/fs/cgroup
???? /dev/sda5?????? 5.0G?? 33M? 5.0G?? 1% /opt
???? /dev/sda3??????? 10G?? 37M?? 10G?? 1% /home
???? /dev/sda1?????? 997M? 158M? 839M? 16% /boot
???? tmpfs?????????? 199M?? 12K? 199M?? 1% /run/user/42
???? tmpfs?????????? 199M???? 0? 199M?? 0% /run/user/0
web01.saltstack.com:
???? Filesystem????? Size? Used Avail Use% Mounted on
???? /dev/sda2??????? 20G? 3.8G?? 17G? 19% /
???? devtmpfs??????? 978M???? 0? 978M?? 0% /dev
???? tmpfs?????????? 993M?? 12K? 993M?? 1% /dev/shm
???? tmpfs?????????? 993M? 9.0M? 984M?? 1% /run
???? tmpfs?????????? 993M???? 0? 993M?? 0% /sys/fs/cgroup
???? /dev/sda3??????? 10G?? 37M?? 10G?? 1% /home
???? /dev/sda1????? 1014M? 158M? 857M? 16% /boot
???? /dev/sda5??????? 10G?? 33M?? 10G?? 1% /opt
???? tmpfs?????????? 199M?? 12K? 199M?? 1% /run/user/42
???? tmpfs?????????? 199M???? 0? 199M?? 0% /run/user/0
通過(guò)下面的命令可以查看被控機(jī) web01 主機(jī)上的 grains 所有值
[root@master ~]#?salt 'web01.saltstack.com' grains.items
web01.saltstack.com:
???? ----------
???? SSDs:
???? biosreleasedate:
???????? 05/19/2017
???? biosversion:
???????? 6.00
???? cpu_flags:
???????? - fpu
???????? - vme
???????? - de
???????? - pse
???????? - tsc
???????? - msr
???????? - pae
???????? - mce
???????? - cx8
???????? - apic
???????? - sep
???????? - mtrr
???????? - pge
???????? - mca
???????? - cmov
???????? - pat
???????? - pse36
???????? - clflush
???????? - mm
????????? …….
???????? grains 是 Saltstack 的重要組件之一,可以收集被控主機(jī)的基本信息,如 cpu 、內(nèi)核、操作系統(tǒng)、虛擬化等靜態(tài)數(shù)據(jù)。在服務(wù)端可以利用這些信息對(duì)不同被控主機(jī)進(jìn)行個(gè)性化配置。
四 . Saltstack 批量部署 apache(在控制端)
[root@master srv]# vim /srv/salt/top.sls?????????? // 在 /srv/salt 目錄下,創(chuàng)建管理性文件 top.sls ,文件名以sls結(jié)尾
base:???????????? //基本操作
?? '*':?????????????? //表示所有被控主機(jī)
??? - apache??? //所有主機(jī)執(zhí)行 apache
注意:‘*’ ,表示在所有的客戶端執(zhí)行 apache 模塊
在創(chuàng)建一個(gè) apache.sls 文件
[root@master srv]# vim apache.sls
apache-service:
??? pkg.installed:???????????? //執(zhí)行apache 的安裝操作
?????? - names:?????????????????? //需要安裝的軟件包有 httpd?? 、httpd-devel
????????- httpd
???????? - httpd-devel
??? service.running:
?????? - name: httpd
?????? - enable: True
重啟服務(wù)
[root@master salt]# systemctl restart salt-master
在主控端執(zhí)行刷新state 配置命令,讓兩臺(tái)被控端去執(zhí)行安裝 apache
[root@master salt]#?salt '*' state.highstate
web01.saltstack.com:
----------
?????????? ID: apache-service
???? Function: pkg.installed
???????? Name: httpd
?????? Result: True
????? Comment: The following packages were installed/updated: httpd
????? Started: 13:44:05.771181
???? Duration: 56803.894 ms
????? Changes:??
……….
web02.saltstack.com:
----------
?????????? ID: apache-service
???? Function: pkg.installed
???????? Name: httpd
?????? Result: True
????? Comment: The following packages were installed/updated: httpd
????? Started: 13:44:05.140861
???? Duration: 87107.738 ms
????? Changes:??
在被控制端查看安裝情況
[root@web01 ~]# rpm -q httpd
httpd-2.4.6-80.el7.centos.1.x86_64
[root@web01 ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
??? Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
??? Active: active (running) since 四 2018-10-25 13:45:59 CST; 6min ago
????? Docs: man:httpd(8)
??????????? man:apachectl(8)
? Main PID: 38811 (httpd)
??? Status: "Total requests: 0; Current requests/sec: 0; Current traffic:?? 0 B/sec"
??? CGroup: /system.slice/httpd.service
??????????? ├─38811 /usr/sbin/httpd -DFOREGROUND
??????????? ├─38812 /usr/sbin/httpd -DFOREGROUND
??????????? ├─38813 /usr/sbin/httpd -DFOREGROUND
??????????? ├─38814 /usr/sbin/httpd -DFOREGROUND
??????????? ├─38815 /usr/sbin/httpd -DFOREGROUND
??????????? └─38816 /usr/sbin/httpd -DFOREGROUND
10月 25 13:45:59 web01.saltstack.com systemd[1]: Starting The Apache HTT...
10月 25 13:45:59 web01.saltstack.com systemd[1]: Started The Apache HTTP...
Hint: Some lines were ellipsized, use -l to show in full.
[root@web02 ~]# rpm -q httpd
httpd-2.4.6-80.el7.centos.1.x86_64
總結(jié):
Saltstack 由 Master 和 Minion 構(gòu)成,Master 和 Minion 之間通過(guò)消息隊(duì)列 (ZeroMQ) 進(jìn)行通信。
Saltstack 的模塊有 pkg、file、cmd、user、service、cron 。
定義的屬性值如果是經(jīng)常發(fā)生變化的,采用 pillar ;如果很固定、不易改變的,采用 grains 。
state 是 Saltstack 最核心模塊的功能,通過(guò)預(yù)先定制好的 sls 文件 (salt state file ),對(duì)被控主機(jī)進(jìn)行管理,如程序包、文件、網(wǎng)絡(luò)配置、系統(tǒng)服務(wù)、系統(tǒng)用戶等。
超強(qiáng)干貨來(lái)襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生總結(jié)
以上是生活随笔為你收集整理的自动化运维之 部署Saltstack 并批量部署 Nginx的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: saltstack与ansible对比
- 下一篇: Nginx模块学习之————access