Puppet也许是四款工具中最深刻人心的。就可用操做、模块和用户界面而言,它是最全面的。Puppet呈现了数据中心协调的全貌,几乎涵盖每个运行系统,为各大操做系统提供了深刻的工具。初始设置比较简单,只须要在须要加以管理的每一个系统上安装主服务器和客户端代理软件。命令行接口(CLI)简单直观,容许经过puppet命令下载和安装模块。而后,须要对配置文件进行更改,好让模块适合所需的任务;应接到指令的客户端与主服务器联系时,会更改配置文件,或者客户端经过当即触发更改配置文件的推送(push)来进行更改。python
Ansible关注的重点是力求精简和快速,并且不须要在节点上安装代理软件。所以,Ansible经过SSH执行全部功能。须要管理的节点被添加到Ansible配置环境,SSH受权密钥被附加到每一个节点上,这与运行Ansible的用户有关。一旦完成了这步,Ansible主服务器能够经过SSH与节点进行通讯,执行全部必要的任务。Ansible可使用Paramiko(基于SSH2协议的Python实现)或标准SSH用于通讯,不过还有一种加速模式,容许更快速、更大规模的通讯。安全
Salt相似Ansible,由于它也是基于CLI的工具,采用了推送方法实现客户端通讯。它能够经过Git或经过程序包管理系统安装到主服务器和客户端上。客户端会向主服务器提出请求,请求在主服务器上获得接受后,就能够控制该客户端了。Salt能够经过普通的SSH与客户端进行通讯,但若是使用名为minion的客户端代理软件,能够大大加强可扩展性。此外,Salt含有一个异步文件服务器,能够为客户端加快文件服务速度,这彻底是Salt注重高扩展性的一个体现。与Ansible同样,你能够直接经过CLI,向客户端发出命令,好比启动服务或安装程序包;你也可使用名为state的YAML配置文件,处理比较复杂的任务。还有“pillar”,这些是放在集中地方的数据集,YAML配置文件能够在运行期间访问它们。服务器
总结:我的观点puppet最大缺点就是默认状况下Agent每隔30分钟向master同步状态,master主动推送功能比较薄弱(2.7版本),ansible基于SSH服务执行,若是服务器过多不建议使用,他是使用轮训的方式。Salt基于消息队列。性能至关好,适合大量生产环境。架构
SaltStack 是一种基于 C/S 架构的服务器基础架构集中化管理平台,管理端称为 Master,客户端称为 Minion。SaltStack 具有配置管理、远程执行、监控等功能,通常能够理解为是简化版的 Puppet 和增强版的 Func。SaltStack 自己是基于 Python 语言开发实现,结合了轻量级的消息队列软件 ZeroMQ 与 Python 第三方模块(Pyzmq、PyCrypto、Pyjinjia二、python-msgpack 和 PyYAML 等)构建。运维
经过部署 SaltStack 环境,运维人员能够在成千上万台服务器上作到批量执行命令,根据不一样的业务特性进行配置集中化管理、分发文件、采集系统数据及软件包的安装与管理等。异步
一、部署简单、方便;工具
二、支持大部分UNIX/Linux及Windows环境;性能
三、主从集中化管理;加密
四、配置简单、功能强大、扩展性强;spa
五、主控端(master)和被控端(minion)基于证书认证,安全可靠。
六、支持API及自定义模块,可经过Python轻松扩展。
SaltStack 采用 C/S 结构来对云环境内的服务器操做管理及配置管理。为了更好的理解它的工做方式及管理模型,将经过图形方式对其原理进行阐述。
SaltStack 客户端(Minion)在启动时,会自动生成一套密钥,包含私钥和公钥。以后将公钥发送给服务器端,服务器端验证并接受公钥,以此来创建可靠且加密的通讯链接。同时经过消息队列 ZeroMQ 在客户端与服务端之间创建消息发布链接。具体通讯原理图,如图 1 所示,命令执行如图 2 所示:
专业术语说明:
Minion 是 SaltStack 须要管理的客户端安装组件,会主动去链接 Master 端,并从 Master 端获得资源状态信息,同步资源管理信息。
Master 做为控制中心运行在主机服务器上,负责 Salt 命令运行和资源状态的管理。
ZeroMQ 是一款开源的消息队列软件,用于在 Minion 端与 Master 端创建系统通讯桥梁。
Daemon 是运行于每个成员内的守护进程,承担着发布消息及通讯端口监听的功能。
原理图说明:
Minion 是 SaltStack 须要管理的客户端安装组件,会主动去链接 Master 端,并从 Master 端获得资源状态信息,同步资源管理信息。
Master 做为控制中心运行在主机服务器上,负责 Salt 命令运行和资源状态的管理。
Master 上执行某条指令经过队列下发到各个 Minions 去执行,并返回结果。
为了让你们更好的理解 SaltStack 集中化管理方面的优点,所以,根据项目的实际状况绘制了部署架构图,并在文中对架构图进行了详细说明。如图 3 所示:
说明:
SaltStack 的全部被管理客户端节点(如图 3 所示 DB 和 Web),都是经过密钥进行加密通讯,使用端口为 4506。客户端与服务器端的内容传输,是经过消息队列完成,使用端口为 4505。Master 能够发送任何指令让 Minion 执行,salt 有不少可执行模块,好比说 CMD 模块,在安装 minion 的时候已经自带了,它们一般位于你的 python 库中,locate salt | grep /usr/ 能够看到 salt 自带的全部东西。
为了更好的理解架构用意,如下将展现主要的命令发布过程:
SaltStack 的 Master 与 Minion 之间经过 ZeroMq 进行消息传递,使用了 ZeroMq 的发布订阅模式,链接方式包括 TCP 和 IPC。
Salt 命令,将 cmd.run ls 命令从 salt.client.LocalClient.cmd_cli 发布到 Master,获取一个 Jodid,根据 jobid 获取命令执行结果。
Master 接收到命令后,将要执行的命令发送给客户端 minion。
Minion 从消息总线上接收到要处理的命令,交给 minion._handle_aes 处理。
Minion._handle_aes 发起一个本地线程调用 cmdmod 执行 ls 命令。线程执行完 ls 后,调用 Minion._return_pub 方法,将执行结果经过消息总线返回给 master。
Master 接收到客户端返回的结果,调用 master.handle_aes 方法将结果写的文件中。
Salt.client.LocalClient.cmd_cli 经过轮询获取 Job 执行结果,将结果输出到终端。
Salt须要epel源支持,全部安装前须要先安装epel源包。
[root@Poppy ~]# yum install epel-release -y 不管master minion都须要安装这个epel源支持
1. master端安装
[root@joker ~]# yum install salt-master -y
[root@joker ~]# systemctl start salt-master
2. 奴才端安装
[root@Poppy ~]# yum install salt-minion -y
奴才配置文件修改,告知master
16行指向master,78行默认是fqdn完整主机名
[root@Poppy ~]# cat /etc/salt/minion |grep -v "#" master: master_ip 域名也是能够的
[root@Poppy ~]# systemctl start salt-minion
3. master进行奴才端的受权认证
1)master
[root@joker master]# tree /etc/salt/pki/ /etc/salt/pki/ └── master ├── master.pem 私钥 ├── master.pub 公钥 ├── minions ├── minions_autosign ├── minions_denied 无权限的主机 ├── minions_pre 待确认的主机 └── minions_rejected 拒绝的主机
2)minion