一、Saltstack架構
Saltstack基于C/S架構,服務端master:192.168.179.128和用戶端minions :192.168.179.129
二、Saltstack的安裝配置
1、master的安裝
rpm -ivhhttp://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
yum install salt-master預設配置檔案位于/etc/salt/master ,預設不需要更改該配置檔案。master端有兩個端口需要在iptables上放行
4505(publish_port):salt的消息釋出系統
4506(ret_port):salt 用戶端與服務端通信的端口
啟動方法:/etc/init.d/salt-master start
2、minion用戶端的安裝
yum install salt-minion用戶端的配置檔案為/etc/salt/minion ,打開該檔案,這裡有兩項是必須配置項。其一、找到如下行
# resolved, thenthe minion will fail to start.
#master: salt
在其下增加master主機的配置
# resolved, then the minion will fail to start.
master: 192.168.179.128
這裡直接配置的是IP位址,也可以配置成主機名,如果配置成主機名的話,需要在/etc/hosts檔案中master主機對應的IP ,如果使用内部DNS的例外,可以在内部DNS上的統一配置。
其二、找到如下段部分
Rejected Keys:在其下增加一行内容
id: host174
[root@localhost ]# salt-key -L
Accepted Keys:
host129
Unaccepted Keys:
這裡是指定目前主機的id号,這在後面master認證和master調用指令執行時顯示的名稱,可以根據實際識别需要填寫。另外需要注意的是,以上兩處配置冒号後面都需要有一個空格,不然會報如下錯誤:
Starting salt-miniondaemon: [ERROR ] Error parsing configuration file: /etc/salt/minion - whilescanning a simple key
in "<string>", line 44, column 1:
id:host172
^
could not found expected ':'
in "<string>", line 46, column 1:
# Append a domain to a hostname ...
^除以上兩個必須配置項外,用戶端還有其他很多可配置項,如user(預設是root)、root_dir(預設是根目錄)等選項,這些配置後可以控制master端的權限。
配置檔案配置完成後,可以通過/etc/init.d/salt-minion start指令啟動minion 。
三、C/S認證
和puppet一樣, salt 的 master 和 minions 是通過證書通信的,故存在證書的信任頒發問題。
在master端:salt-key -L 檢視目前需要接受的keys(master和minions都需要把服務開啟)。
Rejected Keys:這裡可以看到我已經認證過一台id為host129的主機。我再新增一個130的主機:
[root@localhost conf]# salt-key -L
host130
Rejected Keys:
[root@localhost conf]# salt-key -A
The following keys are going to be accepted:
host1130
Proceed? [n/Y] Y
Key for minion host130 accepted.
Rejected Keys:我上面用的-A參數,該參數意思是接受所有認證主機的認證,也可以使用 -a id名隻認證單獨的主機。預設認證完成後會在/etc/salt/pki/master/minions目錄找到以ID名指令的檔案,裡面存放的是密鑰檔案。
如果對用戶端信任,可以讓master自動接受請求,在master端/etc/salt/master配置
auto_accept: True
注:認證這裡zeromq2版本下有一個bug --minion與master的連接配接斷開後,不會自動重連的問題,zeromq3正常,這個主要在centos5下經常遇到。具體可以通過以下方法确認具體的版本:
[root@localhost minions]# salt '*' test.versions_report
host130:
Salt: 2014.1.0
Python: 2.6.6 (r266:84292, Jun 18 2012, 14:18:47)
Jinja2: 2.2.1
M2Crypto: 0.20.2
msgpack-python: 0.1.13
msgpack-pure: Not Installed
pycrypto: 2.0.1
PyYAML: 3.10
PyZMQ: 2.2.0.1
ZMQ: 3.2.4
host129:
Python: 2.6.6 (r266:84292, Feb 22 2013, 00:00:18)
Jinja2: unknown
如果更換版本,可以到這裡下載下傳http://download.opensuse.org/repositories/home:/fengshuo:/zeromq/CentOS_CentOS-5/x86_64/ ,centos6版本的epel源裡有,也可以在這裡找到,隻需把centos-5改成centos-6就行了。
四、指令執行
1、測試master和minion之間的通信是否正常
[root@localhost minions]# salt '*' test.ping
True
True代表正常,*代表所有主機,也可以選擇單台或者按組及正則進行比對等,這個可以參看下官方相關文檔。其預設執行的正則是shell正則,也可以使用其他正則或組等,如下:
salt 'shell正則' 指令
salt -E 'prel 正則'
salt -N $group 指令
salt -L 'server_id1,server_id2,server_id3' 指令
2、執行指令操作
常用的操作類似如下
salt '*' cmd.run"ab -n 10 -c 2 http://www.111cn.net/"
salt '*' grains.ls 檢視grains分類
salt '*' grains.items 檢視grains所有資訊
salt '*' grains.item osrelease 檢視grains某個資訊
salt '*' cmd.run "/App/nginx/sbin/nginx -v"指令執行使用cmd.run參數,由于輸出内容較多,不再一一列出,這裡隻列出一台檢視nginx版本的:
[root@localhost minions]# salt'*' cmd.run "/App/nginx/sbin/nginx -v"
Tengine version: Tengine/1.5.2 (nginx/1.2.9)
Tengine version: Tengine/1.4.6 (nginx/1.2.9)