自動化運維之saltstack
SaltStack是一個服務器基礎架構集中化管理平臺,SaltStack基於Python語言實現,也是基於C/S架構,結合輕量級消息隊列(ZeroMQ)與Python第三方模塊(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)構建,SaltStack整合了Puppet和Chef的功能,更適合大規模批量管理服務器,配置簡單。
三大主要功能:遠程執行、配置管理、雲管理
運行方式:local(本地)、Master/Minion(傳統方式)、Syndic(分布式)、Salt SSH
saltstack官方網站
2.SaltStack工作原理
Saltstack使用Python開發,是一個非常簡單易用和輕量級的管理工具。由Master和Minion構成,通過ZeroMQ進行通信。
Saltstack的master端監聽4505與4506端口,4505為salt的消息發布系統,4506為salt客戶端與服務端通信的端口;salt客戶端程序不監聽端口,客戶端啟動後,會主動連接master端註冊,然後一直保持該TCP連接,master通過這條TCP連接對客戶端控制,如果連接斷開,master對客戶端就無能為力了。當然,客戶端若檢查到斷開後會定期的一直連接master端的。
salt-master服務啟動後會開啟兩個端口:4505和4506,minion沒有端口,通過“雙向密鑰交換”(可通過tree /etc/salt/pki命令查看)來實現安全管理。salt-master每執行一條命令,所有minion均可收到。
3. saltstack安裝
saltstack支持多種操作系統,如centos、redhat、debian、ubuntu、FreeBSD等,以及windows(僅支持minion)
安裝 epel--------提供2015版本的salt
centos 6 64位
rpm -Uvh
http://mirrors.yun-idc.com/epel/6Sever/x86_64/epel-release-6-8.noarch.rpm
master與minion端都需要安裝
安裝完成後在master端執行 yum -y install salt-master
在minion端執行yum -y install salt-minion
安裝完環境:
主機名 | IP |
salt-master | 192.168.132.20 |
salt-minion01 | 192.168.132.11 |
salt-minion01 | 192.168.132.10 |
minion端配置使其指向master:
vim /etc/salt/minion
添加 master: 192.168.132.20 為master IP,實際生產環境最好為域名。
master端啟動:/etc/init.d/salt-master start
開機自啟動:chkconfig salt-master on
minion端啟動:/etc/init.d/salt-minion start
開機自啟動:chkconfig salt-minion on
安裝完後查看salt信息
[root@salt-master app]# salt '*' test.versions_report
salt-minion02:
Salt: 2015.5.10
Python: 2.6.6 (r266:84292, Aug 18 2016, 15:13:37)
Jinja2: 2.2.1
M2Crypto: 0.20.2
msgpack-python: 0.4.6
msgpack-pure: Not Installed
pycrypto: 2.0.1
libnacl: Not Installed
PyYAML: 3.10
ioflo: Not Installed
PyZMQ: 14.3.1
RAET: Not Installed
ZMQ: 3.2.5
Mako: Not Installed
Tornado: Not Installed
timelib: Not Installed
dateutil: 1.4.1
salt-minion01:
Salt: 2015.5.10
Python: 2.6.6 (r266:84292, Aug 18 2016, 15:13:37)
Jinja2: 2.2.1
M2Crypto: 0.20.2
msgpack-python: 0.4.6
msgpack-pure: Not Installed
pycrypto: 2.0.1
libnacl: Not Installed
PyYAML: 3.10
ioflo: Not Installed
PyZMQ: 14.3.1
RAET: Not Installed
ZMQ: 3.2.5
Mako: Not Installed
Tornado: Not Installed
timelib: Not Installed
dateutil: 1.4.1
3.1 salt-key
查詢幫助 salt-key --help
常用參數
-a -A -r -R -d -D -Y
查看key salt-key
接收minion端的key: salt-key -A -y ---》接收所有的minion且無需交互。接收完成後查看:
[root@salt-master master]# salt-key
Accepted Keys:
salt-minion01
salt-minion02
Denied Keys:
Unaccepted Keys:
Rejected Keys:
測試
[root@salt-master ~]# salt '*' test.ping
salt-minion01:
True
salt-minion02:
True
4. saltstack認證原理
salt的數據傳輸是通過AES加密,master和minion之間在通信前,需要進行認證。通過認證的方式保證安全性,完成一次認證後,master就可以自由的控制minion來完成各項工作了。
1. minion在第一次啟動時,會在/etc/salt/pki/minion下生成minion.pem(private key)和minion.pub(public key),然後將minion.pub發送給master。
2. master在第一次啟動時,會在/etc/salt/pki/master下生成master.pem和master.pub。通過salt-key接收minion的public key,在master的/etc/salt/pki/master/minions目錄下存放,以minion id命名的public key,同時minion會保存一份master public key在/etc/salt/pki/minion_master.pub
認證小結:
minion將自己的公鑰發送給master
master認證後會將自己的公鑰放置在minion端
由於這裏是測試環境,master與minion端都關閉了防火墻及selinux。不然master可能無法接收minion端的key。
5. saltstack遠程執行
遠程執行是saltstack的核心功能之一。主要使用salt模塊可以批量給選定的minion端執行相應的命令,並獲得返回結果。
如 salt '*' test.ping *代表所有,test表示模塊,ping表示模塊下的方法。
salt '*' disk.usage 查看磁盤使用情況
saltstack可以使用cmd.run(非常重要) 模塊遠程執行shell命令
//讓所有minion節點運行uptime命令
[root@salt-master ~]# salt '*' cmd.run 'uptime'
salt-minion02:
10:30:44 up 1 day, 11:53, 1 user, load average: 0.00, 0.00, 0.00
salt-minion01:
10:30:45 up 1 day, 11:53, 1 user, load average: 0.00, 0.00, 0.00
#saltstack提供了大量的命令模塊可以使用
#cmd.run可以執行所有的命令,不建議在生產環境中頻繁使用。
6. saltstack配置管理
salt通過狀態模塊來識別配置描述文件state狀態文件,格式是YAML擴展名,後綴是.sls
6.1 YAML基礎語法
YAML:
1. 縮進(層級關系) 2個空格,不能使用tab
2. 冒號 key:value ----》以冒號結尾,以冒號為路徑的除外,其他必須有空格
3. 短橫線
表示列表項,短橫線加一個空格 - list1
- list2
6.2 配置文件
master端配置文件中有說明配置文件寫在什麽地方。
cat /etc/salt/master
# file_roots:
# base: ----》基礎環境
# - /srv/salt/
# dev: ---》開發環境
# - /srv/salt/dev/services
# - /srv/salt/dev/states
# prod: -----》生產環境
# - /srv/salt/prod/services
# - /srv/salt/prod/states
這裏啟用測試環境
file_roots: ----》打頭寫
base: ---》縮進 2個空格
- /srv/salt ----》4個空格,文件路徑
啟用後重啟master服務,創建目錄 mkdir -p /srv/salt
在實際成產環境中可以根據業務分別創建不同的文件夾,然後在對應的裏面寫。
6.3 實例
這裏在salt下創建app目錄,然後在app目錄中寫配置文件。
[root@salt-master app]# pwd
/srv/salt/app
vim vsftpd.sls
[root@salt-master app]# cat vsftpd.sls
vsftpd_install:
pkg.installed: ------>pkg模塊 開頭兩個空格
- names: ------》下面接多個list 開頭4個空格
- vsftpd
- httpd
7. 狀態管理
7.1 saltstack狀態
配置文件寫好後
執行 salt '*' state.sls app.vsftpd env=base 默認為base環境
minion端安裝完成,如下,如已經安裝則忽略。
[root@salt-master salt]# salt '*' cmd.run 'rpm -qa|grep vsftpd'
salt-minion01:
vsftpd-2.2.2-24.el6.x86_64
salt-minion02:
vsftpd-2.2.2-24.el6.x86_64
[root@salt-master salt]# salt '*' cmd.run 'rpm -qa|grep httpd'
salt-minion01:
httpd-tools-2.2.15-60.el6.centos.6.x86_64
httpd-2.2.15-60.el6.centos.6.x86_64
salt-minion02:
httpd-2.2.15-60.el6.centos.6.x86_64
httpd-tools-2.2.15-60.el6.centos.6.x86_64
如果要安裝後服務啟動可以繼續編寫配置文件,如下:
[root@salt-master app]# cat vsftpd.sls
vsftpd_install:
pkg.installed:
- names:
- vsftpd
- httpd
vsftpd_service:
service.running:
- name: vsftpd
- enable: True
執行salt '*' state.sls app.vsftpd
查看vsftp服務狀態,已經啟動
[root@salt-master app]# salt '*' cmd.run 'service vsftpd status'
salt-minion01:
vsftpd (pid 12399) is running...
salt-minion02:
vsftpd (pid 12721) is running...
在實際生產環境中執行後狀態是不能回退的,所以可以在執行前,進行檢查
如 salt '*' state.sls app.vsftpd test=True
自動化運維之saltstack