Cluster computing etcd群集id不匹配
嘿,由于某种原因,我有一个集群id不匹配,我在一个节点上有它,然后在清除数据目录几次后消失,更改集群令牌和节点名称,但在另一个节点上出现 这是我使用的脚本Cluster computing etcd群集id不匹配,cluster-computing,etcd,Cluster Computing,Etcd,嘿,由于某种原因,我有一个集群id不匹配,我在一个节点上有它,然后在清除数据目录几次后消失,更改集群令牌和节点名称,但在另一个节点上出现 这是我使用的脚本 IP0=10.150.0.1 IP1=10.150.0.2 IP2=10.150.0.3 IP3=10.150.0.4 NODENAME0=node0 NODENAME1=node1 NODENAME2=node2 NODENAME3=node3 # changing these on each box THISIP=$IP2 THISNO
IP0=10.150.0.1
IP1=10.150.0.2
IP2=10.150.0.3
IP3=10.150.0.4
NODENAME0=node0
NODENAME1=node1
NODENAME2=node2
NODENAME3=node3
# changing these on each box
THISIP=$IP2
THISNODENAME=$NODENAME2
etcd --name $THISNODENAME --initial-advertise-peer-urls http://$THISIP:2380 \
--data-dir /root/etcd-data \
--listen-peer-urls http://$THISIP:2380 \
--listen-client-urls http://$THISIP:2379,http://127.0.0.1:2379 \
--advertise-client-urls http://$THISIP:2379 \
--initial-cluster-token etcd-cluster-2 \
--initial-cluster $NODENAME0=http://$IP0:2380,$NODENAME1=http://$IP1:2380,$NODENAME2=http://$IP2:2380,$NODENAME3=http://$IP3:2380 \
--initial-cluster-state new
我明白了
其他成员甚至都没有参加竞选,这怎么可能呢
感谢所有从谷歌无意中发现这一点的人: 错误是关于对等成员ID的,它试图以与集群中已存在的另一个成员(可能是旧实例)相同的名称加入集群(使用相同的对等名称,但另一个ID,这就是问题所在) 您应该删除对等方并重新添加它: 要解决这个问题非常简单,首先我们必须登录到集群其余部分的现有工作服务器,并从其成员列表中删除server00:
etcdctl成员删除
这就增加了允许新server00加入的能力,但我们需要通过发出add命令简单地告诉集群它可以加入:
etcdctl成员添加服务器00http://1.2.3.4:2380
如果你按照server00上的日志进行操作,那么你就会看到一切都会变得栩栩如生。您可以通过以下命令确认这一点:
etcdctl成员列表
etcdctl群集运行状况
使用“etcdctl成员列表”查找当前成员的ID,并查找试图使用错误ID加入集群的成员,然后使用“etcdctl成员移除”从“成员”中删除该对等成员,并尝试重新加入他。
希望有帮助。我的--data dir=/var/etcd/data,删除并重新创建它,这对我来说很有用。似乎我以前制作的etcd集群的某些内容留在了这个目录中,这可能会影响etcd设置。我也遇到了同样的问题,我们的leader etcd服务器出现故障,在用新的etcd服务器替换后,我们遇到了一个错误
rafthttp: request sent was ignored (cluster ID mismatch)
它正在寻找旧的集群Id,并生成一些带有错误配置的随机本地集群
按照以下步骤解决问题
etcdctl群集运行状况
etcdctl成员删除成员id
systemctl etcd2 stop
rm-rf/var/etcd2/data
在删除之前,将此数据备份到其他文件夹中的某个位置--initial cluster state existing
参数启动集群,如果已经将服务器添加到现有集群中,则不要使用--initial cluster state new
etcdctl成员添加节点0 http://$IP:2380
我花了很多时间调试这个问题,现在我的集群在所有成员中都运行正常。希望这些信息有帮助 就我而言,我犯了错误 rafthttp:请求群集ID不匹配(获得1b3a88599e79f82b想要b33939d80a381a57) 由于一个节点上的配置不正确 配置中有两个我的节点 env ETCD_INITIAL_CLUSTER=“ETCD-01=” 其中一个节点 env ETCD_INITIAL_CLUSTER=“ETCD-01=” 为了解决这个问题,我停止了所有节点上的etcd,编辑了不正确的配置, 删除所有节点中的/var/lib/etcd/member文件夹,在所有节点上重新启动etcd,瞧 p、 美国
/var/lib/etcd-是etcd在我的案例中保存数据的文件夹两年后,我刚刚遇到同样的问题。Dmitry的回答很好,但没有注意到OP在设置etcd集群时首先可能犯的错误 在任何时候运行带有“-cluster state new”的etcd实例都将在数据目录中生成集群ID。如果您随后尝试加入现有集群,它将使用旧生成的集群ID(发生不匹配错误时)。是的,从技术上讲,OP有一个“旧集群”,但更可能的是,100%常见的是,当有人试图建立他们的第一个集群时,他们没有注意到程序必须更改。我发现etcd通常不能提供一个好的使用模型 因此,删除成员(如果新节点从未成功加入,则不需要这样做)和/或删除新节点的数据目录将“修复”问题,但问题在于OP如何设置第二个群集节点 这里有一个设置细微差别的例子:(叹气…谢谢你的etcd…) 接下来,添加第二个节点的预期群集名称和对等URL:
etcdctl --endpoints="https://127.0.0.1:2379" member add etcd2 --peer-urls="http://<next node's IP address>:2380"
当然,您可以在所有集群设置都在其中的情况下继续运行etcd,但它们“可能”会因数据目录中的内容而被忽略。请记住,如果您加入第三个节点,新节点成员的知识将复制到其余节点,并且这些“初始”集群设置在将来集群更改时可能完全错误/误导。因此,除非您实际上正在加入一个节点,否则运行您的已加入节点时不需要初始群集设置
另外,最后一点要说明的是,您应该/必须在集群中运行至少3个节点,否则筏形领队选举过程将破坏一切。对于2个节点,当1个节点关闭或断开连接时,该节点将不会选择自身并在选举循环中旋转。客户端无法与处于选择模式的etcd服务通话。。。很好的可用性!如果1发生故障,则至少需要3个节点来处理
# On the 1st node (I used Centos7 minimal, with etcd installed)
sudo firewall-cmd --permanent --add-port=2379/tcp
sudo firewall-cmd --permanent --add-port=2380/tcp
sudo firewall-cmd --reload
export CL_NAME=etcd1
export HOST=$(hostname)
export IP_ADDR=$(ip -4 addr show ens33 | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
# turn on etcdctl v3 api support, why is this not default?!
export ETCDCTL_API=3
sudo etcd --name $CL_NAME --data-dir ~/data --advertise-client-urls=http://127.0.0.1:2379,https://$IP_ADDR:2379 --listen-client-urls=https://0.0.0.0:2379 --initial-advertise-peer-urls https://$IP_ADDR:2380 --listen-peer-urls https://$IP_ADDR:2380 --initial-cluster-state new
sudo etcd --name $CL_NAME --data-dir ~/data --advertise-client-urls=http://127.0.0.1:2379,https://$IP_ADDR:2379 --listen-client-urls=https://0.0.0.0:2379 --initial-advertise-peer-urls https://$IP_ADDR:2380 --listen-peer-urls https://$IP_ADDR:2380
etcdctl --endpoints="https://127.0.0.1:2379" member add etcd2 --peer-urls="http://<next node's IP address>:2380"
# Next on the 2nd/new node
export CL_NAME=etcd1
export HOST=$(hostname)
export IP_ADDR=$(ip -4 addr show ens33 | grep -oP '(?<=inet\s)\d+(\.\d+){3}')
sudo etcd --name $CL_NAME --data-dir ~/data --advertise-client-urls=https://127.0.0.1:2379,https://$IP_ADDR:2379 --listen-client-urls=https://0.0.0.0:2379 --initial-advertise-peer-urls https://$IP_ADDR:2380 --listen-peer-urls https://$IP_ADDR:2380 --initial-cluster-state existing --initial-cluster="etcd1=http://<IP of 1st node>:2380,etcd2=http://$IP_ADD:2380"
sudo etcd --name $CL_NAME --data-dir ~/data --advertise-client-urls=http://127.0.0.1:2379,https://$IP_ADDR:2379 --listen-client-urls=https://0.0.0.0:2379 --initial-advertise-peer-urls https://$IP_ADDR:2380 --listen-peer-urls https://$IP_ADDR:2380