Saltstack是一個新的基礎設施管理工具。目前處於快速發展階段,可以看做是pssh+弱化的Puppet的組合。間接的反映出了saltstack的兩大功能:遠程執行和配置管理。
Saltstack使用Python開發,是一個非常簡單易用和輕量級的管理工具。由Master和Minion構成,通過ZeroMQ進行通信。
Saltstack的master端監聽4505與4506端口,4505爲salt的消息發佈系統,4506爲salt客戶端與服務端通信的端口;salt客戶端程序不監聽端口,客戶端啓動後,會主動連接master端註冊,然後一直保持該TCP連接,master通過這條TCP連接對客戶端控制,如果連接斷開,master對客戶端就無能爲力了。當然,客戶端若檢查到斷開後會定期的一直連接master端的。
1. saltstack安裝
centos/redhatserver端安裝
1
2
3
4
|
#導入EPEL YUM源 rpm -Uvh http: //mirror .pnl.gov /epel/5/i386/epel-release-5-4 .noarch.rpm #服務器master的安裝 yum -y install salt-master |
centos/redhat客戶端minion安裝
1
2
3
|
#導入EPEL YUM源 rpm -Uvh http: //mirror .pnl.gov /epel/5/i386/epel-release-5-4 .noarch.rpm yum -y install salt-minion |
ubuntu/debian server端和client端安裝
1
2
3
4
5
6
7
|
wget -q -O - "http://debian.saltstack.com/debian-salt-team-joehealy.gpg.key" | apt-key add - echo "deb http://debian.saltstack.com/debianwheezy-saltstack main" /etc/apt/sources .list echo "debhttp://debian.saltstack.com/debian wheezy-saltstack main" | tee /etc/apt/sources .list apt-get update apt-get installsalt-master # On the salt-master apt-get installsalt-minion # On each salt-minion apt-get install salt-syndic |
2. saltstacks配置文件修改
master端配置文件修改
1
2
3
|
vi /etc/salt/master interface: 115.28.2.1 #此處是server端監聽的地址。 auto_accept: True #此處是自動接受客戶端發送過來的key,如果服務器很多的話,需要開啓該功能。 |
啓動master
1
2
|
/etc/salt/master -d #後臺啓動 /etc/salt/master #前臺啓動,方便調試 |
minion端配置文件修改:
1
2
3
4
5
6
7
8
9
|
#vi /etc/salt/minion master: 115.28.2.1 #這裏改成你的master服務器地址 id : web01 #建議這裏修改成主機名,便於master端分辨 #在配置文件末尾加入下面內容,每隔5分鐘自動同步master配置,效果等同於在客戶端執行salt-call state.highstate或在server端執行 salt '*'state.highstate schedule: highstate: function : state.highstate minutes: 5 |
啓動minion:
1
2
3
|
/etc/salt/minion -d #後臺啓動 /etc/salt/minion #前臺啓動,方便調試 注:minion啓動後,自動會生成公鑰私鑰,並把公鑰發送到master端。minion不監聽端口,全靠和master保持長連接,可通過 netstat -an| grep ES來查看是否有連接。 |
3. salt-key證書管理
master端證書存放路徑:/etc/salt/pki/master/minions
1
2
3
4
5
|
salt-key -L #查詢所有接收到的證書 salt-key -a <證書名> #接收單個證書 salt-key -A #接受所有證書 salt-key -d <證書名> #刪除單個證書 salt-key -D #刪除所有證書 |
4. salt實時批量操作
語法:
1
|
salt [選項] '<target>' < function > [arguments] |
常用命令舉例:
1
2
3
4
5
6
7
8
9
10
11
|
salt '*' test . ping #*爲匹配所有主機,test.ping爲salt一個函數,注:*號是正則,若分了多個組,可以類似於web*,只匹配web服務器 salt '*' cmd.run 'df -h' #查看所有主機的磁盤信息,cmd.run執行單個命令 salt '*' cmd.script salt: //hello .sh salt '*' cmd.script salt: //scripts/runme .sh 'arg1 arg2 "arg 3"' #cmd.script執行一個腳本,即把本地腳本拷貝到遠程主機上執行,hello.sh要放在指定的文件存放路徑,默認是/srv/salt/ salt '*' state.highstate #向客戶端推送master端配置。 salt '*' cmd.run 'df -h ' -t 5 #超時控制 |
5. salt分組管理
在配置文件/etc/salt/master中加入如下內容:
1
2
3
4
5
6
|
[root@yang salt] # vimaster.d/group.conf nodegroups: group1: 'L@DG-Server-27,DG-Server-28' group2: 'L@qsmind' #分組格式可在/etc/salt/master中搜索group看示例 |
分組執行:
1
|
salt -N group1 cmd.run 'hostname' |
6. salt-ssh遠程主機批量自動登陸
salt-ssh批量密碼認證登陸,參考峯雲大神的博文
http://rfyiamcool.blog.51cto.com/1030776/1305710
7. salt-run檢查客戶端up狀態
注:該處狀態檢查salt使用的是test.ping,如果服務器禁ping,則該處不準。
1
2
3
|
salt-run manage.status #查看所有客戶端up/down狀態 salt-run manage.up #只顯示up狀態的客戶端 salt-run manage.down #只顯示down狀態的客戶端 |
8. salt-cp批量拷貝文件
在master端執行:
1
2
3
4
5
|
語法: salt- cp [options] '<target>' SOURCE DEST 示例: salt- cp '*' /etc/hosts /etc/hosts #把master上的hosts文件分發到所有主機。 |
9. saltstack定時同步
可以把salt-call state.highstate命令放在minion端的定時任務中,來進行自動請求同步。
也可以把salt '*' state.highstate放在master端的定時任務中,來進行自動推送到所有機器。
也可以在/etc/salt/minion配置文件中加入如下內容,如下是每隔5分鐘同步,效果一樣。
1
2
3
4
|
schedule: highstate: function :state.highstate seconds:300 |
10. saltstack自動分發目錄
指定同步的目錄後,以後文件只需放到該目錄下就會自動同步到minion端。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
[root@yang salt] # cat /srv/salt/top.sls base: "DG-Server*" : - ssh_key.key - zabbix.zabbix #在top.sls文件中指定哪些主機訪問哪些目錄 [root@yang salt] # cat /srv/salt/zabbix/zabbix.sls /usr/local/zabbix/scripts : #指定minion端同步後生成的目錄 file .recurse: - source : salt: //zabbix/zabbix_scripts #指定要master端同步的原始目錄,以後只要把想要分發的文件放在這個目錄中,就會自動同步了。 - dir_mode: 755 - file_mode: 744 #用dir_mode和file_mode來設置文件和目錄的權限 |
11. saltstack自動分發文件
如下配置,當文件出現變更時,匹配DG-Server開頭的主機,同步文件到這些minion上,並設置爲對應的文件權限。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
[root@yang salt] # cat /srv/salt/top.sls base: "DG-Server*" : - ssh_key.key - zabbix.zabbix [root@yang zabbix] # cat /srv/salt/zabbix/zabbix.sls /usr/local/zabbix/etc/zabbix_agentd .conf.d /UserParameter .conf: #指定在minion端生成的文件名 file .managed: - source : salt: //zabbix/UserParameter .conf #指定在master同步的原始文件 - backup: minion #當文件發生變化時,都會把原文件備份,備份文件目錄:/var/cache/salt/minion/file_backup/ - mode: 744 - user: root - group: root |
12. saltstack進程狀態管理
例:如httpd的配置文件進行更改時,自動重新加載配置文件。(該圖取於網上,說明見圖上)
13. saltstack自定義模塊
當有需要使用一些statstack沒有的方法時,可以自己增加模塊。
參考峯雲大神的文章吧。
http://rfyiamcool.blog.51cto.com/1030776/1262537
saltstack常用功能也就批量執行命令或腳本,批量分發文件,自動同步目錄與文件,整體來說很簡單實用。但salt有一個缺點,zeromq雖性能很高,但穩定性略差,經常出現minion與master連接斷開的情況,導致有些服務器會執行命令失敗,這個請大家要注意。