苏宁海量服务器自动化配置运维实践

运维的演进

人力运维阶段

在IT产业的早期,服务器运维是通过各种Ad Hoc命令或者Shell脚本来完成基础设施的自动化工作,这种方式对于简单,一次性的工作很方便,但是对于复杂和长期的项目,后期的脚本维护非常麻烦。

\"\"

自动化工具阶段

现时的大型互联网公司都已经有了成千上万台服务器,对于这么庞大体量的服务器规模,以往那种原始的人工运维方式显然已经过时,大规模服务器的自动化快速运维就成为了不得不探讨的课题。

目前Salt,Chef,Puppet和Ansible等配置管理工具是运维界非常流行的工具,它们定义了各自的语法规则来管理服务器,这些工具定义的代码和Ad Hoc脚本语言非常相似,但是它们强制要求代码具有结构化,一致性,和清晰的参数命名,它们能够远程管理大量的服务器,并且兼容早期的Ad hoc 脚本。

DevOps阶段

随着自动化维护的相关工具层出不穷,有些大公司已经把它上升到了战略层面,并引入了各种各样的自动化工具与自己的业务系统进行组装。

\"\"

自动化运维平台ACM平台的建设

从传统业务转型互联网的苏宁随着业务量的上升,服务器本身的标准化扫描,内核批量升级,在备战双11大促时,运维会接入大量系统扩容,配置,全局变量设定等等操作也逐渐变得常态化,动辄上千台的主机运维的工作已经不是通过堡垒机系统就可以轻松完成了。

并且随着不断有PAAS业务系统提出需要各种可定制化,标准化的服务器配置管理部署接口。开发一个可以批量化配置管理服务器的通用平台就变得迫切起来。

底层工具的选取

目前市场上最主流的开源工具有

Puppet/Chef/Ansible/Saltstack四种,选型时在github的热度排名如下:

\"\"

而在实际开发的选取时优先会考虑以下两点:

  • 第一、语言的选择(Puppet/Chef vs Ansible/Saltstack)
    Puppet、Chef基于Ruby开发,Ansible、Saltstack基于Python(后期可做二次开发),所以抛弃较为老旧并且兼容性较差的Puppet和Chef
  • 第二、速度的选择 (Ansible vs Saltstack)
    运维的配置管理讲究的是更快更稳,Ansible基于SSH协议传输数据,Saltstack使用消息队列zeroMQ传输数据。

在Ansible、Saltstack的选择中,有一些公司放弃Saltstack的主要原因是Saltstack需要安装客户端,在服务器有一定数量的情况下比较麻烦,而Ansible不需要安装客户端。但是目前的Ansible还存在以下难以解决的问题:

  • 众口难调:和业务特点相关的需求十分离散(有的重效率,有的看重流程的完备性,有的对易用性要求高)再加上需求方越来越多,没有合适的通用开放性接口提供 restful API,功能交付的排队会积压严重。
  • 性能差:当需要执行一个服务器数量级达到 K 级操作,Ansible的响应长达数十分钟,并且还有比较高的错误率。

反观SaltStack,它结合轻量级消息队列(ZeroMQ)与Python第三方模块构建。具备了配置管理、远程执行、监控等功能,具有以下明显的优势:

  1. 速度极快
  2. 兼容性好
  3. 文档详细,并且开源社区跟Ansible一样持续活跃

速度测试

\"\"

从表格中可以看出Ansible和SaltStack性能测试中,测试了Ansible和SaltStack在执行命令、分发文件、读取文件和批量脚本执行等自动化运维场景下的性能,由耗时数据可以看出Ansible的响应速度比SaltStack要慢10倍左右。

经过的综合论证考量,最终选择了在大规模集群下,适用性最强的SaltStack作为苏宁所有服务器的基础管理工具。

使用稳定性的维护

由于早期版本的Saltstack的稳定性不高,各种版本之间也有兼容性问题,为了保证版本升级时保持可以向下兼容,团队进行大量的验证和测试后会把发现的bug向社区报告,经过不断的沟通与协商,最终得到社区的认可并接受我们提出的修改建议,目前团队也积极的参与新版本Salt的检证测试与维护,有力的保障底层平台的稳定性。

通用外部接口及WEB平台的建设

由于Saltstack社区并没有提供WEB管理界面,所有的操作都只能通过命令行操作,而API的调用也会暴露出用户名密码给外部系统,Master的安全性得不到保障。并且脚本的维护升级都十分的麻烦。

所以在选定底层管理工具后还需要开发一套ACM上层平台,包装出通用的接口对外提供服务,并且提供可视化的操作界面提供给主机运维团队。

\"\"

ACM提供了一套WEB系统供运维管理人员进行可视化的运维管理。实现了页面化的脚本工具定义, 作业编排,作业执行,命令执行,报表分析等功能。

外部系统则可以通过ACM开放的API接口实现对底层Salt的调用,从而实现对安装有Salt Minion Agent的机器进行配置管理。

并且在安全的设计上,平台提供审计,命令黑名单,通道管理,Agent配置、用户角色权限管理,并且仅允许授权过的外部系统接入ACM。

系统架构的演进

架构1.0

早期采用Order Master + Syndic+Minion的三层架构模式,当时全苏宁的OS虚机+物理服务器总数大概在1万左右,Salt的原生架构还能勉强支撑。

\"\"

但随着集团转型的持续进行,线上业务量的急速上升,大促前上线的服务器数量也以近乎每天一千台的速度上升,接入ACM的系统也从仅有的两三个,每天几百个总请求量,快速上升到几十个系统,一天有近万个配置任务;此时系统的问题也逐步暴露出来,比如任务返回慢,一个同步任务执行需要5秒以上的调用时间;原生架构下Order Master在并发任务量大时,系统压力过高,任务失败率也超过10%

团队每天都花费大量时间应对客户苦不堪言,业务方也是经常提出抱怨,由于业务量提升的倒逼,Salt-Minion又是集团默认的唯一基础运维Agent,除了我们没有人可以承担下自动化配置管理的工作。于是乎ACM进行了整个系统的重新设计。

架构2.0-两层化拆分

经过反复研究跟论证,ACM可以改造成直接充当Order Master的角色,对服务器发起配置任务时,ACM可以通过安装记录直接查询到Minion挂载在哪台Master上,直接对需要的Master发起调用,任务如果是多台机器,后期也通过ACM进行结果的聚合。

由于ACM本身就是JBoss集群,这样做不仅解决了单台Order Maser负担太重的问题,还大大加快了请求的响应时间,从原来的五秒+响应提升到了毫秒级响应,解决了原生架构中官方必须开销的Syndic等待时间。

\"\"

架构2.1-Salt Master的高可用化

在实际生产环境中如果发生了某一台Salt Master宕机的情况,就会有约2K的机器失去控制,人工的进行Master恢复长达几十分钟,对于一些业务的调用是不可以接受的。

所以Master迫切的需要进行高可用化的改造,而改造的过程中又需要解决以下几个问题:

  1. Minion如何探测到Master宕机,并进行快速切换。
  2. 当Minion探测到主Master宕机后如何切换到备Master。
  3. 如何解决主备Master之间Salt-key复制的问题,尤其是当主Master关联新的Minion,新Minion的Salt-key如何同步给备Master。

方案1

采用Saltstack原生的高可用方案,Mutil-Master+Failover-Minion。

Mutil-Master: Saltstack从0.16.0版本开始支持,提供Minion可以连接多Master的功能特性.

Failover-Minion: Minion定期检测Master的可用性,当发现Master不可用时,则在一定时间切换到备用Master上。

主要的配置项如下:

# multi-MasterMaster:        - 10.27.135.188    - 10.27.135.189# 设置为failover Minion  Master_type: failover  # 探测Master的间隔,单位为秒Master_alive_interval: \u0026lt;seconds\u0026gt;  

\"\"

该方案的优点是基于SaltStack原生的高可用支持,不需别的组合方案进行支撑,理论上可以实现Master的高可用,但是经过实际的验证和测试,存在一些明显的不足:

  1. Minon在启动的时候会随机连接一台Master,假如此时连接的Master恰好宕机,Minion不会再随机选择另外一台Master,从而导致连接失败的情况。
  2. Minion 检测间隔,根据Master_alive_interval的设置时间,Minion会主动对现有的Master进行TCP连接一次检查,查看Master是否响应。如果探测间隔设置过长,则可能影响到切换的时效;如果探测间隔设置过短,在大规模服务器场景下,则在短时间内产生过多的网络请求,对Master主机以及网络带宽产生巨大冲击,相当于一次DDOS攻击。
  3. 假如需要更换Master的IP或者追加新的Master的IP,则需要对该Master下的所有的Minon进行配置变更,更恐怖的是Minion需要重启才能生效。
  4. Salt-key同步没有提供解决方案。

方案2

经过不停实验,发现Master可以通过由Keepalived维护的VIP对外提供Salt服务,平时VIP绑定在主Master,当主Master宕机时VIP漂移至备Master,主备Master通过lsyncd共享Salt-key文件。

**注:Keepalived软件主要是通过VRRP协议实现高可用功能的。VRRP是Virtual Router RedundancyProtocol(虚拟路由器冗余协议)的缩写,VRRP出现的目的就是为了解决静态路由单点故障问题的,它能够保证当个别节点宕机时,整个网络可以不间断地运行。

所以,Keepalived 一方面具有配置管理LVS的功能,同时还具有对LVS下面节点进行健康检查的功能,另一方面也可实现系统网络服务的高可用功能。**

在实际运行时,Minion会主动向Master(VIP)发起注册,每5分钟检测一次跟Master的TCP连接,如果连接被冲断则重新发起TCP握手,建立TCP长连接;当主Master发生宕机,Keepalived检测到后将VIP漂移至备用Master,Minion最多在5分钟后将向备用Master的VIP发起TCP连接请求,并重新挂起长连接,等待Master发起任务。

\"\"

该方案的需要安装额外的软件对高可用进行支撑,由Keepalived对Master进行宕机检测,由lsyncd保证Salt-key的实时同步。这样做的好处是可以避免的方案1的诸多不足。首先,Minion端识别到的是虚拟的Master的IP地址,所以Master底层的IP地址的变化对Minion端是无感知的,Minion既不需要更改配置也不需要重启;其次,Keepalived的检活机制是对本网段内的D类地址进行检测,并设置了唯一的虚拟路由ID,检测间隔控制在5秒以内,所以不会对集团网络造成冲击;最后由lsyncd对Salt-key进行同步,既保证了安全性,又避免了多个Master之间Salt-key同步的问题。

至此,通过以上的混合解决方案,成功的实现的Salt Master宕机自检测自动迁移的高可用方案,目前新港环境下的服务器已经全部由采用高可用架构的Salt集群接管。

\"\"

总结

现在的ACM已经基本满足集团在日常以及大促的批量规模调用。

  • 目前ACM已经最大支持K级服务器的同步调用。
  • ACM同步简单任务的调用平均开销时间约200ms。
  • 平台日均调用量已经接近50万次。
  • 请求成功率99.99%。

\"\"

展望

随着系统可靠性得到保障,接入系统和调用量将会越来越高,以后怎么应对日均百万,千万级的任务调用也提上日程。

未来的AIOps对ACM这种基础配置服务平台也会提出的更高要求,因为当指挥监测系统在采集决策所需的数据,做出分析、决策后,ACM则需要担当起执行动作的工具,利用自动化脚本/命令去执行AI大脑的决策。

目前Saltstack已经管理了十五万+的服务器,当Salt调用失败时, 可能是因为机器本身宕机、防火墙限制,七层网络不通、系统负载过高、磁盘满了等等各种,这些原因会造成Salt调用失败,我们希望提前对Salt故障问题作出预警,并能够智能的定位问题和解决问题。

而目Salt在批量执行时也有一定的概率产生任务结果的丢失,因为所有任务的返回结果时都需要客户端主动推回服务器,在批量任务大时,少数机器的返回结果会丢失。

这些课题我们后续也将继续研究,探索!

作者简介

徐洋,十年高可用Linux集群、服务器虚拟化建设经验,现为苏宁易购IT总部技术经理。擅长Linux服务器故障诊断与排除,在数据同步、SHELL脚本、Linux系统安全等方面有深入研究,精通服务器集群配置管理的自动化、高可用化技术。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253088.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

腾讯面试经验2

时间:2017年10月16日11:30面试。 地点:重庆万达艾美酒店。 信息:女,本科应届生,面试后台开发岗位。 在深圳的面试已经全部结束了,偶然间听朋友说重庆、长沙等场地的面试还在进行中,只要修改面试…

简易有效Api接口防攻击策略

API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。 简单…

被称为海淀妈妈四大神器之一的倾听者K3 硬件拆解

暑假期间发现很多博主都在推荐倾听者K3,被海淀妈妈们称为四大神器之一, 虽然暂没听说其他三大神器是什么,作为教育硬件爱好者还是决定先整个回来拆拆看。 在京东上搜到倾听者K3版本一共有三种颜色,分别是蓝色(悟空蓝&…

dds设计信号发生器

高一 150206101 Dds数字信号发生器设计方案 DDS的工作原理框图如下 在微机内,若插入一块D/A转换卡,然后编制一段小程序,如连续进行加一运算到一定值,然后连续进行减一 运算回到原值,在反复运行该程序,则微机…

Maven--资源文件resource的问题

2019独角兽企业重金招聘Python工程师标准>>> Maven项目的目录有: src/java/main src/java/resource src/test/main src/test/resource 有的时候在resource目录下添加文件却不能加载出来,解决的办法是从把添加的资源文件添加到properties---&g…

以太网自动协商原理

自协商基本原理 自动协商模式是端口根据另一端设备的连接速度和双工模式,自动把它的速度调节到最高的公共水平,即线路两端能具有的最快速度和双工模式。 自协商功能允许一个网络设备能够将自己所支持的工作模式信息传达给网络上的对端,并接受…

mac与phy如何实现网络自适应

这两天修改网卡驱动以实现10/100/1000M自适应,因此研究了下phy芯片和emac驱动如何兼容10/100/1000M网络环境,记录在此。 网络中设备端数据链路层由mac芯片和phy芯片组成,phy芯片根据外部网络环境完成自动协商以及配置,驱动中根据p…

LVM逻辑卷详解及创建

我们先来看一下这张图片:PV: 底层的一个硬盘设备,可以是一个分区,也可能是一个RAID。我们可以把这个块设备创建成一个物理卷格式,即一个PV。VG: 将一个或多个PV提供的存储空间在一个更低的单位上划分成一个个独立的存储单元&#…

ITU-RBT.656视频标准接口

601是SDTV的数据结构 656是SDTV的interface 709是HDTV的数据结构 1120是HDTV的interface ITU-R BT.601是演播室数字电视编码参数标准,而ITU-R BT.656 则是ITU-R BT.601附件A中的数字接口标准, 用于主要数字视频设备(包括芯片)之间采用27Mhzs并口或243Mb…

C语言博客作业03--函数

1.本章学习总结 1.1思维导图 1.2本章学习体会及代码量学习体会 1.2.1学习体会 本周学习了函数,其实,函数于之前学习的三大控制结构是密不可分的,而函数又有其特殊的地方,例如:函数的声明、函数的调用等等。我们之前编写…

Insta360:从软到硬,一年做出360°全景相机,中间填了多少坑?

摘要刘靖康在大学就开始创业。在大二的时候他曾经去腾讯实习,然后又去了“超级课程表”这个团队实习半年,2013 年 9 月回到南京创业,一开始的产品叫“名校直播”,是一款围绕院校名师讲座所做的视频直播产品。 不久前,一…

No.10 awk、变量、运算符、if多分支

awk、变量、运算符、if多分支 awk语法 ~ awk -F: {print $3,$4} /etc/passwd //-F指定:分隔符 默认以空格作为分隔符 ~ awk -F: {print &0,NF} //$0打印全部,NF有几段内容 ~ awk -F: {print $NF} /etc/passwd //$NF打印最后一段内容 ~ awk -F: {print NR} /etc/passwd…

排序: 选择排序

1. 基本原理 将待排序的元素分为已排序(初始为空)和未排序两组,依次将未排序的元素中值最小的元素放入已排序的组中。 直接选择排序简单直观,但性能略差;堆排序是一种较高效的选择排序方法,但实现起来略微复杂。 2. 直接选择排序 …

全景摄像技术大有可为

网络摄像机发展至今,已经基本满足了“高清”、“日夜监控”、“远距离监控”的需求,但是 随着细分市场的发展,超广角摄像机需求逐渐凸显出来。主要应用在会议室、办公室、大厅/大堂、商场、仓库、车间等大面积开阔的区域,解决原来…

java文件传输之文件编码和File类的使用

---恢复内容开始--- 我们知道,在用户端和服务端之间存在一个数据传输的问题,例如下载个电影、上传个照片、发一条讯息。在这里我们 就说一下文件的传输。 1.文件编码 相信大家小时候玩过积木(没玩过也看过吧),看到一个…

arm-linux-gcc:Command not found的问题

标签: ubuntulinux 2015-05-15 10:47 680人阅读 评论(0) 收藏 举报 分类: Ubuntu(23) /etc/profile gcc(9) ARM汇编指令(4) 折腾了一天,终于搞定了。 ubuntu没有roo…

PASTE Splay

题目描述 我们用文本处理器来处理一个特殊的文本文件,该文本文件共有N行文本,每一行文本仅包含一个自然数,第一行为1、第二行为2,以此类推至N行为自然数N。   假设对该文本文件执行一次“剪切和粘贴”操作含义如下:…

Spring---基于Spring IOC的小程序

实现的功能以及各文件间的关系 IHelloMessage:一个接口,用于定义输出问候信息。 HelloWorld、HelloChina:接口的实现类。在这里表示人在不同的地方 Person:一个人物类,调用IHelloMessage接口,向用户输出问候…

MIPI DSI协议介绍

原文地址:http://blog.csdn .NET/qq160816/article/details/19555957 一、MIPI MIPI(移动行业处理器接口)是Mobile Industry Processor Interface的缩写。MIPI(移动行业处理器接口)是MIPI联盟发起的为移动应用处理器制…

130242014018-郑志良-第2次实验

一、实验目的 1.熟悉体系结构的风格的概念 2.理解和应用管道过滤器型的风格。 3、理解解释器的原理 4、理解编译器模型 二、实验环境 硬件: 软件:Python或任何一种自己喜欢的语言 三、实验内容 1、实现“四则运算”的简易翻译器。…