一、故障背景
HDP 的Ambari控制台显示某台主机的RegionServer服务下线
二、根本原因分析(RCA,Root Cause Analysis)
(1)从Ambari控制台手动start RegionServer服务,失败。
(2)检查这台主机上的RS有关日志,发现有多条记录:
org.apache.hadoop.hbase.ClockOutOfSyncException:
Server 172.25.224.4,16020,1613788579799 has been rejected; Reported time is too far out of sync with master.
Time difference of 45596ms > max allowed of 30000ms”
意思是这台主机上的系统时钟落后主节点已超出30秒的阈值。
why1: 为什么这台机器的时间落后于主节点?
时间同步服务ntp下线,并且未能自动重启。
why2: 为什么ntp服务下线没能自动重启?
RS所在的云主机是用的阿里云ECS,经过咨询阿里云的售后支持人员,答复说虽然ECS预装时间同步服务,但是该服务下线之后并不会自动重启,需要用户手动维护。
三、如何解决和预防
【如何解决】
紧急解决方案: 先修改下线RegionServer机器上的系统时间,即date -s “2021-02-20 09:32:32”,再从Ambari控制台手动启动刚才下线的RegionServer服务,成功。
永久解决方案
分别在所有的master机器、所有的slave机器上的目录/etc/systemd/system 下创建自定义的配置文件ntp.server,内容是:
cat /etc/systemd/system/ntp.service
[Unit]
Description=ntp
After=network.target
[Install]
WantedBy=multi-user.target
[Service]
Type=simple
PIDFile=/root/ntp.pid
ExecStart=/bin/systemctl start ntp
Restart=always
RestartSec=0.1
StartLimitInterval=0
再分别以root用户对这些机器操作以下两步:
/bin/systemctl enable ntp
/bin/systemctl daemon-reload
ntp服务启动后,需要确认一下各机器上的时间,正常的话没问题。
【如何预防】
系统层面的预防: 由于/etc/systemd/system/ntp.server已经生效,ntp服务会在异常退出的时候被自动重启。
预警策略: 笔者写了一个python程序,此程序用于每半小时访问HBase Master页面上的RegionServer健康状况,若有RegionServer下线就会第一时间通过钉钉发送告警。粉丝们如果有兴趣可以加我微信向我要,大家交流,共同进步。