作者:陆世亮
如果一个etcd集群完全崩溃了,而且成员数量小于合法数量,那么就必须从头配置所有的成员。整个流程包含两步:
sudo systemctl stop etcd2
sudo etcdctl backup --> 既然已经备份了目录,用户可以启动一个单节点的集群。创建一个名为/run/systemd/system/etcd2.service.d/98-force-new-cluster.conf的drop-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集群的故障恢复。