Ansible vs SaltStack 谁才是自动化运维好帮手?

豌豆贴心提醒,本文阅读时间5分钟

概述

互联网技术发展越来越快,机房服务器也越来越多,运维工作的重要性不断上升。在上升的背后,运维工作的层级、需要考虑的事物也在增多,人员成本与时间成本更是大量上升,催生了自动化运维的需求。

Ansible、SaltStack、Puppet都是目前使用比较多的自动化化运维工具,其中使用了python用语言的Ansible和SaltStack,可移植性要更加优于Puppet。由于使用的脚本语法相对繁杂,同时移植性又不如其他两个工具,因此占有的市场也越来越少。今天,我们将主要将Ansible、SaltStack进行比较,Puppet不会有过长的篇幅。

Ansible和SaltStack的比较和选型

Ansible和SaltStack是什么呢?目前使用人数最多的两个自动化运维工具,都能满足企业级IT系统的自动化运维需求,并且都使用了Python语言。Python语言是个重点,因为这带来了在差异化的系统环境中的部署能力以及进行二次开发的便利性。在命令执行方面同时支持AD-hoc操作模式和yaml格式文件的批量执行。这两个工具返回的执行结果都是JSON格式,相对方便分析并且简单容易理解。本文主要从响应速度、安全、自身运维、使用语法等方面对Ansible和SaltStack的不同点进行分析: 1.响应速度 SaltStack的master和minion主机是通过ZeroMQ传输数据,而Ansible是通过标准SSH进行数据传输,SaltStack的响应速度要比Ansible快很多。这不是Ansible的问题,而是标准SSH的链接是在太花时间,ZeroMQ传输速度又比较快,所以才造成了这样的差异。但是当从响应速度来看,Ansible无疑是落了下风。不过劣势也没那么大,一般的云微场景下足够了。

在表格1 Ansible和SaltStack性能测试中,测试了Ansible和SaltStack在执行命令、分发文件、读取文件和批量脚本执行等自动化运维场景下的性能,由耗时数据可以看出Ansible的响应速度比SaltStack要慢10倍左右。 2.安全 Ansible和SaltStack都需要和远程主机进行连接,它们的最大的安全问题就是MITM攻击,通过伪装成Master主机和远程主机进行通信,从而进行攻击。 SaltStack使用ZeroMQ进行数据传输,ZeroMQ本身数据传输不支持加密,SaltStack可以通过使用AES数据加密方法来对数据进行加密传输,但是SaltStack的minion主机以守护进程的方式运行在远端暴露了很多容易被攻击的点。 Ansible使用标准SSH连接传输数据,不需要在远程主机上启动守护进程,并且标准SSH数据传输本身就是加密传输,这样远程主机不容易被攻击。也不是说Ansible就可以完全避免被攻击,Ansible使用paramiko库进行SSH连接,paramiko是一个有很不错记录SSH连接的python库。Ansible可以通过配置StrictHostKeyChecking参数,使得远程主机上的keys和之前连接不一样的时候Ansible没有及时感知和提醒用户。但是Ansible可以通过修改配置文件和配置一个合适的known_hosts文件来解决这个问题,因此Ansible在安全方面还是比SaltStack做的好。 3.自身运维 SaltStack需要在Master和Minion主机启动守护进程,自身需要检测守护进程的运行状态,增加运维成本。Ansible和远端主机之间的通信是通过标准SSH进行,远程主机上只需要运行SSH进程就可以进行运维操作,SSH是机房主机中一般都安装和启动的进程,所以在Ansible进行运维的时候只需要关注Ansible主机的运行状态。Ansible对机房运维不会增加过多的运维成本。从工具本身的运维角度来说,Ansible要比SaltStack简单很多。 4.使用语法 Ansible的Playbook语法要比SaltStack的State语法具有更好的可读性。在使用的过程中发现Ansible在实现loop的更加的简洁,也可以使用相对路径。举例说明,SaltStack在备份文件A.txt和B.txt的State语法为:

Ansible的Playbook语法实现同样的功能如下:

同样Ansible的Notify模块和Handler模块实现的功能和SaltStack的watch和module.wait的模块实现功能也类似,也比SaltStack要简洁明了。 总之,Ansible的安全性能比SaltStack好,自身运维简单,使用语法可读性更强,虽然在响应速度方面不如SaltStack,但是在大部分应用场景下Ansible的响应速度能满足需求。因此,在金融行业的自动化运维系统,Ansible工具是最好的选择。

微服务化架构设计

自动化运维系统的主要运维操作场景有脚本执行、文件的上传下载、启动项管理、用户密码修改、系统软件包管理、定时任务管理等,在云计算的机房里面需要管理1000余台主机,而Ansible执行任务最高并发数约200个,所以系统中需要部署多个Ansible工具来满足系统的应用需求。运维操作需要经历连接主机,执行并返回结果的过程,这个过程需要异步执行且实时返回执行结果。

图1 展示的是自动化运维平台总体设计,便于自动化运维系统管理大规模主机、实时反馈运维结果的一套系统。 自动化运维平台:自动化运维平台包含有CMDB、图形化界面、权限管理等核心功能,后端采用REST API调用Worker模块和监听执行结果。 服务注册中心:服务注册中心提供服务的注册和服务发现的功能,在开源界有Etcd、Consul、Apache Zookeeper、Eureka等组件来实现服务注册中心的功能。Worker模块向网关以IP地址和端口的方式注册到服务注册中心中,自动化运维平台发现Worker后调度选择Worker执行运维操作。

  • Etcd:一个高可用,分布式,一致的key-value存储,用来共享配置和服务发现。Kubernetes和Cloudfoundry都使用了etcd。
  • Consul:一个发现和配置服务的工具。客户端可以利用它提供的API,注册和发现服务。Consul可以执行监控检测来实现服务的高可用
  • Apache Zookeeper:一个常用的,为分布式应用设计的高可用协调服务,最开始Zookeeper是Hadoop的子项目,现在已经成为顶级项目了。
  • Eureka: 是一个基于 REST 的服务,它主要是用于定位服务,以实现服务注册和服务发现功能,本身具有服务健康检测的功能。 Worker集群:Worker模块的核心是Ansible,Worker模块启动的时候使用IP地址和端口向服务注册中心注册一个地址,自动化运维平台会主动发现Worker模块。图2 Worker模块设计,Ansible本身没有提供REST API,通过使用Flask将Ansible API封装给自动化运维平台调用,在启动REST API的时候将IP地址和端口注册到服务注册中心中。运维操作请求到达REST API后,发送给异步调度celery模块,celery后端对接的是消息中心,实现任务的异步分布式调度。Ansible拿到执行任务,连接远程主机执行运维操作,然后将执行结果发送消息中心。这个自动化运维平台实时监听消息中心每台主机的执行结果,达到远程主机上的运维操作结果能实时的反馈到自动化运维平台中。

消息中心:消息中心采用的是消息队列,开源消息队列中间件有RabbitMQ、ActiveMQ、kafka。采用消息队列的好处就是能实时的返回执行结果。

总结

在金融领域中,安全是最重要的考虑因素,在众多自动化运维工具种,Ansible的安全性能最好,是目前最适合金融领域的自动化运维工具。本文通过将Ansible微服务化,集成到自动化运维平台中,实现自动化运维平台高并发执行运维操作场景和实时收集执行结果。

原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2017-04-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大魏分享(微信公众号:david-share)

IT武林的一项绝学:Ansible

IT的武林 如果把IT圈当成一个武林,里面有各大门派并充斥着各种武功的话,ansile绝对是一项杀伤力极强的内功。ansible本身配置和使用极为方便,并能够以...

3815
来自专栏小樱的经验随笔

记一道流量包引发的思考

很久没有更新干货了,作为一个目前还在役的 CTF 选手,肯定要讲解一些有意思的赛题啊,一方面是自我的总结,一方面也是给大家一点学习思路,如何去分析一道赛题,我不...

1143
来自专栏腾讯开源的专栏

微信后台团队最近开源力作:PhxQueue 分布式队列

PhxQueue 是微信开源的一款基于 Paxos 协议实现的高可用、高吞吐和高可靠的分布式队列,保证At-Least-Once Delivery,在微信内部广...

2.3K1
来自专栏JackieZheng

RabbitMQ入门-初识RabbitMQ

初识RabbitMQ 要说RabbitMQ,我们不得不先说下AMQP。AMQP,即Advanced Message Queuing Protocol,高级消息队...

3806
来自专栏北京马哥教育

超实用:小团队如何从零搭建一个自动化运维体系?

如下图,现在行业内各巨头自动化运维架构的最终样子大家都知道了,但是如何根据自己团队当前的情况一步步向这个目标演进?

1480
来自专栏WeTest质量开放平台团队的专栏

Android 内存暴减的秘密?!

在 我这样减少了26.5M Java内存!中内存优化一期已经告一段落,主要做的事情是,造了几个分析内存问题的轮子,定位进程各种类型内存占用情况,分析了线程创建O...

1072
来自专栏Albert陈凯

2018-06-07 小团队的自动化运维实践经验翟志军一些小团队的自动化运维实践经验

3533
来自专栏技术总结

app store被拒

3429
来自专栏Debian社区

Debian GNU/Linux 9 “Stretch” 将于2017年初发布

2016 年 11 月 5 日,Debian 发布经理 Emilio Pozuelo Monfort 和 Niels Thykier 高兴地宣布 Debian ...

862
来自专栏安全领域

如何通过7个简单步骤构建智能物联网网关

现在我们将着手构建智能物联网网关。我们将使用 Ansible 来自动化网关配置,因为它也可用于配置管理和应用程序部署。

6776

扫码关注云+社区

领取腾讯云代金券