需求:成百上千臺機器,批量地執行某些命令、批量地升級某個服務。html
Shell、expect腳本就能夠實現自動化,可是須要咱們本身手動編寫腳本,效率低下、學習和維護成本很高。服務器
主流自動化運維工具:Puppet、Saltstack、Ansible等。架構
關於Puppet的介紹文章:https://blog.51cto.com/ixdba/1149055運維
Puppet是開源的基於Ruby的系統配置管理工具,基於C/S的部署架構。是一個爲實現數據中心自動化管理而設計的配置管理軟件,它使用跨平臺語言規範,管理配置文件、用戶、軟件包、系統服務等。客戶端默認每隔半小時會和服務器通訊一次,確認是否有更新。固然也能夠配置主動觸發來強制客戶端更新。這樣就把平常的系統管理任務代碼化了,代碼化的好處是能夠分享,保存,避免重複勞動,也能夠快速恢復以及快速的大規模部署服務器。ssh
Saltstack使用Python開發,是一個很是簡單易用和輕量級的管理工具。C/S架構,由Master和Minion構成,經過ZeroMQ進行通訊。Saltstack的master端監聽4505與4506端口,4505爲salt的消息發佈系統,4506爲salt客戶端與服務端通訊的端口;salt客戶端程序不監聽端口,客戶端啓動後,會主動鏈接master端註冊,而後一直保持該TCP鏈接,master經過這條TCP鏈接對客戶端控制,若是鏈接斷開,master對客戶端就無能爲力了。固然,客戶端若檢查到斷開後會按期的一直鏈接master端的。分佈式
ansible是個什麼東西呢?官方的title是:Ansible is Simple IT Automation. 中文解釋:簡單的自動化IT工具。工具
這個工具的目標有這麼幾項:自動化部署APP;自動化管理配置項;自動化的持續交互;自動化的(AWS)雲服務管理。學習
全部的這幾個目標從本質上來講都是在一個臺或者幾臺服務器上,執行一系列的命令而已。通俗的說就是批量的在遠程服務器上執行命令 。固然,最主要的是它是基於paramiko開發的。這個paramiko是什麼呢?它是一個純Python實現的ssh協議庫。所以fabric和ansible還有一個共同點就是不須要在遠程主機上安裝client/agents,由於它們是基於ssh來和遠程主機通信的。簡單概括一下:基於Python paramiko開發,分佈式,無需客戶端,輕量級,配置語法使用YMAL及Jinja2模板語言,更強的遠程命令執行操做。spa
Saltstack必需要安裝agent(minion),因此部署環節多了一步,Ansible無需安裝agent。設計
SaltStack是C/S架構,有master和minion,Ansible只須要有一箇中心節點。
Saltstack基於ZeroMQ通訊,Ansible基於ssh,Saltstack執行效率比Ansible快,若是機器量很大(>200)最好使用Saltstack
Ansible相比較Saltstack,學習起來更加容易
其餘方面更詳細的對比,參考 http://www.javashuo.com/article/p-qzjlwmws-bm.html