本文转载自dbaplus社群
作者介绍
余澈,中国联通大数据技术部平台组核心技术负责人,项目管理高级工程师,具有多年大数据平台运维管理及开发优化经验。管理过多个上千节点集群,擅长对外多租户平台的维护开发。信科院大数据性能测试、功能测试主力,大厂PK获得双项第一。
背景
作为运维人员,做得最多的工作就是日常巡检、故障恢复。公司集群规模越庞大,故障发生率和故障实例数也在成倍增加。每天来到公司,第一件事儿就是要看看有哪些机器坏了?坏哪儿了?集群存储还够吗?底层数据存储是否均衡?然后针对每个故障逐一解决。笔者亲身经历就是过年连懒觉都睡不成,集群故障了,一个电话过来立马清醒,然后默默地恢复故障。这样的经历我觉得每个运维人都含着泪经历过。
改变
通过采集分析Prometheus里的告警数据,利用fabric或ansible等多线程安全并发远程连接工具,执行相关角色实例的恢复工作。
fabric建立连接执行恢复命令。
目前集群规模将近5000台,其中两个大规模的集群节点数均为一千多台。
目前自动化恢复涉及的集群日常运维操作有:
计算节点检测出使用swap交换分区,将会自动清理swap分区并关闭swap分区;
计算节点检测出时钟偏差,将会自动纠偏时钟偏差;
Cloudera Manager 代理挂掉,将会自动重启;
主机检测出有坏盘,坏盘更换完成后,自动恢复;
角色实例检测出异常掉线,自动恢复上线(如NameNode、DataNode、ResourceManager、NodeManager等);
集群存在多个节点多块磁盘存储剩余空间不足,自动进行磁盘级别的数据Balancer;
集群存储达到阈值,自动进行节点级别的数据Balancer。
自动化恢复的适用场景很多,但一定要做到严谨地对症下药,并且要考虑清楚问题的严重性和普遍性。
以上7点自动恢复是集群常见故障,该类故障频发且影响范围较小,并不会影响集群的可用性,因此可以实施自动化恢复。
对于平台罕见故障,且该故障有一定概率会对平台造成部分功能性能影响的,最好的办法是做好告警和应急处理。
下面分享几个自动化恢复实践:
1)计算节点检测出使用swap交换分区,将会自动清理swap分区并关闭swap分区。
根据监控数据,获取swap开启的计算机点,远程连接进行swap分区关闭。
def recover_HOST_MEMORY_SWAPPING(self,list):
com=("swapoff -a")
for i in range(len(list)):
con = Connection(list[i]['ipAddress'], port=22, user=user, connect_timeout=360, forward_agent=True,
connect_kwargs={'password': self.password})
con.sudo(command=com,password=self.password,shell=False,hide='stderr',encoding='utf-8',pty=True)
con.close
2)Cloudera Manager 代理挂掉,将会自动重启。
根据监控数据,获取agent异常下线的计算节点,远程连接进行agent上线操作。
def recover_HOST_SCM_HEALTH(self,list):
com=("/opt/cm-5.13.1/etc/init.d/cloudera-scm-agent restart")
for i in range(len(list)):
con = Connection(list[i]['ipAddress'], port=22, user=user, connect_timeout=360, forward_agent=True,
connect_kwargs={'password': self.password})
con.sudo(command=com,password=self.password,shell=False,hide='stderr',encoding='utf-8',pty=True)
con.close
3)计算节点检测出时钟偏差,将会自动纠偏时钟偏差。
由于集群资源每天有将近16小时处于打满状态,容易造成集群部分计算节点负载过高,导致节点上的DN、NM掉线。这时候需要重启计算节点,但重启节点会造成机器时钟偏差,通过监控告警我们检测到了时钟偏差,接下来通过读取Prometheus中的时钟偏差节点信息,来进行时钟源同步操作。
具体时钟偏差恢复的代码实例如下:
from fabric import Connection
def recover_HOST_CLOCK_OFFSET(self,list):
com=["systemctl stop ntpd