概要
saltstack是基於Python開發的C/S架構的一款批量管理工具,底層采用動態的連接總線(ZeroMQ消息隊列pub/sub方式通信),使用ssl證書簽發的方式進行認證管理,使其可以用於編配, 遠程執行, 配置管理等等。
部署輕松,在幾分鍾內可運行起來,擴展性好,很容易管理上萬台服務器,速度夠快,服務器之間秒級通訊。號稱世界上最快的消息隊列ZeroMQ使得saltstack非常快速的管理大量服務器,采用RSA Key方式確認身份,傳輸采用AES加密,安全性也非常有保障。
服務架構
saltstack是基於C/S服務模式,在該架構中,服務器端Master,客戶端Minion。在saltstack架構中,不僅有傳統的C/S服務模式,而且有消息隊列中的發布與訂閱(pub/sub)服務模式。目前我們一般用其C/S架構做批量管理。
minion與master通信模式如下圖:
Master與Minion的連接
在master和minion端都是以守護進程的模式運行。SaltStack master啟動后默認監聽4505和4506兩個端口。4505(publish_port)為saltstack的消息發布系統,4506(ret_port)為saltstack客戶端與服務端通信的端口。如果使用lsof 查看4505端口,會發現所有的minion在4505端口持續保持在ESTABLISHED狀態。整個通信過程可以用debug查看。
master:
salt-master –l debug
ss –a | grep '4505|4506'
minion:
salt-minion –l debug
安裝
首先安裝epel源,
RHEL/CentOS 6:
rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
RHEL/CentOS 7:
rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
Master端安裝:
yum -y install salt-master
Minon端安裝:
yum -y install salt-minion
saltstack配置文件
下面給出master和minion所以配置文件的分類解釋以及在我們實驗環境下所需要設置的配置參數。
master配置文件
在大規模使用saltstack的時候會經常遇到的問題參數
max_open_files:可根據master和minion數量進行適當調整
timeout:根據master和minion網絡狀況適當調整
auto_accpet和autosign_file:大規模部署的時候可以設置自動簽證
master_tops和所有以external開頭的參數:saltstack與外部系統進行整合的相關配置參數
主要配置
安全配置
salt-ssh配置
state系統配置
文件服務配置
pillar系統配置
syndic架構配置
日志配置
minion配置文件
主要配置
模塊管理配置
state系統配置
文件目錄配置
安全配置
日志配置
長連接配置
在我們實驗環境下我們使用如下的配置:
master:
minion:
saltstack的證書管理
要理解證書管理首先要了解master與minion認證的原理:
Master與Minion認證
-
minion在第一次啟動時,會在/etc/salt/pki/minion/(該路徑在/etc/salt/minion里面設置)下自動生成minion.pem(private key)和 minion.pub(public key),然后將 minion.pub發送給master。
-
master在接收到minion的public key后,通過salt-key命令accept minion public key,這樣在master的/etc/salt/pki/master/minions下的將會存放以minion id命名的 public key,然后master就能對minion發送指令了。
那么一些證書管理的指令可通過salt-key -h查看,下面為常見命令:
小寫字母針對的單一對象,大寫都是針對全體。
salt-key -L #查詢所有接收到的證書
salt-key -a <證書名> #接收單個證書
salt-key -A #接受所有證書
salt-key -d <證書名> #刪除單個證書
salt-key -D #刪除所有證書
salt-key -P #打印所有的public key
salt-key -p PRINT #打印指定的public key
salt-key -r REJECT #拒絕指等待認證的key
salt-key -R #拒絕所有等待認證的key
salt-key -f FINGER #顯示指定key的指紋信息
salt-key -F #顯示所有key的指紋信息
日常命令參數:
master:
/usr/bin/salt #salt核心操作命令
/usr/bin/salt-cp #salt文件傳輸命令
/usr/bin/salt-key #salt證書管理命令
/usr/bin/salt-master #salt master服務命令
/usr/bin/salt-run #salt master runner命令
/usr/bin/salt-unity #salt統一的調用包裝器,圍繞其他的Salt CLI腳本
1.salt-cp 分發文件到minion上,不支持目錄分發,通常在master運行
salt-cp [options] '<target>' SOURCE DEST
salt-cp '*' testfile.html /tmp
salt-cp 'test*' index.html /tmp/a.html
2.alt-master master運行命令
salt-master [options]
salt-master #前台運行master
salt-master -d #后台運行master
salt-master -l debug #前台debug輸出
3.salt-run 該命令執行runner(salt帶的或者自定義的,runner以后會講),通常在master端執行,比如經常用到的manage
salt-run [options] [runner.func]
salt-run manage.status #查看所有minion狀態
salt-run manage.down #查看所有沒在線minion
salt-run manged.up #查看所有在線minion
minion:
/usr/bin/salt-call #拉取命令
/usr/bin/salt-minion #服務命令
1.salt-call(定時同步)該命令通常在minion上執行,minion自己執行可執行模塊,不是通過master下發job
salt-call [options] <function> [arguments]
salt-call test.ping #自己執行test.ping命令
salt-call cmd.run 'ifconfig' #自己執行cmd.run函數
可以把salt-call state.highstate命令放在minion端的定時任務中,來進行自動請求同步。
也可以把salt '*' state.highstate放在master端的定時任務中,來進行自動推送到所有機器。
也可以在/etc/salt/minion配置文件中加入如下內容,如下是每隔5分鍾同步,效果一樣。
schedule:
highstate:
function:state.highstate
seconds:300
2.salt-minion minion端運行的命令
salt-minion [options]
salt-minion #前台運行
salt-minion -d #后台運行
salt-minion -l debug #前台debug輸出