1. 程式人生 > 實用技巧 >集中化管理平臺Saltstack

集中化管理平臺Saltstack

集中化管理平臺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.64505 ZeroMQ的PUBsystem,傳送訊息

Python2.64506 REPsystem是來接受訊息

Salt-minion python2.64505 ZMQ的PUBsystem,傳送訊息

3.軟體版本

軟體版本號

OS CentOSrelease 6.7 (Final)

Python python2.6.6

saltstack2015.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自動化運維技術與最佳實踐》