记一次生产问题排查:
接到告警短信,etcd集群中某节点2379端口数量为0,证明etcd服务(二进制,systemd管理)挂了
查看etcd服务状态并尝试重启etcd均失败,通过journalctl -xe -u etcd查看日志中存在panic:xxx state.commit xxx is out of range …,经过一番搜索,报错可能为:节点因某种原因异常,导致该节点记录的commit与集群中记录的当前异常节点的commit不同导致,接下来做了如下流程:
- 排查发现/var/lib/etcd目录空间占用很高,多为snap文件导致
- 进入/var/lib/etcd/member/snap目录,根据搜索结果表明需要删除/var/lib/etcd/member/下所有文件,由于为生产环境,选择逐步操作,当前备份了/var/lib/etcd/member/snap目录并删除后,尝试systemctl restart etcd重启etcd,依然报错,错误为…wal file not found
- 备份/var/lib/etcd/member/wal目录并删除后,尝试重启etcd,报错改为member has already been bootstrapped,证明该节点已在当前etcd集群中注册,无法重新注册,经搜索,将参数将 --initial-cluster-state=new 修改成 --initial-cluster-state=existing,重启服务,etcd成功启动
- 为保持与通用配置一致,将–initial-cluster-state=new还原,重启服务,etcd依然启动成功
- 期间发现etcd的snap目录空间占用过大,新增etcd启动参数–auto-compaction-retention=6用于清理历史数据
- 逐个节点添加如上参数并重启etcd,服务启动成功,netstat -atnlup |grep etcd均有2379和2380端口启动,且kubectl get node执行成功,问题解决
版权声明:本文为weixin_40930677原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。