副本集成员状态
副本集的每个成员都有一个状态。
编号 | 名称 | 状态描述 |
---|---|---|
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 读取偏好,但旧主节点的新写入最终将回滚。 |