Replica Set Member States
副本集节点状态
副本集的每个节点都有一个状态。
数字 | 姓名 | 状态说明 |
---|---|---|
0 | STARTUP |
还不是任何集合的活跃节点。所有节点都在这种状态下启动。在mongod 解析副本集配置文档时 STARTUP . |
1 | PRIMARY |
primary 是集群中唯一可以接受写操作的节点。有资格投票。 |
2 | SECONDARY |
state secondary节点是的作用复制数据存储。有资格投票。 |
3 | RECOVERING |
节点要么执行启动自检,要么从完成回滚或 重新同步过渡。无法从该节点读取数据。有资格投票。 |
5 | STARTUP2 |
该节点已加入集合并正在运行初始同步。有资格投票。(笔记:从 MongoDB 5.0 开始,如果节点是新添加到副本集的,则在初始同步过程中没有投票资格,也不能被选举。) |
6 | UNKNOWN |
从该集合的另一个节点看来,节点的状态尚不清楚。 |
7 | ARBITER |
仲裁节点不复制数据,只为参与选举而存在。有资格投票。 |
8 | DOWN |
从该集合的另一个节点看来,该节点是不可访问的。 |
9 | ROLLBACK |
该节点正在主动执行回滚。有资格投票。无法从该节点读取数据。从 4.2 版开始,MongoDB 会在成员进入时终止所有正在进行的用户操作ROLLBACK 状态。 |
10 | REMOVED |
该节点曾经在副本集中,但随后被删除。 |
状态
核心状态
PRIMARY
节点在
PRIMARY
状态接受写操作。副本集一次最多有一个主节点。一个SECONDARY
节点在选举后成为主节点。PRIMARY
有资格投票。SECONDARY
节点是
SECONDARY
state复制主节点oplog并可以配置为接受读取操作。从节点可参与投票, 也有可能成为主节点在主节点不可用到时候。ARBITER
节点在
ARBITER
状态不复制数据或接受写操作。他们有资格投票,并且存在只是为了在选举中打破平局。副本集应该只有一个成员ARBITER
说明该集合是否会有偶数的投票节点,并且可能会出现平局选举。任何副本集中最多只能配置一个仲裁器。有关使用仲裁器时的注意事项,请参阅 副本集仲裁器。
有关核心状态的更多信息,请参阅副本集成员。
其他状体
STARTUP
副本集的每个节点启动于
STARTUP
状态。然后mongod
加载该节点的副本集配置,并将成员的状态转换为STARTUP2
或者ARBITER
. 节点在STARTUP
没有资格投票,因为他们还不是任何副本集的公认节点。STARTUP2
副本集的每个数据承载节点进入
STARTUP2
,然后mongod
完成加载该节点的配置后,此时它成为副本集的活动节点并有资格投票。然后该节点决定是否进行初始同步。如果节点开始初始同步,该节点将保留在STARTUP2
直到复制完所有数据并建立所有索引。之后,节点过渡到RECOVERING
.,从 MongoDB 5.0 开始,如果节点是新添加到副本集的,则在初始同步过程中没有投票资格,也不能被选举。RECOVERING
副本集的节点进入
RECOVERING
状态还不能接受读取操作。RECOVERING
状态可以在正常操作期间出现,并不一定反映错误情况。节点在RECOVERING
状态有资格在选举中投票,但没有资格成为PRIMARY
。一个节点在复制足够的数据以保证客户端读取数据的一致视图之后从RECOVERING
至SECONDARY
。之间的唯一区别RECOVERING
和SECONDARY
状态是RECOVERING
禁止客户端读取和SECONDARY
允许他们读取。SECONDARY
状态不保证与主节点相关的数据的陈旧性。由于过载,从节点副本可能远远落后于副本集的其他节点,以至于它可能需要与副本集的其余部分重新同步。发生这种情况时,节点进入RECOVERING
状态,需要人工干预。ROLLBACK
每当副本集在选举中替换主节点时,旧的主节点可能包含未复制到从节点 的文档。在这种情况下,旧的主节点会恢复这些写入。在 回滚期间,节点将拥有
ROLLBACK
状态。节点在ROLLBACK
状态有资格在选举中投票。从 4.2 版开始,MongoDB 会在节点进入时终止所有正在进行的用户操作ROLLBACK
状态。
错误状态
处于任何错误状态的节点都不能投票。
UNKNOWN
从未将状态信息传递给副本集的节点在
UNKNOWN
状态。DOWN
失去与副本集连接的节点被视为
DOWN
,该集合的其余节点。REMOVED
从副本集中删除的节点进入
REMOVED
状态。当节点进入REMOVED
状态,日志将使用replSet REMOVED
消息条目标记此事件。
[ 1 ] | 在某些情况下,副本集中的两个节点可能会暂时认为它们是主节点,但至多,其中一个节点将能够完成具有{ w: "majority" } 写安全的写入。可以完成写入的节点 { w: "majority" } 是当前主节点,另一个节点是尚未识别其降级的前主节点,通常是由于网络分区。发生这种情况时,连接到前一个主节点的客户端可能会观察到过时的数据,尽管已经请求了读取偏好 primary ,并且对前一个主节点的新写入最终将回滚。 |
---|---|
原文链接 - https://docs.mongodb.com/manual/reference/replica-states/
译者:陆文龙