saltstack基本概念及其工作原理

1、概念

SaltStack 是一种基于 C/S 架构的服务器基础架构集中化管理平台,通过管理端下发指令,客户端接受指令的方式进行操作,管理端称为 Master,客户端称为 Minion。SaltStack 具备配置管理、远程执行、监控等功能,一般可以理解为是简化版的 Puppet 和加强版的 Func。SaltStack 本身是基于 Python 语言开发实现,结合了轻量级的消息队列软件 ZeroMQ 与 Python 第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack 和 PyYAML 等)构建,通过部署 SaltStack 环境,运维人员可以在成千上万台服务器上做到批量执行命令,根据不同的业务特性进行配置集中化管理、分发文件、采集系统数据及软件包的安装与管理等。

  • ZeroMQ 是一款消息队列软件,SaltStack 通过消息队列来管理成千上万台主机客户端,传输指令执行相关的操作。而且采用 RSA key 方式进行身份确认,传输采用 AES 方式进行加密,这使得它的安全性得到了保证

2、特性

  • 部署简单、管理方便;
  • 支持大部分的操作系统,如 Unix/Linux/Windows 环境;
  • 架构上使用C/S管理模式,易于扩展;
  • 配置简单、功能覆盖广;
  • 主控端(Master)与被控端(Minion)基于证书认证,确保安全可靠的通信;
  • 支持 API 及自定义 Python 模块,轻松实现功能扩展;

3、saltstack工作原理

SaltStack 客户端(Minion)在启动时,会自动生成一套**,包含私钥和公钥。之后将公钥发送给服务器端,服务器端验证并接受公钥,以此来建立可靠且加密的通信连接。同时通过消息队列 ZeroMQ 在客户端与服务端之间建立消息发布连接

saltstack基本概念及其工作原理

  • Minion 是 SaltStack 需要管理的客户端安装组件,会主动去连接 Master 端,并从 Master 端得到资源状态信息,同步资源管理信息。
  • Master 作为控制中心运行在主机服务器上,负责 Salt 命令运行和资源状态的管理。
  • ZeroMQ 是一款开源的消息队列软件,用于在 Minion 端与 Master 端建立系统通信桥梁。
  1. ZMQ(以下ZeroMQ简称ZMQ)是一个简单好用的传输层,像框架一样的一个socket library,他使得Socket编程更加简单、简洁和性能更高。是一个消息处理队列库,可在多个线程、内核和主机盒之间弹性伸缩
  • Daemon 是运行于每一个成员内的守护进程,承担着发布消息及通信端口监听的功能。

saltstack工作方式:

saltstack基本概念及其工作原理

  • Minion 是 SaltStack 需要管理的客户端安装组件,会主动去连接 Master 端,并从 Master 端得到资源状态信息,同步资源管理信息。
  • Master 作为控制中心运行在主机服务器上,负责 Salt 命令运行和资源状态的管理。
  • Master 上执行某条指令通过队列下发到各个 Minions 去执行,并返回结果。

saltstack工作流程:

saltstack基本概念及其工作原理

  • 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 执行结果,将结果输出到终端。

本文转载自:https://www.ibm.com/developerworks/cn/opensource/os-devops-saltstack-in-cloud/index.html#N100A5