财经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
简单写了下脚本,方便安装
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/
安装好后执行检查:
修改配置文件
启动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端的配置文件:
启动minion:
service salt-minion start
Windows salt minion的安装:
版本下载:https://repo.saltstack.com/windows/
修改C:\salt\conf\minion文件,找到master那一行,将注释去掉,然后把master的IP或者hostname写在冒号后面。然后找到id,同样去掉注释,将此机器的ip或者hostname写上去,最后启动服务即可。
4、SaltStack证书查询
可以看到客户端被发现,但是处于未被接受状态,需要管理员指令,进行接受。
5、SaltStack接受证书
Master上执行salt-key –A 命令接受minion
测试master与minion的连接是否正常
至此我们已经完成SaltStack的全部配置。
四、Saltstack在运维变更平台的应用实现
1、每一个细分的功能抽象为一个功能原子
比如应用管理大类,细分了本地备份、获取TFS发布包、负载离线、DNS修改、服务停止等等的原子;每个原子支持我们现在的window和linux(.net 和java)平台,如果后续有其他新的平台类型,可以升级原子即可;原子在具体处理时会自适应os来进行处理。
我们只需将这些原子有序编排,加与判断循环执行等等的条件,就可以轻松实现某类需求功能,在设计该原子时,要考虑通用性,原子特点在于:
1) 灵活扩展,编排满足不同功能需求。
2) 可复用,原子根据不同需求可重复利用。
3) 易排查问题,每个细分原子就是一个小功能,更方便排查问题。
2、应用发布功能实现
这里主要分享一下全量灰度应用发布的功能实现,灰度分成了两个step,每个原子按约定最多传递6个参数。处理会按id顺序执行,并且判断循环条件来循环处理,参数根据配置值的不同会必要的选择处理。下面是编排的模板
主要涉及的原子有:
本地备份:实现既可以在发布时的备份,也可以是普通的本地备份,而且支持剔除白名单,模糊匹配某类文件,多个目录的备份。
用salt的cmd.run命令远程操作备份,比如
获取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 在云平台中实现各主机统一配置管理