如何运行多实例etcd?AWS上3实例etcd执行member list报超时错误
etcd集群启动失败问题排查结果
核心配置错误
你当前的启动参数存在两处关键配置矛盾:
--initial-advertise-peer-urls参数值错误:该参数是节点向集群其他节点通告的自身peer通信地址,你填的是http://localhost:2380,会导致其他节点收到通告后尝试连接自身的2380端口而不是目标etcd实例的端口,根本无法完成集群握手。- 对应匹配修正:你在
--initial-cluster中定义的节点地址是etcd1=http://etcd1:2380这类格式,所以--initial-advertise-peer-urls需要和这个地址保持一致,比如etcd1节点要填http://etcd1:2380,不能用localhost。 - 同理如果你的etcd需要被其他非本地客户端访问,
--listen-client-urls建议填http://0.0.0.0:2379或者对应节点的内网IP,不要只绑定127.0.0.1。
修正后的启动命令示例
实例1(etcd1)
etcd --data-dir=data.etcd --name etcd1 \ --initial-advertise-peer-urls http://etcd1:2380 --listen-peer-urls http://0.0.0.0:2380 \ --advertise-client-urls http://etcd1:2379 --listen-client-urls http://0.0.0.0:2379 \ --initial-cluster etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380 \ --initial-cluster-state new --initial-cluster-token token-01
实例2(etcd2)
etcd --data-dir=data.etcd --name etcd2 \ --initial-advertise-peer-urls http://etcd2:2380 --listen-peer-urls http://0.0.0.0:2380 \ --advertise-client-urls http://etcd2:2379 --listen-client-urls http://0.0.0.0:2379 \ --initial-cluster etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380 \ --initial-cluster-state new --initial-cluster-token token-01
实例3(etcd3)
etcd --data-dir=data.etcd --name etcd3 \ --initial-advertise-peer-urls http://etcd3:2380 --listen-peer-urls http://0.0.0.0:2380 \ --advertise-client-urls http://etcd3:2379 --listen-client-urls http://0.0.0.0:2379 \ --initial-cluster etcd1=http://etcd1:2380,etcd2=http://etcd2:2380,etcd3=http://etcd3:2380 \ --initial-cluster-state new --initial-cluster-token token-01
额外AWS环境检查项
- 三个EC2实例的安全组要放通2379、2380端口的入站规则,源地址可以设为三个实例所在的VPC内网段。
- 确保三个实例的
/etc/hosts里都配置了etcd1、etcd2、etcd3对应的内网IP解析,或者你用AWS内网DNS能正常解析这三个主机名。 - 重启etcd前要删除每个节点上原有
data.etcd目录,避免旧的集群数据影响新集群启动。
内容的提问来源于stack exchange,提问作者Ortiz
相关产品推荐
相关产品推荐

