Leader
集群的大小指集群节点的个数。
你可能会在很多文章中看到 etcd 推荐使用奇数作为集群节点个数。因为奇数个节点与和其配对的偶数个节点相比(比如 3 节点和 4 节点对比),容错能力相同,却可以少一个节点。但却没有人告诉你为什么会这样,今天我就给你们带来详细解读。
1. 选举方法
首先简单介绍一下 etcd 的选举方法:
followerheartbeatcandidateleaderleaderfollowercandidateheartbeatelection timeout
2. 集群大小与容错
0%
majority
majoritymajoritymajority> N/2
这里能选择偶数个节点吗? 最好不要这样。原因有二:
- 偶数个节点集群不可用风险更高,表现在选主过程中,有较大概率获得等额选票,从而触发下一轮选举。
- 偶数个节点集群在某些网络分割的场景下无法正常工作。试想,当网络分割发生后,将集群节点对半分割开。此时集群将无法工作。按照 raft 协议,此时集群写操作无法使得大多数节点同意,从而导致写失败,集群无法正常工作。
当网络分割后,etcd 集群如何处理的呢?
Leader
当网络分割恢复后,少数派的节点会接受集群 Leader 的日志,直到和其他节点状态一致。
所以综合考虑性能和容错能力,etcd 官方文档推荐的 etcd 集群大小是 3, 5, 7。至于到底选择 3,5 还是 7,根据需要的容错能力而定。
关于节点数和容错能力对应关系,如下表所示:
| 集群大小 | 最大容错 |
|---|---|
| 1 | 0 |
| 3 | 1 |
| 4 | 1 |
| 5 | 2 |
| 6 | 2 |
| 7 | 3 |
| 8 | 3 |
| 9 | 4 |