Cluster computing etcd群集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

嘿,由于某种原因,我有一个集群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
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

  • 登录到新服务器并在etcd进程正在运行时停止
    systemctl etcd2 stop

  • 从数据目录中删除数据
    rm-rf/var/etcd2/data
    在删除之前,将此数据备份到其他文件夹中的某个位置

  • 现在使用
    --initial cluster state existing
    参数启动集群,如果已经将服务器添加到现有集群中,则不要使用
    --initial cluster state new

  • 现在回到正在运行的一个etcd服务器,将这个新成员添加到集群
    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