etcd无主备概念,是基于raft的对等集群,leader故障后秒级自动选举新leader;需部署≥3个跨可用区节点、调优election-timeout(1000–2000ms)和heartbeat-interval(100–250ms)、启用tls与健康检查,并通过patroni等组件实现上层服务联动。

etcd 本身没有“主备节点”概念,它是多节点对等集群,通过 Raft 协议自动选举 Leader(主),其余为 Follower(从)。所谓“主备切换”,本质是 Leader 故障后,集群在秒级内完成新 Leader 选举——这是 etcd 内置能力,无需额外配置“主备角色”。可靠切换的关键,在于集群部署和参数调优。
确保集群拓扑合理
至少部署 3 个 etcd 节点(奇数),避免脑裂。节点应分布在不同物理机或可用区,网络延迟低、带宽稳定。例如:
- 节点 IP:192.168.182.146、192.168.182.147、192.168.182.148
- 每个节点均运行完整 etcd 实例,角色动态决定,不固化
- 禁用单点部署或 2 节点集群(无法容忍 1 节点故障)
关键参数调优保障快速选主
在 etcd 配置中重点调整以下两项(单位:毫秒):
- election-timeout:默认 1000,建议设为 1000–2000。值过小易误触发选举;过大则切换延迟高
-
heartbeat-interval:默认 100,建议设为 100–250。需满足
election-timeout > 2 × heartbeat-interval,否则可能选主失败
示例(YAML 配置片段):
election-timeout: 1500heartbeat-interval: 200
启用 TLS 与健康检查
生产环境必须开启双向 TLS 认证,防止非法节点加入。同时配置客户端健康探测:
- 使用
etcdctl endpoint health或 HTTP 接口https://IP:2379/health定期检测 - 将健康检查接入监控系统(如 Prometheus + Alertmanager),异常时及时告警
- 避免仅依赖 ping 或端口连通性判断节点状态
配合 Patroni 或 CM 等组件实现应用层感知
etcd 自身切换快,但上层服务(如 PostgreSQL、GaussDB)需感知并联动。常见做法:
- Patroni 通过监听 etcd 中的 leader 键变更,自动触发数据库主从切换
- GaussDB 的 CM 组件将 etcd 作为拓扑存储,故障时依据 DCF 协议自主重选 DN 主节点
- 应用连接应使用 VIP 或 DNS 名,由 keepalived 或 service mesh 自动绑定新 Leader 地址










