ETCD故障恢复

未来已来2018-09-10 13:30

 作者:陆世亮


如果一个etcd集群完全崩溃了,而且成员数量小于合法数量,那么就必须从头配置所有的成员。整个流程包含两步:

 1.  使用初始的数据目录来初始化一个单成员的 etcd集群
 2.  通过添加新的成员来调整 etcd 集群的大小
 假设一个 3 节点的集群中,所有成员都挂掉了。首先,在所有成员上运行如下指令停止 etcd2 服务:
sudo systemctl stop etcd2
 如果用户配置etcd代理节点,那么代理节点应该能够根据配置项 --proxy-refresh-interval 的值去自动刷新成员列表。
 接着,选择一个成员节点,运行下面的命令来备份数据目录
sudo etcdctl backup --> 既然已经备份了目录,用户可以启动一个单节点的集群。创建一个名为/run/systemd/system/etcd2.service.d/98-force-new-cluster.confdrop-in文件,内容如下:
[Service]
Environment="ETCD_FORCE_NEW_CLUSTER=true"
 接下来运行:
sudo systemctl daemon-reload
 通过查看日志中的错误信息,来检查该drop-in文件是否正确:
sudo journalctl _PID=1 -e -u etcd2
 如果一切正常,启动etcd2后台进程:
sudo systemctl start etcd2
 检查集群状态:
etcdctl member list
 输出响应如下:
e6c2bda2aa1f2dcf: name=1be6686cc2c842db035fdc21f56d1ad0 peerURLs=http://10.0.1.2:2380 clientURLs=http://10.0.1.2:2379
 检查集群健康:
 etcdctl cluster-health
 输出响应如下:
member e6c2bda2aa1f2dcf is healthy: got healthy result from http://10.0.1.2:2379
cluster is healthy
 如果输出中没有错误,删除/run/systemd/system/etcd2.service.d/98-force-new-cluster.conf drop-in文件,并且重新启动systemd服务:
sudo systemctl daemon-reload

 完成这一步之后,没必要再重启etcd2服务了。

接下来同时删除/var/lib/etcd2/member目录和/var/lib/etcd2/proxy目录。

至此完成了ETCD集群的故障恢复。


本文来自网易实践者社区,经作者陆世亮权发布