财经IT自动变更运维平台之SALTSTACK应用

Posted 全栈人生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了财经IT自动变更运维平台之SALTSTACK应用相关的知识,希望对你有一定的参考价值。

一、前言

随着业务的持续增长,系统和服务器越来越多,运维管理也随之越来越复杂,现有平台逐步不能很好的满足自身需要,因此重新设计自建了自动运维变更平台,平台的建设与思考可见上一篇推送文章:

 


业界对于自动运维管理的工具也比较多,比如Puppet、Chef、Ansible和Saltstack,四款工具各有优劣,结合自身环境选择最优工具,Puppet、Chef要求对ruby语言比较熟悉,ansible不能很好的支持windows,而saltstack基于python语言开发,saltstack特点在于

◾简单:Salt是非常简单配置和维护,不管项目的大小。Salt可以胜任管理任意的数量的服务器,不管是本地网络,还是跨数据中心。架构采用C/S模式,在一个后台程序中集成必要功能。默认不需要复杂的配置就可以工作,同时可以定制用于特殊的需求。

◾并行执行:通过并行方式让远端节点执行命令,采用安全的加密/解析协议,最小化使用网络和负载。

◾快速,灵活,可扩展:Salt速度很快,配置简单,同时拥有高扩展性,提供了一个远程执行架构,可以管理多样化需求的任何数量的服务器。整合了世界上最好的远程执行方法,增强处理能力,扩展使用范围,使得可以适用任何多样化复杂的网络。

◾构建在成熟技术之上:网络层采用优秀的ZeroMQ库,所以守护进程里面包含AMQ代理。Salt采用公钥和主控通讯,同时使用更快的AES加密通信,验证和加密都已经集成在Salt里面。Salt使用msgpack通讯,所以更快速和更轻量网络交换。

◾能够很好的支持windows系统。

 

本文主要分享一下自动运维变更平台的saltstack的实现过程。


二、平台架构设计

平台部署架构图

说明:

  • SALT有很多可执行模块(cmd、cp等模块),把这些可执行模块封装成执行原子,原子是具体的某一细分功能,比如服务启动,停止等,管理员可通过这些原子远程执行或程序接口调用发送让 Minion 执行。

  • SaltStack的 Master 与 Minion 之间通过ZeroMq进行消息传递,使用了ZeroMq的发布订阅模式,连接方式包括 TCP 和 IPC

  • SaltStack的所有被管理客户端节点(salt minion),都是通过密钥进行加密通信,使用端口默认为 4506。客户端与服务器端的内容传输,是通过消息队列完成,使用端口默认为4505

  • Minion 从消息总线上接收到要处理的命令,交给 minion._handle_aes处理,发起一个本地线程调用相应模块执行命令。线程执行完后,调用 Minion._return_pub方法,将执行结果通过消息总线返回给 master

  • saltstack通过web管理配置模块,原子功能的流程编排,从而实现需求功能。

 

三、SaltStack的安装与配置


由于本地服务器不能上网,不能用yum安装,只能通过下载软件包手动安装的方式。


1、依赖组件的安装

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

Salt对Python版本有要求,大于2.6或版本小于3.0

财经IT自动变更运维平台之SALTSTACK应用(二)

简单写了下脚本,方便安装

log=/root/install.txt

cd /root/saltsoft/Python-2.7.8

./configure --prefix=/usr/local >>$log

make --jobs=`grep processor /proc/cpuinfo | wc -l`>>$log  &&  make install  >>$log

cd /usr/local/include/python2.7 &&cp -a ./* /usr/local/include/

rm -rf /usr/bin/python

ln -s /usr/local/bin/python /usr/bin/python

sed -i 's/python/python2/' /usr/bin/yum

sed -i 's/python/python2/' /usr/libexec/urlgrabber-ext-down

 cd /root/saltsoft/setuptools-27.2.0 && python setup.py  install  >>$log

cd /root/saltsoft/requests-2.5.0 && python setup.py install >>$log

cd /root/saltsoft/MarkupSafe-0.23 && python setup.py  install  >>$log

cd /root/saltsoft/Jinja2-2.8  && python setup.py  install  >>$log

cd /root/saltsoft/PyYAML-3.11 && python setup.py  install  >>$log

cd /root/saltsoft/yaml-0.1.5 && ./configure --prefix=/usr/local >>$log

make --jobs=`grep processor /proc/cpuinfo | wc -l` >>$log && make install  >>$log

cd /root/saltsoft/msgpack-python-0.4.8 && python setup.py  install  >>$log

cd /root/saltsoft/typing-3.5.2.2 && python setup.py  install  >>$log

cd /root/saltsoft/M2Crypto-0.25.1 && python setup.py  install  >>$log

cd /root/saltsoft/msgpack-pure-0.1.3 && python setup.py  install  >>$log

cd /root/saltsoft/pycrypto-2.6.1 && python setup.py  install  >>$log

cd /root/saltsoft/pycparser-2.14 && python setup.py  install  >>$log

cd /root/saltsoft/backports.ssl_match_hostname-3.5.0.1 && python setup.py  install  >>$log

cd /root/saltsoft/backports_abc-0.4 && python setup.py  install  >>$log

cd /root/saltsoft/certifi-2016.8.31 && python setup.py  install  >>$log

cd /root/saltsoft/six-1.10.0 && python setup.py  install  >>$log

cd /root/saltsoft/singledispatch-3.4.0.3 && python setup.py  install  >>$log

cd /root/saltsoft/tornado-4.4.1 && python setup.py  install  >>$log

#install pyzmq

cd /root/saltsoft/pkg-config-0.29.1

./configure --with-internal-glib >>$log && make install  >>$log

cd /root/saltsoft/autoconf-2.69

./configure --prefix=/usr>>$log && make   >>$log

make install >>$log

cd /root/saltsoft/zeromq4-1-4.1.5

./autogen.sh >>$log

./configure --prefix=/usr/local >>$log

make --jobs=`grep processor /proc/cpuinfo | wc -l` >>$log && make install >>$log

cd /root/saltsoft/pyzmq-16.0.0  && python setup.py configure --zmq=/usr/local >>$log && python setup.py  install  >>$log

 

 

2、Salt Master安装

Salt版本的下载https://github.com/saltstack/salt/releases

 

安装命令如下:

mkdir /etc/salt

cd /root/saltsoft/salt-2017.7.2 && python setup.py install

cp -a /root/saltsoft/salt-2017.7.2/pkg/suse/salt-master /etc/init.d/

chmod +x /etc/init.d/salt-master

chkconfig --level 235 salt-master on

mkdir -p /var/log/salt

ln -s /usr/local/bin/salt-master /usr/bin/

 

安装好后执行检查:

财经IT自动变更运维平台之SALTSTACK应用(二)

修改配置文件

财经IT自动变更运维平台之SALTSTACK应用(二)

启动master:

service salt-master start

 

防火墙设置:

-A INPUT -i eth1 -p tcp -m multiport --dports4505,4506 -j ACCEPT

4505(publish_port):salt 的消息发布系统

4506(ret_port):salt 客户端与服务端通信的端口

3、salt minion安装

linux的salt minion安装跟salt master类似。

Minion端的配置文件:

财经IT自动变更运维平台之SALTSTACK应用(二)

启动minion:

service salt-minion start

 

Windows salt minion的安装:

版本下载:https://repo.saltstack.com/windows/

财经IT自动变更运维平台之SALTSTACK应用(二)

修改C:\salt\conf\minion文件,找到master那一行,将注释去掉,然后把master的IP或者hostname写在冒号后面。然后找到id,同样去掉注释,将此机器的ip或者hostname写上去,最后启动服务即可。

4、SaltStack证书查询

财经IT自动变更运维平台之SALTSTACK应用(二)

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

5、SaltStack接受证书

Master上执行salt-key –A 命令接受minion

财经IT自动变更运维平台之SALTSTACK应用(二)

测试master与minion的连接是否正

财经IT自动变更运维平台之SALTSTACK应用(二)

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


四、Saltstack在运维变更平台的应用实现


1、每一个细分的功能抽象为一个功能原子

比如应用管理大类,细分了本地备份、获取TFS发布包、负载离线、DNS修改、服务停止等等的原子;每个原子支持我们现在的window和linux(.net 和java)平台,如果后续有其他新的平台类型,可以升级原子即可;原子在具体处理时会自适应os来进行处理。

 

我们只需将这些原子有序编排,加与判断循环执行等等的条件,就可以轻松实现某类需求功能,在设计该原子时,要考虑通用性,原子特点在于:

     1)  灵活扩展,编排满足不同功能需求。

     2)  可复用,原子根据不同需求可重复利用。

     3)  易排查问题,每个细分原子就是一个小功能,更方便排查问题。


2、应用发布功能实现

这里主要分享一下全量灰度应用发布的功能实现,灰度分成了两个step,每个原子按约定最多传递6个参数。处理会按id顺序执行,并且判断循环条件来循环处理,参数根据配置值的不同会必要的选择处理。下面是编排的模板

财经IT自动变更运维平台之SALTSTACK应用(二)

主要涉及的原子有:

  • 本地备份:实现既可以在发布时的备份,也可以是普通的本地备份,而且支持剔除白名单,模糊匹配某类文件,多个目录的备份。

用salt的cmd.run命令远程操作备份,比如

财经IT自动变更运维平台之SALTSTACK应用(二)
  • 获取TFS发布包:这里因为发布包不能直接拷贝到应用服务器,我们先拷贝到中转服务器,再从中转服务器下发到应用服务器。

通过salt的cmd.run调用带参数的bat脚本

  • 负载上线、离线:又分为LVS和webfarm的上线离线原子,webfarm通过salt调用appcmd.exe命令实现上线离线,lvs通过接口shell调用,接口传递参数实现

  • DNS修改:包括增加、删除操作,进行灰度验证


  • 服务启动、停止:分为WEB IIS启动、停止,资源池回收;HOST的服务启动、停止。实现对多台应用服务器的所有服务操作和发布时的单个服务操作

 

  • 合并发布包:合并的时候数据目录和配置文件是不能覆盖的,所以都要加到白名单里,为了方便管理,白名单分为数据的白名单和配置的白名单,通过rsync从中转服务器拷贝发布包到windows,linux应用服务器。

 

  • 上传配置文件:如有修改配置文件的发布,则在web界面上传修改好的按规则命名的配置文件到salt master上,再通过salt 的cp.get_file进行下发到应用服务器


五、结语

SaltStack有非常丰富的远程执行模块,并提供程序接口,我们对其进行模块原子化实现某一细分功能,再进行有序编排实现需求服务。根据不同业务特性进行配置集中化管理、分发文件、采集服务器数据、操作系统基础及软件包管理等,提高工作效率、规范业务配置与操作。

接下来可以实现Saltstack的其他应用场景,比如:

以上是关于财经IT自动变更运维平台之SALTSTACK应用的主要内容,如果未能解决你的问题,请参考以下文章

金融行业云平台架构总览及自动化运维平台(saltstack)演进规划

用开源自动化运维工具 SaltStack 在云平台中实现各主机统一配置管理

如何用开源自动化运维工具 SaltStack 在云平台中实现各主机统一配置管理

自动化运维工具之Saltstack

技术沙龙腾讯蓝鲸&中国SaltStack用户组

自动化运维工具之SaltStack-1SaltStack介绍及安装