自動化運維之SaltStack(概述及簡單配置實例)
在生產環境中,服務器往往不止一臺,有可能是成千上萬臺。對於運維人員來說,如果單獨對每臺服務器進行管理,工作難度實在是太大了。SaltStack是一個服務器基礎設施管理工具,它具有配置管理、遠程執行、監控等功能。SaltStack由Python語言編寫,是非常簡單易用和輕量級的管理工具。
通過部署SaltStack環境,可以在成千上萬臺服務器上批量執行命令。對於不同的業務進行集中管理、分發文件、采集數據、軟件包管理等,有利於運維人員提高工作效率,規範業務配置和操作。
SaltStack原理
SaltStack由Master和Minion構成,Master是服務端,表示一臺服務器;Minion是客戶服務端,表示多臺服務器。在Master上發送命令給符合條件的Minion,Minion就會執行相應的命令,Master和Minion之間是通過ZeroMQ(消息隊列)進行通信的。
SaltStack的Master端監聽4505與4506端口,4505為MAster和Minion認證通信端口,4506為Master用來發送命令或者接收Minion的命令執行返回信息。
當客戶端啟動後,會主動連接Master端註冊,然後一直保持該TCP連接,而Master通過這條TCP連接對客戶端進行控制。如果連接斷開,Master對客戶端將不能進行控制。但是,當客戶端檢查到連接斷開後,會定期向Master端請求註冊連接。
SaltStack常用模塊
SaltStack提供了非常多的功能模塊,以便於對操作系統的基礎功能和常用工具的操作。
- (1)pkg模塊
pkg模塊的作用是包管理,包括增刪更新。 - (2)file模塊
file模塊的作用是管理文件操作,包括同步文件、設置文件權限和所屬用戶組、刪除文件等操作。 - (3)cmd模塊
cmd模塊的作用是在Minion上執行命令或者腳本。 - (4)user模塊
user模塊的作用是管理系統賬戶操作。 - (5)service模塊
service模塊的作用是管理系統服務操作。 - (6)cron模塊
cron模塊的作用是管理cron服務操作。
案例:SaltStack批量部署並配置Apache
需求分析
1.案例目的
在生產環境中,經常需要根據不同的業務需求來分組部署和配置Nginx服務器。本案例使用了三臺服務器,均采用CentOS7.4系統版本,要求能連接互聯網,SELinux和防火墻均已關閉。
需要註意的是,三臺服務器一定要設置完整的FQDN,和域名一樣的形式,不然在主控端執行遠程執行命令或者配置的時候,等待的時間會非常長,甚至還會出現其他不可控的問題。2.部署環境
角色 | 主機名 | IP地址 | 組名 |
---|---|---|---|
master | master.saltstack.com | 192.168.88.13 | —— |
minion | web01.saltstack.com | 192.168.88.14 | group1 |
minion | web02.saltstack.com | 192.168.88.15 | group2 |
操作步驟
1.SaltStack安裝
1.1首先安裝epel源,因為後面需要安裝SaltStack服務端和客戶端,也包括後面的Apache
yum install epel-release -y //三臺都執行此操作
1.2主控端(master)安裝salt-master,被控端(minion)安裝salt-minion
[root@master ~]# yum install salt-master -y
[root@web01 ~]# yum install salt-minion -y
[root@web02 ~]# yum install salt-minion -y
1.3配置主控端配置文件/etc/salt/master,註意默認master文件全部是註釋的。主控端修改內容如下:
[root@master ~]# cat /etc/salt/master | grep -v ^$ | grep -v ^#
interface: 192.168.88.13 //修改15行監聽地址
auto_accept: True //修改215行的主控端會自動認證被控端的認證
file_roots: //修改416行saltstack文件根目錄位置,需要修改後創建
base:
- /srv/salt
pillar_roots: //修改529行的主目錄,需要修改後創建
base:
- /srv/pillar
pillar_opts: True //修改552行的pillar開啟功能
nodegroups: //修改710行的組分類
group1: ‘web01.saltstack.com‘
group2: ‘web02.saltstack.com‘
1.4創建salt文件根目錄及pillar目錄
[root@master ~]# mkdir /srv/salt
[root@master ~]# mkdir /srv/pillar
1.5啟動salt-master服務並檢查端口
[root@master ~]# systemctl start salt-master.service
[root@master ~]# netstat -natp | egrep ‘4505|4506‘
tcp 0 0 192.168.88.13:4505 0.0.0.0:* LISTEN 3316/python
tcp 0 0 192.168.88.13:4506 0.0.0.0:* LISTEN 3338/python
1.6配置兩臺被監控端配置文件/etc/salt/minion(註意默認的minion文件全部也是註釋的)
master:192.168.88.13 //16行,指定主控端IP
id:web01.saltstack.com //72行,指定被控主機名,另一臺是web02.saltstack.com
1.7分別啟動兩臺被控端服務,並在主控端上簡單測試一下主控端和被控端的通信狀態,如果返回都是True,則說明正常。
[root@web01 salt]# systemctl start salt-minion.service
[root@web02 ~]# systemctl start salt-minion.service
[root@master ~]# salt ‘*‘ test.ping
web02.saltstack.com:
True
web01.saltstack.com:
True
2.SaltStack批量部署Apache
2.1 在主控端上創建入口文件top.sls
[root@master salt]# vim top.sls
base:
‘*‘:
- apache
2.2定義被控機執行狀態,安裝apache軟件,配置文件並啟動
[root@master salt]# vim apache.sls
apache-service:
pkg.installed:
- names:
- httpd
- httpd-devel
service.running:
- name: httpd
- enable: True
2.3重啟服務後,在主控端執行刷新state命令,讓兩臺被控端去執行安裝apache並配置
[root@master salt]# systemctl restart salt-master.service
[root@master salt]# salt ‘*‘ state.highstate
web02.saltstack.com:
----------
ID: apache-service
Function: pkg.installed
Name: httpd
Result: True
Comment: The following packages were installed/updated: httpd
Started: 15:19:03.880968
Duration: 47422.538 ms
Changes:
----------
apr:
----------
new:
1.4.8-3.el7_4.1
old:
apr-util:
----------
new:
1.5.2-6.el7
old:
httpd:
----------
new:
2.4.6-80.el7.centos.1
old:
httpd-tools:
----------
new:
2.4.6-80.el7.centos.1
old:
...省略部分內容
2.4去被控端查看apache是否成功安裝,並查看端口
[root@web01 salt]# rpm -q httpd
httpd-2.4.6-80.el7.centos.1.x86_64
[root@web01 salt]# netstat -natp | grep 80
tcp 0 0 192.168.88.14:42808 192.168.88.13:4505 ESTABLISHED 3487/python
tcp6 0 0 :::80 :::* LISTEN 4186/httpd
[root@web02 ~]# rpm -q httpd
httpd-2.4.6-80.el7.centos.1.x86_64
[root@web02 ~]# netstat -natp | grep 80
tcp6 0 0 :::80 :::* LISTEN 4316/httpd
這樣就完成了通過SaltStack批量部署配置Apache!
自動化運維之SaltStack(概述及簡單配置實例)