在生產環境中,服務器每每不止一臺,有多是成千上萬臺。對於運維人員來講,若是單獨對每臺服務器進行管理,工做難度實在是太大了。SaltStack是一個服務器基礎設施管理工具,它具備配置管理、遠程執行、監控等功能。SaltStack由Python語言編寫,是很是簡單易用和輕量級的管理工具。 node
經過部署SaltStack環境,能夠在成千上萬臺服務器上批量執行命令。對於不一樣的業務進行集中管理、分發文件、採集數據、軟件包管理等,有利於運維人員提升工做效率,規範業務配置和操做。python
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端請求註冊鏈接。web
SaltStack提供了很是多的功能模塊,以便於對操做系統的基礎功能和經常使用工具的操做。 apache
在生產環境中,常常須要根據不一樣的業務需求來分組部署和配置Nginx服務器。本案例使用了三臺服務器,均採用CentOS7.4系統版本,要求能鏈接互聯網,SELinux和防火牆均已關閉。
須要注意的是,三臺服務器必定要設置完整的FQDN,和域名同樣的形式,否則在主控端執行遠程執行命令或者配置的時候,等待的時間會很是長,甚至還會出現其餘不可控的問題。vim2.部署環境
角色 | 主機名 | 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.1首先安裝epel源,由於後面須要安裝SaltStack服務端和客戶端,也包括後面的Apachecentos
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目錄tcp
[root@master ~]# mkdir /srv/salt [root@master ~]# mkdir /srv/pillar
1.5啓動salt-master服務並檢查端口ide
[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.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!