1. 程式人生 > >自動化運維之saltstack

自動化運維之saltstack

功能 遠程執行 結果 4.6 狀態管理 nbsp 2.6 numeric vsftp

1.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

masterminion端都需要安裝

安裝完成後在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加密,masterminion之間在通信前,需要進行認證。通過認證的方式保證安全性,完成一次認證後,master就可以自由的控制minion來完成各項工作了。

1. minion在第一次啟動時,會在/etc/salt/pki/minion下生成minion.pemprivate key)和minion.pubpublic key),然後將minion.pub發送給master

2. master在第一次啟動時,會在/etc/salt/pki/master下生成master.pemmaster.pub。通過salt-key接收minionpublic 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

由於這裏是測試環境,masterminion端都關閉了防火墻及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. 冒號 keyvalue ----》以冒號結尾,以冒號為路徑的除外,其他必須有空格

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