实例解读丨关于GaussDB ETCD服务异常

摘要:本文通过对ETCD服务异常问题分析 , 代码展示解决方案 。
本文分享自华为云社区《【实例状态】GaussDB ETCD服务异常》 , 作者:酷哥 。
首先确认是否是虚拟机、网络故障
虚拟机故障导致ETCD服务异常告警问题现象管控面上报etcd服务异常告警 , 虚拟机发生重启 , 热迁移、冷迁移 , HA等动作 。
问题分析及界定在告警信息中找到实例ID、节点ID、虚拟机ID , 在管控面查看虚拟机状态是否正常 , 能否正常登录 , 
如果虚拟机异常无法登录 , 联系IaaS技术支持修复虚拟机 。
检查虚拟机是否发生过重启 , 热迁移、冷迁移、HA等动作 , 例如内存、网卡等问题引起热迁移 。
处理步骤联系IaaS技术支持修复虚拟机 , 确认虚拟机故障原因 , 例如内存、网卡等问题引起热迁移 。
网络故障导致ETCD服务异常告警问题现象管控面上报etcd服务异常告警 , 虚拟机无法登录或ping通其他节点IP, 或者监控显示网络有异常 。
问题分析及界定在该节点上ping其他节点IP , 测试是否ping通 。
如果ping不通 , 执行步骤(1)(2) , 检查该节点网络、IP配置、防火墙配置等 。
如果ping通 , 执行步骤(3)确认告警时间点网络是否断开 。
(1)检查IP是否正常:ifconfig查看etcd使用的IP是否存在 , 如果不存在 , 排查IP配置丢失原因 , 常见原因是虚拟机重启后IP没有重新配置 , 导致丢失 。
实例解读丨关于GaussDB ETCD服务异常

文章插图
(2)检查防火墙是否正常在Ruby用户下查看etcd的IP和端口: ps ux | grep etcd
实例解读丨关于GaussDB ETCD服务异常

文章插图
在root用户下iptables -L命令检查防火墙是否限制了IP和端口 , 如果有限制 , 去掉防火墙限制 。
实例解读丨关于GaussDB ETCD服务异常

文章插图
(3) 查看etcd日志进入Ruby用户
cd $GAUSSLOG/cm/etcd
查看对应时间点的etcd_xxx.log日志 , 如果有如下日志 , 可能是etcd节点间网络断开, 或者对端的etcd进程down , 导致本端etcd连接断开 。
排查网络原因或对端的etcd进程是否重启 , 网络原因可能是网络断开 , 网卡故障 , 也有可能是虚拟机故障 。
grpc: Server.processUnaryRPC failed to write status: connection error: desc = "transport is closing"
rafthttp: lost the TCP streaming connection with peer c797ab3a61e2ea55 (stream MsgApp v2 reader)
etcdserver: failed to reach the peerURL(https:// X.X.X.X:X) of member c797ab3a61e2ea55 (Get "https://X.X.X.X:X/version": dial tcp X.X.X.X:X: i/o timeout)
rafthttp: health check for peer c797ab3a61e2ea55 could not connect: dial tcp X.X.X.X:X: i/o timeout (prober "ROUND_TRIPPER_RAFT_MESSAGE")
处理步骤处理步骤同上 , 已说明 。
负载过重导致ETCD服务异常警告问题现象【实例解读丨关于GaussDB ETCD服务异常】管控面上报etcd服务异常告警, 磁盘IO/CPU/内存 很高.
问题分析及界定进入Ruby用户
cd $GAUSSLOG/cm/etcd
查看对应时间点的etcd_xxx.log日志 , 告警时间点有如下日志 , 说明etcd节点负载过重, 磁盘IO、CPU等压力大 。
2021-04-09 10:57:40.112936 W | wal: sync duration of 2.00201804s, expected less than 1s ===通常这个表示磁盘IO压力大 。
2021-04-09 10:57:40.112993 W | etcdserver: failed to send out heartbeat on time (exceeded the 1s timeout for 2.124414ms, to c8eccd97bed22939)

经验总结扩展阅读