原文地址:https://www.ibm.com/developerworks/cn/opensource/os-devops-saltstack-in-cloud/index.html#N10072  

  因为有时候项目上线,需要将本地或者跳板机上的发布版本发布到服务器上,如果服务器数量少,可以一台一台手动拷贝,一旦遇到数量成百上千的服务器,手动拷贝就满足不了需求。于是可以通过自动化运维工具实现,有puppet、saltstack、ansible一些工具。

本文中介绍的架构,主要是在 CentOS7.4 上进行集中部署与测试。该架构主要涉及到三 个开源软件,分别是 Python 软件集,SaltStack 软件集和 ZeroMQ 消息队列软件。

  • 在部署 SaltStack 软件之前,一定要先正确安装 python,因为 SaltStack 是由 python 所编写。不同版本的 SaltStack 需要使用不同版本的 Python 进行匹配,避免不必要的兼容性问题发生,本文将采用 python2.6.6。
  • SaltStack 软件是一个 C/S 架构的软件,通过管理端下发指令,客户端接受指令的方式进行操作。
  • ZeroMQ 是一款消息队列软件,SaltStack 通过消息队列来管理成千上万台主机客户端,传输指令执行相关的操作。而且采用 RSA key 方式进行身份确认,传输采用 AES 方式进行加密,这使得它的安全性得到了保证。

SaltStack 简介与特性

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

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

SaltStack 的工作原理

SaltStack 采用 C/S 结构来对云环境内的服务器操作管理及配置管理。为了更好的理解它的工作方式及管理模型,本章将通过图形方式对其原理进行阐述。

SaltStack 客户端(Minion)在启动时,会自动生成一套密钥,包含私钥和公钥。之后将公钥发送给服务器端,服务器端验证并接受公钥,以此来建立可靠且加密的通信连接。同时通过消息队列 ZeroMQ 在客户端与服务端之间建立消息发布连接。具体通信原理图,如图 1 所示,命令执行如图 2 所示:

专业术语说明:

  • Minion 是 SaltStack 需要管理的客户端安装组件,会主动去连接 Master 端,并从 Master 端得到资源状态信息,同步资源管理信息。
  • Master 作为控制中心运行在主机服务器上,负责 Salt 命令运行和资源状态的管理。
  • ZeroMQ 是一款开源的消息队列软件,用于在 Minion 端与 Master 端建立系统通信桥梁。
  • Daemon 是运行于每一个成员内的守护进程,承担着发布消息及通信端口监听的功能。

SaltStack 操作执行原理图

原理图说明:

  • 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 自带的所有东西。
  • 为了更好的理解架构用意,以下将展示主要的命令发布过程:
  1. SaltStack 的 Master 与 Minion 之间通过 ZeroMq 进行消息传递,使用了 ZeroMq 的发布订阅模式,连接方式包括 TCP 和 IPC。
  2. Salt 命令,将 cmd.run ls 命令从 salt.client.LocalClient.cmd_cli 发布到 Master,获取一个 Jodid,根据 jobid 获取命令执行结果。
  3. Master 接收到命令后,将要执行的命令发送给客户端 minion。
  4. Minion 从消息总线上接收到要处理的命令,交给 minion._handle_aes 处理。
  5. Minion._handle_aes 发起一个本地线程调用 cmdmod 执行 ls 命令。线程执行完 ls 后,调用 Minion._return_pub 方法,将执行结果通过消息总线返回给 master。
  6. Master 接收到客户端返回的结果,调用 master.handle_aes 方法将结果写的文件中。
  7. Salt.client.LocalClient.cmd_cli 通过轮询获取 Job 执行结果,将结果输出到终端。

SaltStack 的安装与配置

注:这里以2台服务器为例,分为master和 minion 服务器

Master 角色的安装

yum install -y salt-master

安装完成后,输入 chkconfig salt-master on 将 master 服务加入到开机启动项,这样每次系统启动,都会自动加载 master 服务。输入 service salt-master start 启动 master 服务。之后通过 netstat –antp 查询服务状态,结果如图

Minion 角色的安装

SaltStack 是一个 C/S 结构的开源软件,Master 通过客户端软件 Minion 进行指令的执行与策略的配置。通过 yum install 命令安装 Minion 客户端。

yum install -y salt-minion

安装完成后,输入 chkconfig salt-minion on,将 minion 服务加入到开机启动项,这样每次系统启动,都会自动加载 minion 服务。输入 service salt-minion start,启动 minion 服务。之后通过 netstat –antp 查询服务状态。

到目前为止,SaltStack 的安装工作已经完成,Master 和 Minion 主机服务都已经正确开启,端口服务正常。下一章将主要介绍如何配置 SaltStack,使其可以正常的提供各种功能。

SaltStack 的配置

SaltStack 的配置主要集中在 Master 主机端,客户端的配置较少,本章将通过以下两部分详细介绍。

Minion 端配置

SaltStack-Minion 是 SaltStack 安装在客户端的代理,负责接收服务器端发布的指令并执行,同时负责客户端的状态监控。客户端要想被 master 管理,需要修改其配置文件,将服务器指向到 Master 的地址。其配置文件位于/etc/salt/目录下,名为 minion,通过 vi 工具修改,如图所示。

配置完成后,保存并通过 service salt-minon restart 命令重启 minion 服务。本次测试案例,并不需要其它高级功能的演示,所以客户端到此配置结束,更多功能的配置,请参考SaltStack 官方手册

Master 端配置

SaltStack-Master 是 SaltStack 组件的核心服务,负责发布指令及配置文件的分发与管理,及客户端的管理功能。Master 要想正常提供服务,需要接受客户端的证书认证请求。我们之前已经介绍过,SaltStack 是通过 SSL 证书认证的方式进行通信的。如图 10 所示操作,输入 salt-key -L 来查询客户端证书状态,并如图所示操作,输入 salt-key -A 接受客户端认证。

SaltStack 接受证书

至此我们已经完成 SaltStack 的全部配置.

salt-key 密钥管理,通常在master端执行

salt-key [options]
salt-key -L ##查看所有minion-key
salt-key -a <key-name> ##接受某个minion-key
salt-key -d <key-name> ##删除某个minion-key
salt-key -A ##接受所有的minion-key
salt-key -D ##删除所有的minion-key

SaltStack 测试

通过本章节中的两个测试案例,可以验证 SaltStack 是否运行正常,是否可以完成预定的功能。我们可以通过 salt '*' test.ping 来测试客户端是否在线,并被 master 管理,如图所示,如果返回 True,则说明客户端已经被 master 管理,并处于在线状态。

批量执行命令

在日常运维中,同时对多台服务器进行操作,是一个很平常的需求。比如批量执行 ping 操作,验证服务器是否在线,批量执行查询命令,看服务器的负载及利用率。如图所示的指令为批量查询服务器操作系统的版本

*代表对所有的被管理客户端进行操作,cmd.run 是命令调用模块,ifconfig 是具体的执行命令

如上图所示,lrzsz 软件被顺利的安装到了客户端服务器。 通过以上两个测试,可以验证 SaltStack 可以正常的为云平台提供集中化的管理与配置功能。

结束语

通过在 CentOS 7.4 上实现自动化运维工具 SaltStack 的部署及功能演示,可以满足管理员对云计算平台中服务器及配置的集中化管理,提高了运维团队的运维效率和准确性,降低了管理成本。

自动化运维工具 SaltStack 搭建的更多相关文章

  1. 自动化运维工具SaltStack详细部署【转】

    ==========================================================================================一.基础介绍==== ...

  2. 自动化运维工具SaltStack详细部署

    ==========================================================================================一.基础介绍==== ...

  3. 自动化运维工具SaltStack安装配置

    SaltStack是一种全新的基础设置管理方式,部署轻松,在几分钟内可运作起来,扩展性好,很容易管理上万台服务器,速度够快,服务器之间秒级通讯.通过部署SaltStack环境,我们可以在成千上万台服务 ...

  4. 自动化运维工具SaltStack - 多环境(使用记录【state.sls 与 state.highstate】)

    转自:https://segmentfault.com/a/1190000000513137 今天在进行 saltstack 多环境的时候,遇到一个问题,最终得到解决,好记性不如烂笔头,记录. 首先, ...

  5. 自动化运维工具 SaltStack 在云计算环境中的实践

    http://www.talkwithtrend.com/Article/218473

  6. 自动化运维工具Ansible详细部署 (转载)

    自动化运维工具Ansible详细部署 标签:ansible 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://sofar.blog. ...

  7. 自动化运维工具Ansible的部署步骤详解

    本文来源于http://sofar.blog.51cto.com/353572/1579894,主要是看到这样一篇好文章,想留下来供各位同僚一起分享. 一.基础介绍 ================= ...

  8. 自动化运维与Saltstack

    一.自动化运维介绍 1.自动化运维产生背景   传统的IT运维是将数据中心中的网络设备.服务器.数据库.中间件.存储.虚拟化.硬件等资源进行统一监控,当资源出现告警时,运维人员通过工具或者基于经验进行 ...

  9. 企业级自动化运维工具应用实战-ansible

    背景 公司计划在年底做一次大型市场促销活动,全面冲刺下交易额,为明年的上市做准备.公司要求各业务组对年底大促做准备,运维部要求所有业务容量进行三倍的扩容,并搭建出多套环境可以共开发和测试人员做测试,运 ...

随机推荐

  1. Matplotlib中文乱码问题

    一.找到并修改matplotlibrc文件 进入Python安装目录下的Lib\site-packages\matplotlib\mpl-data目录,用记事本打开matplotlibrc文件:找到f ...

  2. Linux命令:chmod

    https://baijiahao.baidu.com/s?id=1616750933810368135&wfr=spider&for=pc

  3. ServiceWorker和WebWorker

    在google打上关键字 service worker 空格进行搜索 参考地址 (Web_worker)[https://en.wikipedia.org/wiki/Web_worker] (serv ...

  4. WEB前端问题——img标签的onclick事件无法响应问题【转载】

    一个纠结了一下午的问题,img标签里面的onclick事件无法响应.最终找到了错误原因,是因为img标签的id与onclick事件的方法名相同. 于是接着又测试了一下,发现name名和方法名相同也会导 ...

  5. SQLServer 的数据分页:

    假设现在有这样的一张表:CREATE TABLE test( id int primary key not null identity, names varchar(20))然后向里面插入大约1000 ...

  6. 第五次Scrum冲刺

    第五次Scrum冲刺 1.成员今日完成情况 队员 今日完成任务 刘佳 前端初步构建 李佳 后端设计初级阶段 周世元 数据设计 杨小妮 博客编写 许燕婷 管理团队当日及次日任务 陈水莲 测试矩阵用例设计 ...

  7. 吴裕雄 python深度学习与实践(5)

    import numpy as np data = np.mat([[1,200,105,3,False], [2,165,80,2,False], [3,184.5,120,2,False], [4 ...

  8. 吴裕雄 28-MySQL 序列使用

    MySQL序列是一组整数:1, 2, 3, ...,由于一张数据表只能有一个字段自增主键, 如果你想实现其他字段也实现自动增加,就可以使用MySQL序列来实现 使用AUTO_INCREMENTMySQ ...

  9. 五, Authentication和Permissions

    概述 在介绍Django REST Framework(二):Request和Response 时提到,DRF提供了对身份验证和权限的处理机制,特点如下: 1.对API的不同部分使用不同的认证策略: ...

  10. trie数的实现

    Trie树又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它的优点是:利用字符串 ...