国美云运维自动化实践

1.5.2 性能挑战

作为一个数据中心,应对各种各样数据请求是基本功,有些请求比较简单,有些查询要求比较高,比如监控系统,当CMDB中的应用和机器变化都要及时推送给监控系统,还有一些经常查询的数据,可以放到Redis中以减轻CMDB的压力。

CMDB作为数据中心,除了提供查询数据还有分配数据的能力,比如IP地址的分配,这时要充分考虑高并发的情况。对此我们采用了乐观锁的方式解决这个问题,防止IP地址被重复分配。

1.5.3 其他数据处理方式

除了以上的提到的数据类型,有一些数据需要周期跑的,还有一些数据是需要延迟投递的,当然你可以在系统本身做定时器去做,但当任务量多的时候对系统压力也比较大。对此我们推荐放到MQ中,或者使用Beantalked,Beantalked相比MQ更侧重于任务的分发。

2. 自动装机系统

2.1 技术简介

技术方案:PXE RAMOS

中间还有ks,不过ks只是用来引导,没有其他功能,ramos是定制的,还需要修改initrd.img文件,替换其中的init脚本和预装一些命令和内核模块。Ramos是运行在内存的操作系统,里面放置了一系列装机脚本,可以做任何事情,新功能只需要扩展脚本即可。

2.2 功能介绍

目标: 只需要提供服务器序列号和位置,插上电源和网线开机就可以自动安装。解放生产力,减少IDC驻场人员和运维人员成本。

主要功能如下:

1.自动配置RAID,支持多种RAID配置

2.支持多种分区模式

3.自动向CMDB申请IP资源和主机名并配置IP,支持多种BOND设置

4.根据需要做固件驱动升级

5.支持拷机,对IO/NET/DISK/CPU进行压测(刚购买来的机器做,发现有问题的机器)

6.支持高并发装机,可以并发安装100台物理机,全部装完只需几分钟

2.3 上架流程

服务器下单后,在服务器还未发货之前,供应商提供机器详细信息,并录入到资产系统。SA对服务器进行规划,服务器发到IDC后,供应商按照区域上架相应机型,扫描机器的机柜U位即可,并上传CMDB系统,插上电源和网线开机就可以自动安装。也可以提前在CMDB算好机器的位置,服务器到货后按照指定的位置上架。 

图 7 装机过程

2.4 拷机

拷机的意思就是对硬件做健康检查,具体是对服务器的CPU、MEM、DISK、网卡等进行压测,发现其中有问题的机器。为啥要有这个功能,其实我们是踩过硬件方面的坑的。总结下来硬件问题有两种,一种是比较明显问题的硬件,一种是看似没问题,但在高并发满负荷运行下出现抽风情况硬件。

前一种问题容易发现,但如果完全相信厂商没有做基本检测也会掉到坑里,比如有批采购的服务器中发现有一台的内存不一样,买的128G内存实际是160G内存,多了两块内存条,真是哭笑不得。这可不是什么好事情,万一是少两块内存条呢?

对于第二类问题用一般手段就很难发现了,需要长时间压测分析数据才能发现其中的问题,而且有时候跟操作系统、部署的服务有关。但一旦出现问题,排查起来异常艰难,耗时耗力。记得印象深刻的是tair超时问题的排查,当时出现了tair超时抖动的情况,百万分之几的出现率,在每天几亿次调用量的环境下,这是不能忍受的,问题发现是由于支付等关键业务放的开发对中间件团队的投诉。最后CTO召集中间件、测试部门、云产品支撑部、业务方开发多方组成联合调查组,经过近几周的排查终于发现是硬件CPU的问题。

另一个例子是DBA发现IO抖动(某时间点IOPS急剧下降到接近0)导致数据库压力陡增的案列。这些我们称之为毛刺现象,出现这种情况需要及时排查处理的,不然后续会出现大问题,万一赶上促销的时候爆发出了呢?后果不敢想像。当然如果业务量不大的情况下可以不用Care,因为中奖概率实在是太低了,但如果业务量大的情况下真的要重视了,因为摩尔定律告诉我们不要存在侥幸心理。

有过两次吃亏的经历,我们就着手从源头发现问题,防止有问题的机器流入到生产环境,源头当然是服务器上架装机了,自然而然这个任务放到了装机系统做。首先我们选择对CPU、内存、网卡、磁盘作为压测对象,并分别准备相应的压测脚本,最后嵌入到装机里,并在装机系统打Tag,装机时选择这个Tag就会执行拷机动作,最后把数据上传到CMDB进行数据展示。CMDB对数据进行汇聚,从CPU、内存、网卡、磁盘四个维度进行展示,发现有问题的机器。