saltstack

自动化工具比较

Puppet也许是四款工具中最深入人心的。就可用操作、模块和用户界面而言,它是最全面的。Puppet呈现了数据中心协调的全貌,几乎涵盖每一个运行系统,为各大操作系统提供了深入的工具。初始设置比较简单,只需要在需要加以管理的每个系统上安装主服务器和客户端代理软件。命令行接口(CLI)简单直观,允许通过puppet命令下载和安装模块。然后,需要对配置文件进行更改,好让模块适合所需的任务;应接到指令的客户端与主服务器联系时,会更改配置文件,或者客户端通过立即触发更改配置文件的推送(push)来进行更改。

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简介与特性

SaltStack 是一种基于 C/S 架构的服务器基础架构集中化管理平台,管理端称为 Master,客户端称为 Minion。SaltStack 具备配置管理、远程执行、监控等功能,一般可以理解为是简化版的 Puppet 和加强版的 Func。SaltStack 本身是基于 Python 语言开发实现,结合了轻量级的消息队列软件 ZeroMQ 与 Python 第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack 和 PyYAML 等)构建。

通过部署 SaltStack 环境,运维人员可以在成千上万台服务器上做到批量执行命令,根据不同的业务特性进行配置集中化管理、分发文件、采集系统数据及软件包的安装与管理等。

SaltStack 具有以下特性:

1、部署简单、方便;

2、支持大部分UNIX/Linux及Windows环境;

3、主从集中化管理;

4、配置简单、功能强大、扩展性强;

5、主控端(master)和被控端(minion)基于证书认证,安全可靠。

6、支持API及自定义模块,可通过Python轻松扩展。

SaltStack 的工作原理

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 的架构设计

为了让大家更好的理解 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 执行结果,将结果输出到终端。

saltstack安装

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

 

posted @ 2018-07-04 07:57  liqianlong  阅读(249)  评论(0编辑  收藏  举报