副本集成员状态
副本集的每个成员都有一个状态。
编号 | 名称 | 状态描述 |
|---|---|---|
0 | ||
1 | 处于主状态的成员是唯一可以接受写操作的成员。有投票资格。 | |
2 | 处于次要状态的成员正在复制数据存储。有投票资格。 | |
3 | ||
5 | 成员正在运行初始同步。有投票资格,除非是新添加到副本集的。 | |
6 | 从集合的另一个成员的角度看,成员的状态尚不清楚。 | |
7 | 仲裁者不复制数据,仅存在以参与选举。有投票资格。 | |
8 | 从集合的另一个成员的角度看,成员不可达。 | |
9 | ||
10 | 此成员曾经是副本集的一部分,但后来被移除。 |
状态
核心状态
PRIMARY处于
PRIMARY状态的成员接受写操作。一个副本集在同一时间最多只有一个主节点。[1] 一个SECONDARY成员在 选举 后成为主节点。处于PRIMARY状态的成员有投票资格。
SECONDARY处于
SECONDARY状态的成员复制主节点的数据集,并且可以配置为接受读操作。第二级成员有资格参加选举,并且如果主节点不可用,可能被选为主节点。
仲裁者处于
仲裁者状态的成员不复制数据或不接受写操作。它们有投票资格,仅存在于选举中打破僵局。只有在该集合原本有偶数个投票成员且可能遭受平局选举的情况下,副本集才应有一个处于仲裁者状态的成员。在任何副本集中,最多只能配置一个仲裁者。关于使用仲裁者的考虑因素,请参阅副本集仲裁者。
有关核心状态的更多信息,请参阅副本集成员。
其他状态
启动2已更改在版本中5.0.
每个承载数据的副本集成员在
启动2状态中,一旦mongod加载了该成员的配置。成员随后决定是否进行初始同步。如果成员开始初始同步,则该成员将保持
启动2状态,直到所有数据都已复制并且所有索引都已构建。之后,该成员的状态将转换为恢复中。在
STARTUP2阶段新添加的成员无权投票,并且在初始同步过程中不能被选举。在MongoDB 5.0之前,STARTUP2阶段的成员有权投票。
RECOVERING当副本集成员尚未准备好接受读取时,它会进入
RECOVERING状态。在正常操作过程中可能会出现RECOVERING状态,但这并不一定表示存在错误条件。处于RECOVERING状态的成员有资格参加选举,但不能进入PRIMARY状态。成员在复制足够的数据以确保客户端读取数据的一致性视图后,从
RECOVERING状态过渡到SECONDARY状态。RECOVERING状态和SECONDARY状态之间的唯一区别是,RECOVERING状态禁止客户端读取,而SECONDARY状态允许它们。SECONDARY状态并不保证与主节点的数据陈旧性。由于过载,一个次要成员可能落后于副本集的其他成员,以至于可能需要与集的其他部分同步。在这种情况下,该成员将进入
RECOVERING状态并需要手动干预。
错误状态
处于任何错误状态的成员不能投票。
UNKNOWN从未向副本集发送状态信息的成员处于
UNKNOWN状态。
DOWN失去与副本集连接的成员被视为副本集中剩余成员的
DOWN。
| [1] | 在某些情况下,副本集中的两个节点可能会 暂时性 认为自己是主节点,但最多只有一个节点能够使用 { w: "majority" } 写关注来完成写入。能够完成 { w: "majority" } 写入的节点是当前主节点,另一个节点是尚未承认其降级的旧主节点,通常是由于 网络分区。在这种情况下,连接到旧主节点的客户端可能会观察到过时数据,尽管它们请求了 primary 读取偏好,但旧主节点的新写入最终将回滚。 |