如何完全重新初始化etcd集群(在coreos上)

47次阅读
没有评论

问题描述

在更新etcd集群时遇到了问题,现在希望能够完全重新初始化etcd集群。他尝试了很多方法,但由于文档不够结构化,他混合了很多不同部分的信息。目前,他的一个节点想要选举另一个节点作为leader,但另一个节点认为自己是另一个集群的一部分。他无法在第一个节点上执行任何操作,etcdctl命令显示集群不健康。因此,他希望能够重新开始。
此外,他还希望能够在不重新安装整个系统的情况下设置etcd集群。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

以下是重新初始化etcd集群的步骤:
1. 禁用并删除所有与etcd2相关的单元。
2. 创建一个新的dropin到etcd-member.service,并添加以下内容:

[Service]
Environment="ETCD_OPTS=--name cluster00 \
  --discovery https://discovery.etcd.io/<MY_ID> \
  --listen-client-urls http://<NODE_IP>:2379,http://127.0.0.1:2379 \
  --listen-peer-urls http://<NODE_IP>:2380 \
  --advertise-client-urls http://<NODE_IP>:2379 \
  --initial-advertise-peer-urls http://<NODE_IP>:2380"
  1. 为集群生成一个新的discovery id。
  2. 完全删除旧的集群,包括删除/var/lib/etcd/*目录和/var/lib/etcd2目录的所有内容。
  3. 重新启动etcd-member服务。
    请注意,此方案假设您在集群中没有启用SSL。如果启用了SSL,请相应地修改配置。

方案2

请注意,此方案可能会增加复杂性,并且需要确保正确设置etcd集群的依赖关系。
另一种方法是使用脚本或工具来控制etcd集群的初始化。您可以使用etcdctl命令手动控制etcd集群的初始化,或者使用一些第三方工具来管理etcd集群的依赖关系。
以下是一个简单的bash脚本示例,可以用于重新初始化etcd集群:

#!/bin/bash
# 禁用并删除所有etcd2相关的单元
systemctl disable etcd2.service
systemctl stop etcd2.service
rm -rf /var/lib/etcd/*
# 重新启动etcd-member服务
systemctl start etcd-member.service

在这个示例中,我们首先禁用并删除所有与etcd2相关的单元。然后,我们删除/var/lib/etcd/*目录中的所有内容。最后,我们重新启动etcd-member服务。
请注意,此方案假设您已经安装了etcd,并且已经设置了etcd-member服务。

正文完