集中化管理平臺Saltstack
Saltstack是一個服務器基礎架構集中化管理平臺,開始於2011年的一個項目,具備配置管理、遠程執行、監控等功能,一般可以理解成簡化版的puppet和加強版的func。Slatstack基於Python語言實現,結合輕量級消息隊列(ZeroMQ)與Python第三方模塊(Pyzmq、PyCrypto、Pyjinja2、python-msgpack和PyYAML等)構建。
關於什麼是Salt,請查閱官方說明:http://docs.saltstack.cn/topics/index.html
基本原理
SaltStack 採用 C/S模式,server端就是salt的master,client端就是minion,minion與master之間通過ZeroMQ消息隊列通信。
minion上線後先與master端聯繫,把自己的pub key發過去,這時master端通過salt-key -L命令就會看到minion的key,接受該minion-key後,也就是master與minion已經互信。
master可以發送任何指令讓minion執行了,salt有很多可執行模塊,比如說cmd模塊,在安裝minion的時候已經自帶了,它們通常位於你的python庫中。這些模塊是python寫成的文件,裏面會有好多函數,如cmd.run,當我們執行salt '*'cmd.run 'uptime'的時候,master下發任務匹配到的minion上去,minion執行模塊函數,並返回結果。
master監聽4505和4506端口,4505對應的是ZMQ的PUB system,用來發送消息,4506對應的是REP system是來接受消息的。
我們可以這樣理解:
Salt stack的Master與Minion之間通過ZeroMq進行消息傳遞,使用了ZeroMq的發佈-訂閱模式,連接方式包括tcp,ipc。
1.發送消息:
salt命令,將cmd.run ls命令從salt.client.LocalClientNaNd_cli發佈到master,獲取一個jobid,根據jobid獲取命令執行結果。master接收到命令後,將要執行的命令發送給客戶端minion。
2.執行命令:
minion從消息總線上接收到要處理的命令,交給minion._handle_aes處理。minion._handle_aes發起一個本地線程調用cmdmod執行ls命令。
3.執行結果處理:
線程執行完ls後,調用minion._return_pub方法,將執行結果通過消息總線返回給master。master接收到客戶端返回的結果,調用master._handle_aes方法,將結果寫在文件中。
4.返回執行結果:
salt.client.LocalClientNaNd_cli通過輪詢獲取Job執行結果,將結果輸出到終端。
下面,我們來部署Saltstack的平臺:
一,環境配置說明
1.IP地址分配
Hostname IP地址 節點
saltstack01 10.62.83.211 salt-master
Ctest01 10.62.83.11 salt-minion
2.協議和端口
節點 服務 端口號 功能
Salt-master python2.6 4505 ZeroMQ的PUBsystem,發送消息
Python2.6 4506 REPsystem是來接受消息
Salt-minion python2.6 4505 ZMQ的PUBsystem,發送消息
3.軟件版本
軟件 版本號
OS CentOSrelease 6.7 (Final)
Python python2.6.6
saltstack 2015.8.10 (Beryllium)
二,YUM源配置
我們採用yum的安裝方式
# rpm --import https://repo.saltstack.com/yum/redhat/6/x86_64/latest/SALTSTACK-GPG-KEY.pub#yum源認證文件 # vim/etc/yum.repos.d/saltstack.repo #yum源配置文件 [saltstack-repo] name=SaltStack repo for RHEL/CentOS $releasever baseurl=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest enabled=1 gpgcheck=1 gpgkey= # yumrepolist #yum列表更新
三,安裝配置主控端master
1.安裝salt-master
# yuminstall salt-master
下圖是依賴包的安裝:
2.主控端主文件配置
# vim/etc/salt/master interface:10.62.83.211 ##綁定Master通信IP。 auto_accept:True ##自動認證,避免手動運行salt-key來確認證書信任。 #pillar_opts:False ## 是否開啓pillar #pillar_roots: ##這裏3行是定義pillar的主目錄 # base: # - /srv/pillar file_roots: ##指定saltstack文件根目錄位置 base: - /srv/salt
3.啓動主控端服務
#service salt-master start
#chkconfig salt-master on #配置爲開機服務自啓動
4.主控端防火牆配置
在主控端添加TCP 4505,TCP4506的防火牆規則,而在被控端無須配置防火牆,原理是被控端直接與主控端的zeromq建立長鏈接,接收廣播到的任務信息並執行。
# vim/etc/sysconfig/iptables -IINPUT -m state --state new -m tcp -p tcp --dport 4505 -j ACCEPT -IINPUT -m state --state new -m tcp -p tcp --dport 4506 -j ACCEPT
四,安裝被控端minion
1.安裝salt-minion
# yuminstall salt-minion –y
2.被控端主文件配置
# vim/etc/salt/minion master:10.62.83.211 id:Ctest01 ##修改被控端主機識別id,建議使用操作系統主機名來配置
注意:
如果環境中沒有域名解析服務,我們可以配置/etc/hosts文件實現自解析域名。
3.啓動被控端服務
#service salt-minion start
#chkconfig salt-minion on ##配置爲開機服務自啓動
4. 開放被控端防火牆端口
# vim/etc/sysconfig/iptables -IINPUT -m state --state new -m tcp -p tcp --dport 4505 -j ACCEPT
五,結果測試驗證
測試結果
思考:
生產環境中,成千上萬臺host,我們怎麼批量部署被控端呢?哈哈,salt-ssh可以解決。
參考資料:http://docs.saltstack.cn/topics/installation/index.html
參考博文:http://www.cnblogs.com/wjoyxt/p/5083319.html
參考書籍:《Python自動化運維技術與最佳實踐》