需求:成百上千台机器,批量地执行某些命令、批量地升级某个服务。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