原文地址: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. [福大2018高级软工教学]团队Beta阶段成绩汇总

    一.作业地址: https://edu.cnblogs.com/campus/fzu/AdvancedSoftwareEngineerning2018/homework/2465 二.Beta阶段作业 ...

  2. js版MD5 (Message-Digest Algorithm)加密算法

    /**** MD5 (Message-Digest Algorithm)* http://www.webtoolkit.info/***/ var MD5 = function (string) { ...

  3. Structs复习 字符编码问题

    <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" ...

  4. 生成一个文件夹中的所有文件的txt列表

    1.windows操作系统中 1.用管理员运行打开dos界面: 2.用cd转到相应的文件夹中: 3.用dir /b /on >list.txt来生成文件列表的txt. 2.Mac系统中 1.打开 ...

  5. SSM商城项目(三)

    1. 学习计划 1.商品类目选择 2.图片上传 a) 图片服务器FastDFS b) 图片上传功能实现 3.富文本编辑器的使用KindEditor 2. 商品类目选择 2.1. 原型 2.2. 功能分 ...

  6. myEclips 中的项目复制重命名

    现在有个项目Pj ,要复制一个Pu 一,退出 myEclips. 二,找到Pj备份一份到其他目录. 三,进入myEclips,F2修改项目名Pj至Pu. 四,将备份拷贝回原目录. 五,将Pj重新引进m ...

  7. windows的cmd下面格式化某个盘符

    1.crl+R 输入cmd回车. 2.如果要格式化的是E盘,哪直接输入 在DOS窗口中输入“format  f: “ ,其中:format 为格式化命令,f: 为需要格式化的分区

  8. ArrayList集合类

    ⦁ 集合概述A:我们学习的是面向对象编程语言,而面向对象编程语言对事物的描述都是通过对象来体现的. 为了方便对多个对象进行操作,我们就必须对这多个对象进行存储,而要想对多个对象进行存储, 就不能是一个 ...

  9. StringBuild类

    每次拼接都会产生新的字符串对象,从而产生很多废弃的垃圾,拼的越多,垃圾越多,而利用StringBuilder来拼接字符串自始至终用的都是同一个StringBuilder容器 StringBuilder ...

  10. Jmeter学习(三十二)调试工具Debug Sampler(转载)

    转载自 http://www.cnblogs.com/yangxia-test 一.Debug Sampler介绍: 使用Jmeter开发脚本时,难免需要调试,这时可以使用Jmeter的Debug S ...