ETCD是一个高可用的分布式Key/Value存储系统。它使用Raft算法,通过选举来保持集群内各节点状态的一致性。虽然ETCD具有高可用的特点,但是也无法避免多个节点宕机etcd集群,甚至全部宕机的情况发生。如何快速的恢复集群,就变得格外重要。本文将介绍在日常工作中,遇到的ETCD集群常见问题的处理方法。

ETCD常见问题

由于ETCD集群需要选举产生leader,所以集群节点数目需要为奇数来保证正常进行选举。而集群节点的数量并不是越多越好etcd集群,过多的节点会导致集群同步的时间变长,使得leader写入的效率降低。我们线上的ETCD集群由三个节点组成(即宕机一台,集群可正常工作),并开启了认证。以下是日常运维工作中,遇到问题的处理过程。

1

集群一个节点宕机的恢复步骤

一个节点宕机,并不会影响整个集群的正常工作。此时可通过以下几步恢复集群:

1)在正常节点上查看集群状态并摘除异常节点

etcdctl endpoint status

etcd集群_集群通信系统有几种集群方式_etcd集群搭建

2)摘除异常节点

etcdctl member remove $ID

3)重新部署服务后,将节点重新加入集群

使用etcdctl endpoint status命令查看集群状态,若三台都正常,集群恢复。

2

集群超过半数节点宕机的恢复步骤

此时集群处于无法正常工作的状态,需要尽快恢复。若机器宕机重启,IP保持不变,则证书无需重新生成;若IP更换,则还需重新生成证书。集群恢复需要使用ETCD的备份数据(使用etcdctl snapshot save命令备份),或者从ETCD数据目录复制snap/db文件。以下是恢复步骤:

1)将备份数据恢复至集群

2)启动ETCD服务,检查集群状态

systemctl start etcd
etcdctl member list #查看节点状态

3

database space exceeded报错恢复步骤

从报错的字面意思来看,是超出数据库空间导致。执行etcdctl endpoint status,查看集群此时各节点的状态,发现DB SIZE为2.1GB。ETCD官方文档说明()提到ETCD默认的存储大小是2GB。超出后,集群无法进行写入。以下为恢复步骤:

1)备份数据

使用snapshot save命令备份集群数据

2)获取reversion

etcdctl --write-out="json" --cacert /var/lib/etcd/cert/ca.pem --key /var/lib/etcd/cert/etcd-client-key.pem --cert /var/lib/etcd/cert/etcd-client.pem  --endpoints='*.*.*.*:2379' endpoint status |grep -o '"revision":[0-9]*'

3)compact

etcdctl --cacert /var/lib/etcd/cert/ca.pem --key /var/lib/etcd/cert/etcd-client-key.pem --cert /var/lib/etcd/cert/etcd-client.pem  --endpoints='*.*.*.*:2379' compact $revision

4)defrag

etcdctl --cacert /var/lib/etcd/cert/ca.pem --key /var/lib/etcd/cert/etcd-client-key.pem --cert /var/lib/etcd/cert/etcd-client.pem --endpoints='*.*.*.*:2379' defrag

5)删除报警(必需删除,否则集群仍然无法使用)

etcdctl --write-out="table" --cacert /var/lib/etcd/cert/ca.pem --key /var/lib/etcd/cert/etcd-client-key.pem --cert /var/lib/etcd/cert/etcd-client.pem --endpoints='*.*.*.*:2379 alarm disarm

以上就是对ETCD集群日常维护的总结,为了使服务更加稳定的运行,建议定时备份和压缩数据,并增加集群监控(与Prometheus配合使用)。

– END –

精彩文章推荐:

Nginx实现高效负载均衡器就是这么简单!
面试官:Redis监控指标有哪些?
AIOps(智能运维) 在 360 的落地实践
故障排查:Kubernetes 中 Pod 无法正常解析域名
部署一套完整的Kubernetes高可用集群(上)
Nginx配置中一个不起眼字符"/"的巨大作用,失之毫厘谬以千里
Kubernetes 中高级岗位,薪资不降,反而上涨不少!


年轻时偷的懒,迟早是要还的。点亮

限时特惠:本站每日持续更新海量设计资源,一年会员只需29.9元,全站资源免费下载
站长微信:ziyuanshu688