副本集的每个成员都有一个状态。
数 | 名称 | 状态说明 |
---|---|---|
0 | STARTUP |
尚未成为任何集合的活跃成员。所有成员都以这种状态启动。在mongod 解析副本集的配置文件,而在
STARTUP 。 |
1个 | PRIMARY |
处于主要状态的成员 是唯一可以接受写操作的成员。有资格投票。 |
2 | SECONDARY |
处于次要状态的成员 正在复制数据存储。有资格投票。 |
3 | RECOVERING |
成员要么执行启动自检,要么从完成回滚或重新 同步过渡。有资格投票。 |
5 | STARTUP2 |
该成员已加入集合,并正在运行初始同步。有资格投票。 |
6 | UNKNOWN |
从集合的另一个成员看,该成员的状态尚不清楚。 |
7 | ARBITER |
仲裁人不复制数据,仅存在于选举中。有资格投票。 |
8 | DOWN |
从集合的另一个成员看,该成员是不可访问的。 |
9 | ROLLBACK |
该成员正在积极执行回滚。有资格投票。无法从该成员读取数据。 从4.2版开始,当成员进入 |
10 | REMOVED |
该成员曾经在副本集中,但随后被删除。 |
ARBITER
¶处于ARBITER
状态的成员不复制数据或接受写操作。他们有资格投票,仅在选举中打破平局。如果副本集ARBITER
的表决成员数将是偶数,并且副本集可能受困,则该副本集应仅在该状态中具有成员。任何副本集中最多只能配置一个仲裁器。有关使用仲裁器的注意事项,请参阅doc:/ core / replica-set-arbiter。
有关核心状态的更多信息,请参见副本集成员。
STARTUP
¶副本集的每个成员都以STARTUP
状态启动。mongod
然后加载该成员的副本集配置,并将该成员的状态转换为STARTUP2
。中的成员STARTUP
尚未获得任何投票集的公认成员资格,
因此没有资格投票。
STARTUP2
¶副本集的每个成员在加载完该成员的配置后STARTUP2
立即进入状态mongod
,这时它将成为副本集的活动成员并可以投票。然后,成员决定是否进行初始同步。如果成员开始初始同步,则该成员将一直保留STARTUP2
到复制所有数据并构建所有索引为止。之后,成员转换为
RECOVERING
。
RECOVERING
¶副本集的成员RECOVERING
尚未准备好接受读取时便进入状态。该RECOVERING
状态可以在正常操作期间发生,并不一定反映错误情况。RECOVERING
州议员有资格在选举中投票,但没有资格进入
PRIMARY
州。
在复制足够的数据以确保客户端读取的数据具有一致的视图之后,成员从过渡RECOVERING
到SECONDARY
。RECOVERING
和SECONDARY
状态之间的唯一区别是,RECOVERING
禁止客户端读取并SECONDARY
允许读取。
SECONDARY
状态不保证有关主数据的过时性。
由于过载,辅助副本可能远远落在副本集的其他成员之后,因此它可能需要与副本集中的其余成员重新同步。发生这种情况时,成员进入
RECOVERING
状态并需要手动干预。
处于任何错误状态的成员都无法投票。
[1] | 在某些情况下,副本集中的两个节点可能会短暂地认为它们是主要节点,但至多,其中一个节点将能够完成写操作而无需担心。可以完成
写入操作的节点是当前主节点,另一个节点是以前的主节点,由于网络分区,该主节点尚未意识到其降级。发生这种情况时,尽管已请求读取首选项,但连接到前主数据库的客户端可能仍会观察到过时的数据
,并且对前主数据库的新写入最终将回滚。{ w:
"majority" } { w: "majority" } primary |