概要html
saltstack是基於Python開發的C/S架構的一款批量管理工具,底層採用動態的鏈接總線(ZeroMQ消息隊列pub/sub方式通訊),使用ssl證書籤發的方式進行認證管理,使其能夠用於編配, 遠程執行, 配置管理等等。部署輕鬆,在幾分鐘內可運行起來,擴展性好,很容易管理上萬臺服務器,速度夠快,服務器之間秒級通信。號稱世界上最快的消息隊列ZeroMQ使得saltstack很是快速的管理大量服務器,採用RSA Key方式確認身份,傳輸採用AES加密,安全性也很是有保障。python
Saltstack使用Python開發,是一個很是簡單易用和輕量級的管理工具。由Master和Minion構成,經過ZeroMQ進行通訊。web
SaltStack基於Python語言實現,結合輕量級消息隊列(ZeroMQ)與Python第三方模塊(Pyzmq、PyCrypto、Pyjinjia二、python-msgpack和PyYAML等)構建。有以下特性:編程
(1)、部署簡單、方便;安全
(2)、支持大部分UNIX/Linux及Windows環境;服務器
(3)、主從集中化管理;網絡
(4)、配置簡單、功能強大、擴展性強;架構
(5)、主控端(master)和被控端(minion)基於證書認證,安全可靠;app
(6)、支持API及自定義模塊,可經過Python輕鬆擴展。ide
Saltstack的master端監聽4505與4506端口,4505爲salt的消息發佈系統,4506爲salt客戶端與服務端通訊的端口;salt客戶端程序不監聽端口,客戶端啓動後,會主動鏈接master端註冊,而後一直保持該TCP鏈接,master經過這條TCP鏈接對客戶端控制,若是鏈接斷開,master對客戶端就無能爲力了。固然,客戶端若檢查到斷開後會按期的一直鏈接master端的。
核心功能
1、使命令發送到遠程系統是並行的而不是串行的
2、使用安全加密的協議
3、使用最小最快的網絡載荷
4、提供簡單的編程接口
架構
saltstack是基於C/S服務模式,在該架構中,服務器端叫作Master,客戶端叫作Minion。傳統的C/S模式咱們這樣理解,客戶端發送請求給服務器端,服務器端接受到來自客戶端的請求並處理完成後再返回客戶端。 在saltstack架構中,不只有傳統的C/S服務模式,並且有消息隊列中的發佈與訂閱(pub/sub)服務模式。目前咱們通常用其C/S架構作批量管理。
1) Master:控制中心,salt命令運行和資源狀態管理
2) Minion : 須要管理的客戶端機器,會主動去鏈接Mater端,並從Master端獲得資源狀態
3) 信息,同步資源管理信息
4) States:配置管理的指令集
5) Modules:在命令行中和配置文件中使用的指令模塊,能夠在命令行中運行
6) Grains:minion端的變量,靜態的
7) Pillar:minion端的變量,動態的比較私密的變量,能夠經過配置文件實現同步minions定義
8) highstate:爲minion端下發永久添加狀態,從sls配置文件讀取.即同步狀態配置
9) salt_schedule:會自動保持客戶端配置
Saltstack安裝
安裝方式有四種,下面經過一個案例簡單介紹在CentOS6.8上進行SaltStack部署。
(1) yum方式安裝(採用saltstack源)推薦這種方式,簡單粗暴。注意沒有配置saltstack源的,請先配置saltstack源。
Version 7:
rpm --importhttps://repo.saltstack.com/yum/redhat/7/x86_64/latest/SALTSTACK-GPG-KEY.pub
Version 6:
rpm --import https://repo.saltstack.com/yum/redhat/6/x86_64/latest/SALTSTACK-GPG-KEY.pub
Save the following file to /etc/yum.repos.d/saltstack.repo:
Version 7 and 6:
[saltstack-repo]
name=SaltStack repo for RHEL/CentOS $releasever
baseurl=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest
enabled=1
gpgcheck=1
gpgkey=https://repo.saltstack.com/yum/redhat/$releasever/$basearch/latest/SALTSTACK-GPG-KEY.pub
安裝好saltstack源後,用yum 命令來檢查是否添加到源列表。
yum repolist
Master端安裝:
yum -y install salt-master
Minon端安裝:
yum -y install salt-minion
配置並啓動Saltstack
Salt 的配置很是簡單。默認的 master 配置就能夠在大多數狀況下運行。僅僅須要更改的是 minion ,在 minion 配置文件中設置 master 的地址。
The configuration fileswill be installed to /etc/salt and are named after the respective components,/etc/salt/master, and /etc/salt/minion.
默認Salt master監聽全部網卡接口(0.0.0.0)的4505和4506端口. 若是須要指定監聽IP, 經過 /etc/salt/master配置文件中的"interface"指令進行以下修改:
- #interface: 0.0.0.0
+ interface: 10.0.0.1 #此處是server端監聽的地址。
auto_accept: True #此處是自動接受客戶端發送過來的key,若是服務器不少的話,須要開啓該功能。
儘管Salt Minion有許多配置選項,但配置Minion仍是很是簡單的. 默認的配置Minion會嘗試鏈接DNS名爲"salt"的master,若是minion解析到的地址正確,就無需再作配置.
若是DNS名爲"salt"並不能解析到本地正確的Master地址,須要經過以下方法修改 /etc/salt/minion 配置文件中的"master"指令:
- #master: salt
+ master: 10.0.0.1 #這裏改爲你的master服務器地址
id: web01 #建議這裏修改爲主機名,便於master端分辨
#在配置文件末尾加入下面內容,每隔5分鐘自動同步master配置,效果等同於在客戶端執行salt-call state.highstate或在server端執行 salt '*'state.highstate
schedule:
highstate:
function: state.highstate
minutes: 5
更新完配置後,須要重啓Salt minion以使配置生效.
1. 前臺啓動master(若是要以daemon方式啓動,請指定 -d參數<salt-master -d>): salt-master
2. 前臺啓動minion(若是要以daemon方式啓動,請指定 -d參數<salt-minion -d>): salt-minion
運行有問題?
排除 Salt 故障最簡單的方法是在前臺運行 master 和 minion,同時把 log level 設爲``debug``
salt-master --log-level=debug
以普通(非root)用戶運行:
想要使用其餘用戶身份運行Salt,參見:conf_master:`user`參數在master配置文件中。
Additionally, ownership, and permissions need to be set suchthat the desired user can read from and write to the following directories (andtheir subdirectories, where applicable):
/etc/salt
/var/cache/salt
/var/log/salt
/var/run/salt
更多關於如何使用非特權用戶運行salt的信息能夠在 這裏 找到。
salt-key證書管理:
master端證書存放路徑:/etc/salt/pki/master/minions
注意:若是細心的話,你會發現小寫字母針對的單一對象,大寫都是針對全體。好比 -l顯示單一key,-L顯示全部key;-a 接受指定key,而-A 就是接受全部key。
saltstack認證原理:
1)、minion在第一次啓動時,會在/etc/salt/pki/minion/(該路徑在/etc/salt/minion裏面設置)下自動生成minion.pem(private key)和 minion.pub(public key),而後將 minion.pub發送給master。
2)、master在接收到minion的publickey後,經過salt-key命令accept minion public key,這樣在master的/etc/salt/pki/master/minions下的將會存放以minion id命名的 public key,而後master就能對minion發送指令了。
salt-key -L #查詢全部接收到的證書 salt-key -a <證書名> #接收單個證書 salt-key -A #接受全部證書 salt-key -d <證書名> #刪除單個證書 salt-key -D #刪除全部證書 |
Salt在Master和Minion之間的通信採用AES加密. 這就確保了發送給minions的命令不會被篡改, Master和Minion之間的通信認證經過信任的已接受的key進行管理.
在發送給Minion以前,須要確保minion的key已經被Master所接受. 運行 ``salt-key``命令將列出Salt Master已知的全部keys.
[root@master ~]# salt-key -L
Unaccepted Keys:
alpha
bravo
charlie
delta
Accepted Keys:
[root@master ~]# salt-key –A -y
[root@master ~]# salt-key -L
Unaccepted Keys:
Accepted Keys:
alpha
bravo
charlie
delta
發送test.ping指令
[root@moban ~]# salt '*' test.ping
moban2:
True
moban1:
True
限於篇幅太長,請你們移步這裏進行下載查看,謝謝!