自动化运维利器 SaltStack 工作原理及安装配置实例详解

twt社区
基于云计算的发展,大数据、认知技术及容器技术也在企业中得到了越来越多的应用,大量的服务器管理操作、配置变更被频繁的执行与部署,以应对多变的业务需求。按照常规的方式,运维人员需逐个服务器进行配置调整,手动管理大量的系统信息,难免有各种各样的问题及事故发生。

概述

随着云计算技术的快速普及与发展,越来越多的企业开始学习和搭建自己的云平台代替传统的IT交付模式,企业的IT环境也随之越来越复杂,常规的运维方法与技术已经无法满足现在云环境中系统的配置与变更。

基于云计算的发展,大数据、认知技术及容器技术也在企业中得到了越来越多的应用,大量的服务器管理操作、配置变更被频繁的执行与部署,以应对多变的业务需求。按照常规的方式,运维人员需逐个服务器进行配置调整,手动管理大量的系统信息,难免有各种各样的问题及事故发生。

为了避免这样的风险,本文的示例中,将详细介绍如何使用开源软件SaltStack自动化运维工具对云环境中的服务器进行命令的远程执行及配置管理,确保操作的安全性及高效性,降低管理员的操作风险。

什么是自动化运维?

其实自动化运维就是将复杂的事情简单化、标准化、流程化,通过工具重复性、周期性的实现。例如应用系统维护自动化,巡检自动化和故障处理自动化等。能够自动解决用户在IT管理中的日常运维问题,最终实现提升运维效率的目的。

市场上的自动化运维平台很多,功能丰富。通过自动化的运维可以有效的发现、解决运维中的事件和问题。

自动化运维的好处

自动化运维平台作为当下最流行的热词之一,得到了越来越多企业的关注和实践。部分功能或者全部功能被管理员所接受。主要是因为自动化运维具备以下几点优势:

方便管理:自动化运维就是将复杂的事情简单化、标准化、流程化。通过一个平台,一个入口进行问题发现和解决。同时便于多人同时对不同的系统进行按需管理,无需牢记各种复杂指令,而是通过优化的集合进行逻辑组合实现相关的功能;

批量执行任务:自动化都会涉及到批量执行,市场上比较成熟的产品如Ansible,SaltStack等。两种产品均为python开发,有利于运维管理员定制需求,满足更多自动化运维场景的需要;

资产收集:资产管理是运维工作重要的一部分,清楚自己运维的资产,了解资产属性,是做好运维的基础。通过自动化运维平台可以将资产集中管理、获取系统信息、下发策略,可以让我们很容易就获取到系统信息,通过自动化的手段对资产进行操作;

降低运营成本:类似某传奇互联网公司,一个工程师可以运维整个数据中心的X86服务器(估计这个工程师不是泛泛之辈,至少是个高级SRE)。运维团队除了要保证系统的正常运行,还要确保不增加运营成本。这就需要自动化的手段来将日常琐碎的事情标准化、流程化、自动化。从而降低人工参与度(成本),减少错误发生率;

系统健康监控:运维监控系统是自动化运维的眼睛,是不可或缺的一个功能,开源产品如open-falcon、Zabbix、Nagios等等。结合资产管理模块,对系统健康状况进行持续监控。通过自动化运维平台既定功能或者定制脚本,进行自动化的故障消除,重大故障进行告警等。

SaltStack基本概念及工作原理

SaltStack本身是一种开源的基础架构集中化管理平台,相比其它商业产品,其部署及配置稍显杂。为了更好的部署和配置SaltStak,本章节将着重介绍它的基本概念、特性与工作原理。

SaltStack简介与特性

SaltStack是一种基于C/S架构的服务器基础架构集中化管理平台,管理端称为Master,客户端称为Minion。SaltStack具备配置管理、远程执行、监控等功能,一般可以理解为是简化版的Puppet和加强版的Func。

SaltStack本身是基于Python语言开发实现,结合了轻量级的消息队列软件ZeroMQ与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。

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

SaltStack具有以下特性,帮助企业IT更好的实现系统批量管理:

1.部署简单、管理方便;

2.支持大部分的操作系统,如Unix/Linux/Windows环境;

3.架构上使用C/S管理模式,易于扩展;

4.配置简单、功能覆盖广;

5.主控端(Master)与被控端(Minion)基于证书认证,确保安全可靠的通信;

6.支持API及自定义Python模块,轻松实现功能扩展;

SaltStack的工作原理

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

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

图1.SaltStack通信原理图

专业术语说明:

Minion是SaltStack需要管理的客户端安装组件,会主动去连接Master端,并从Master端得到资源状态信息,同步资源管理信息。

Master作为控制中心运行在主机服务器上,负责Salt命令运行和资源状态的管理。

ZeroMQ是一款开源的消息队列软件,用于在Minion端与Master端建立系统通信桥梁。

Daemon是运行于每一个成员内的守护进程,承担着发布消息及通信端口监听的功能。

图2.SaltStack操作执行原理图

原理图说明:

Minion是SaltStack需要管理的客户端安装组件,会主动去连接Master端,并从Master端得到资源状态信息,同步资源管理信息。

Master作为控制中心运行在主机服务器上,负责Salt命令运行和资源状态的管理。

Master上执行某条指令通过队列下发到各个Minions去执行,并返回结果。

本章使大家了解了什么是SaltStack以及它的通信及执行原理,下一章节将主要介绍本次实例部署的架构设计。

SaltStack的架构

随着为了让大家更好的理解SaltStack在云平台集中化管理方面的优势,因此,根据项目的实际情况绘制了部署架构图,并在文中对架构图进行了详细说明。如图3所示:

图3.SaltStack部署架构图

说明:

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安装与配置

通对SaltStack有了一个初步的了解之后,您将在本章通过实际案例操作进一步了解SaltStack。本章节一共分为三个部分,分别介绍安装环境的说明,具体安装及安装后的SaltStack配置。

SaltStack的环境说明

由于受到硬件资源限制,测试环境将采用三台服务器进行部署,分别扮演不同的角色,详细信息如表1所示。

表1.SaltStack环境说明

SaltStack的安装

目前SaltStack支持很多平台的部署,具体到每个平台的安装部署,可以参考官方文件。本实例中将主要介绍基于CentOS平台的安装部署。

依赖组件的安装

由于SaltStack是开源软件,其很多功能是依赖其它的软件包来完成。所以我们在安装SaltStack之前需要先将以下表2中的依赖软件包安装到主机上,避免因为缺少依赖关系而产生错误。

表2.依赖软件包

为了方便依赖包的安装,本章将采用YUM的方式进行安装。

首先下载并安装epel源,执行以下指令,将epel.repo存储到/etc/yum.repos.d目录下。wget–o/etc/yum.repos.d/epel.repohttp://mirrors.aliyun.com/repo/epel-6.repo,并通过Yum list命令来校验安装源是否生效,如出现图4所示,则表明Yum源已经生效。

图4.SaltStack安装源

建立好安装源及解决了软件包依赖关系之后,下一步将介绍如何安装Saltstack master主机。

Master角色的安装

如上表2,已经清晰的列出需要依赖哪些安装包确保master的成功安装。配置好yum源之后,只需要输入以下命令(如图5所示),就可以在自动安装SaltStack的同时,将依赖包安装好。

图5.SaltStack master主机安装

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

图6.SaltStack master服务查询

依照本章介绍来看,master服务已经被正确安装并启动,下一章将介绍如何安装SaltStack-Minion到客户端服务器。

Minion角色的安装

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

图7.SaltStack Minion主机安装

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

图8.SaltStack Minion服务查询

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

SaltStack的配置

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

Minion端配置

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

图9.SaltStack Minion配置

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

Master端配置

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

图10.SaltStack证书查询

从图中可以看到客户端被发现,但是处于未被接受状态,需要管理员执行图11所示指令,进行接受。

图11.SaltStack接受证书

至此我们已经完成SaltStack的全部配置,在下一章中,将通过几个测试场景来说明SaltStack在云管理平台的重要功能

SaltStack测试

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

图12.SaltStack接受证书

接下来,我们将通过批量执行命令和批量安装软件,来测试SaltStack的部分功能。

批量执行命令

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

图13.SaltStack查询服务器的IP信息

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

批量安装软件

批量安装软件也是日常运维中的家常便饭,我们可以通过SaltStack的软件推送功能,对所管理的服务器进行进行相关软件的批量安装。如图14所示的指令为批量安装软件lrzsz在客户端服务器中。

图14.SaltStack安装lrzsz

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

结束语

通过在CentOS 7.1上实现自动化运维工具SaltStack的部署及功能演示,可以满足管理员对云计算平台中服务器及配置的集中化管理,提高了运维团队的运维效率和准确性,降低了管理成本。同时通过本文,我们也对开源工具有了更多的了解和学习。为今后应用更多的开源工具管理云平台提供了夯实的技术基础。

THEEND

最新评论(评论仅代表用户观点)

更多
暂无评论