企业自动化运维管理系统的设计与实现
2020-09-27赵彪张美娜刘天奇王楠
赵彪 张美娜 刘天奇 王楠
摘要:国内经济飞速发展,IT企业类型复杂数量庞大,在企业的运维环节当中,传统的运维管理模式难以满足企业高效率的发展,因此提出了一种运维管理系统的设计与实现方案,并以此提高企业运维管理的安全性和效率,大幅度减少了当前运维管理过程中配置管理任务人工耗时长、配置成本高、相对于机器出差错可能性大、安全性差等缺点。
关键词:运维平台;管理系统;分布式
中图分类号:TP311 文獻标识码:A
文章编号:1009-3044(2020)23-0087-03
1 背景
目前互联网技术飞速发展,国内各种类型的企业数量庞大,运维管理部门的工作量随之增加,企业内部的IT环境也越来越复杂,依靠传统的运维管理模式将无法满足企业的要求。大数据、云计算等技术在企业内得到了更多的应用,管理服务器消耗了大量的人力物力,为了应对高速多变的业务需求,服务器配置被频繁更新。按照传统的运维管理模式,运维管理人员需要手动配置管理系统信息,难免出现差错,为了避免这种情况出现,企业运维管理部门需要一个新型的运维管理工具,来实现企业能够实现对各个服务器的自动化的运维管理,以此提高公司的效率和水平。
2 系统需求分析
随着目前信息化的不断发展,国内各中小型企业的线上业务不断增加,随之而来的是运维和管理的工作量和配置时间直线上升。按照目前传统的运维管理模式,需要公司的运维人员依靠手工配置服务器进行管理,配置管理任务耗时长、配置成本高、过程烦琐、安全性差等缺点在运维管理过程中逐渐凸显出来,依靠传统的运维管理模式将无法满足企业的要求。因此各企业运维管理部门需要一种新型高效、安全且轻便的运维管理系统,以此来满足企业对各个服务器的自动化的运维管理,提高企业运维管理部门的效率和水平。
3 系统概述以及特点
3.1 系统概述
本系统是基于Python的自动化运维管理系统,本系统采用salt-stack作为自动化运维工具,采用Django作前端界面,Zero MQ消息中间件负责主机端与客户端之间的消息传输,三者结合形成一个完整的自动化运维管理系统。客户登录采用:传统密码+谷歌身份验证器二次验证。本系统主要功能包括:主机管理、主机分组管理、远程命令、用户管理、模块部署、文件管理、资产管理、日志审计等。采用ECharts绘图更加直观展示主机信息,采用最新Python3与Django2。前台采用GitHub开源Bootstrap 3 Admin模板,页面更加美观、提高跨平台兼容性。登录验证方式采用传统密码+谷歌身份验证器获取动态密码登录的方式,只需在手机中下载好谷歌身份验证器,扫码后无须联网即可30秒刷新验证码一次。
3.2 系统特点
目前市面上可以作为主流的开源自动化的运维工具主要有ansible、salt-stack、puppet。其中由ruby进行开发的运维工具puppet由于配置的脚本复杂,可移植性差,难以很好地应对企业运维和管理部门的快速系统部署和二次开发等的需求。ansible和salt-stack都由Python进行开发,相对于传统的puppet,二者调用API接口的性能和适应性、易安装性、共存性、易替换性和依从性更强,并且都支持将运维命令写成yaml格式文件进行批量配置管理。但是salt-stack比Ansible服务器响应速度更快。并且salt-stack可以在配置管理、执行远程命令时提供高速通信的功能,在不受限于服务器性能以及网络环境的情况下,salt-stack 可以高效地管理上万台主机。其中的配置管理功能可以实现发布文件功能、软件版本更新功能、设置主机端与客户端的关系功能以及管理软件包功能。配置管理信息的文件类型是state,这种文件类型的主体是 YAML 描述,这种描述的可读性高,是一种常被用来表达数据序列化的格式,这个描述还包含一个名为jinja的模板,这个模板不仅可以自定义变量,还拥有一个静态变量系统和一个动态的变量系统,这两种变量系统可以编写配置文件,jinja 模板与两种变量系统相结合使配置文件拥有精准高效的表述能力。这样只需要将编写好的配置文件发送到受管理和反馈节点就可以对指定的主机进行管理。远程命令执行功能是从主节点批量下发命令到受管理和反馈节点的机器执行,salt-stack包含命令模块、进程管理模块、系统包管理模块等大量的不同种类的模块。远程命令由主节点发出,通过 Zero MQ消息中间件将命令内容并行发送到受管理和反馈节点,由各个受管理和反馈节点在本节点执行。
4 系统设计
4.1 结构设计
本系统主要面向中小型企业的运维管理,本系统主要功能包括:主机管理、主机分组管理、远程命令、用户管理、模块部署、文件管理、资产管理、日志审计等。开源的运维工具salt-stack可以作为自动化运维管理工具。
采用开源工具salt-stack与Django前端结构以及Zero MQ消息中间件构成企业自动化运维管理系统。此工具提供服务器操作和维护功能,由主节点(Master)、代理节点(Syndic)、受管理和反馈节点(Minion)三个节点组成。主节点执行处理三个事件,作为控制中心、执行远程命令、存储设备执行处理的信息。主节点上一个名为salt-master的守护进程负责提供向受管理和反馈节点发送信息和命令、从受管理和反馈节点接收反馈的信息的功能。代理节点被用来充当受管理和反馈节点和主节点之间的代理角色,代理节点接收上层主节点的远程指令以及信息,然后将这些信息和命令发送给基层的受管理和反馈节点,同时并接收来自基层的受管理和反馈节点响应结果。受管理和反馈节点接受主节点发送的设备执行处理的信息和执行远程命令并执行,并向主节点反馈命令执行的结果和信息。使用Zero MQ消息中间件在主节点、代理节点、受管理和反馈的节点之间可以进行公钥通信。三个节点间需要高速传输信息安全性都依赖于密钥。salt-stack的公钥系统内置数据库系统中的一个Zero MQ消息中间件,此外,Zero MQ消息中间件的公钥通信系统可以保证各个受管理节点之间的公钥通信的绝对安全性,当任何一个受管理和反馈节点的用户需要与自己的主节点进行通信时,受管理和反馈节点会自动生成一对密钥。公钥用于加密发送的信息,私钥负责解密,主节点就会安全的获得受管理和反馈的节点信息。
由Python语言制作的Django框架给运维管理人员提供了前端接口,并使用Python开发了前端网站的运维管理界面。前端与后端之间的连接依靠salt-stack自带的rest接口,其中作为后端的salt-stack的运维管理部分提供的主节点聚类的方法,保证整个信道的服务效率和服务可用性,同时改善了同类其他平台存在的主节点的并发能力弱、可靠性差等问题。受管理和反馈节点安装salt-stack的代理端来完成服务器的配置和管理。所有指令和操作处理后的结果都将被收集并存储以供日后检查。平台将各受管理和反馈节点返回的结果分散处理方式改为主节点通过递归器收集返回实现结果的方式,并通过日志方式将处理运行的结果存储在数据库中。通过该平台,运维人员可以轻松完成批量布局、批量维护、远程指令执行等功能。
4.2 管理员功能
1)控制面板:查看客户端总数、主机总数、平台数量、应用数量、客户端IP。
2)部署管理:添加主机或删除主机;对用户进行分组操作;对单客户或用户组进行远程命令管理;部署模块,包括删除和添加功能。
3)文件管理:分为文件的上传和下载两部分,可以分别对主机和主机组进行操作。
4)资产管理:分为服务器资产和数据中心两部分,服务器资产显示每台主机的具体软硬件信息,且支持信息导出功能;显示数据中心的详细信息,并支持增加、删除、修改等操作。
5)任务管理:添加、修改、删除指令,控制主机以及主机组执行单个或批量指令。
6)用户管理:查看、修改、激活主机以及主机组的功能;控制主机以及主机组运行远程命令。
7)日志审计:可以查看并导出所有主机以及主机组的运行日志。
5 系统的安装、测试以及使用
5.1 系统的安装
由于salt-stack是开源且支持多平台安装的工具软件,所以想要顺利使用它需要安装一些额外的软件包。使用yum工具更加方便安装软件依赖包。需要使用PyYAML软件包为salt-stack配置解析定义句法,使用Msgack-python作为saltstack消息交换库,需要Jinjia2为salt-stack states配置模板,使用MarkupSafe作为python Unicode 转换库,需要使用Apache-libcloud作为salt-stack云架构编排库,使用Zero MQ作为salt-stack 消息系统,使用Pyzm作为ZeroMQ python库,使用PyCryto作为Python密碼库,使用M2Cryto作为Openssl Python包装库,使用Requests作为HTTP Python库。
5.1.1 配置服务器环境
yum -y install mariadb mariadb-devel mariadb-server wget epel-release python-devel gcc c++ make openssl openssl-devel passwd libffi libffi-devel pyOpenSSL git
yum -y install salt-master salt-minion salt-api nginx
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
5.1.2 配置salt-api
pip install pyOpenSSL==0.15.1 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
useradd -M -s /sbin/nologin saltapi && echo "password"|/usr/bin/passwd saltapi --stdin
salt-call --local tls.create_self_signed_cert
1)配置文件修改
cat > /etc/salt/master < interface: 0.0.0.0 external_auth: pam: saltapi: - .* - '@wheel' - '@runner' - '@jobs' rest_cherrypy: port: 8000 ssl_crt: /etc/pki/tls/certs/localhost.crt ssl_key: /etc/pki/tls/certs/localhost.key file_recv: True include: /data/www/SOMS/saltconfig/*.conf EOF 2)启动服务,测试salt-api systemctl start salt-master salt-api salt-minion curl -sSk https://localhost:8000/login -H 'Accept: application/x-yaml' -d username=saltapi -d password=password -d eauth=pam 3)部署项目 #安装依赖 pip install -r requirements.txt #同步数据库 python manage.py makemigrations python manage.py migrate #创建管理员 python manage.py createsuperuser #runserver运行检查是否正常 python manage.py runserver 0.0.0.0:8080 4)受管理和反馈端配置 #安装 yum -y install salt-minion #将master ip添加到hosts vim /etc/hosts 127.0.0.1 master sed -i 's/#master:.*/master: master/' /etc/salt/minion #设置minion标识,设置为ip地址 echo "local ip" > /etc/salt/minion_id #启动 systemctl restart salt-minion #master主机上执行认证 salt-key -L salt-key -A -y 检查master主机是否能正常在minion上执行命令 salt '*' test.ping 5.2 系统测试 1)salt-api安装测试。 2)主节点主机上执行认证测试。 3)测试主节点上的主机是否能正常在受管理和反馈节点上执行命令通过salt'*'test.ping来测试客户端是否在线,并被主节点上的主机管理,如果返回True,则说明客户端已经被主节点上的主机管理,并处于在线状态。 4)測试网址上与主机的通信。 5)验证远程命令。 5.3 系统使用 1)首先在手机端下载谷歌验证器扫描二维码来获取验证码。 2)访问服务器网址。 3)进行登录操作。 4)在web页面进行对服务器的管理。 6 未来应该加入的功能 一个优秀的运维管理系统应该具有良好的系统扩展性,以此来满足企业未来的需求。除了以上已经拥有的功能外,还应具有以下功能: 1)一个完整的监控体系,其中包括系统监控、api接口监控、链路监控、业务监控、日志监控等; 2)增加大文件传输功能,大文件传输采用BT传输; 3)简单错误自动处理功能,不应浪费人工处理磁盘告警、磁盘只读、基础性能阈值告警等基本问题; 4)更加丰富的预设脚本库,大幅度减少配置管理文件的时间; 5)增加故障报警功能,短信报警、微信报警; 6)增加运维管理平台大数据分析能力,将大数据分析系统应用到运维管理平台。大数据分析系统内部整合Hadoop、Spark、Kafka等多种大数据架构技术,提供多种类型数据接口,实现真正的多平台、多业务运维管理和数据分析与整合,提供第三方系统登录运维管理系统的功能。 7 结束语 目前互联网技术飞速发展,一个好的企业或组织不仅要拥有自己的核心技术,同时也应注重运维管理的投入和运营。一个优秀的运维管理部门应该保证企业资源的高可用性与稳定性,并通过技术手段不断优化系统架构提升企业内部运行效率。该系统采用了目前主流的运维管理技术,非常适合中小型组织或企业使用,可视化界面降低了操作难度,前端与后台的紧密结合保证了系统的高效率运行,同时传统密码+谷歌身份验证器的登录方式提升了系统的安全性。 参考文献: [1] 赵创业, 唐亮亮, 肖建毅. API融合AI技术下跨平台分布式自动化运维平台优化设计[J].自动化与仪器仪表, 2019(7): 113-115, 119. [2] 谢超群. 基于Saltstack高校自动化运维平台的应用研究[J]. 洛阳理工学院学报(自然科学版), 2018, 28(1): 51-53. [3] 彭红意. 万科物业的网络运维可视化设计与实现[D].北京:北京交通大学,2019. 【通联编辑:谢媛媛】