在本页面
复制集使用选举来确定哪个集合成员将成为主要成员。副本集可以触发选举,以响应各种事件,例如:
initiating a replica set
,rs.stepDown()
或方法执行副本集维护rs.reconfig()
,以及timeout
(默认10秒)。在下图中,主节点不可用的时间超过,
并触发了自动故障转移
过程。其余的辅助服务器之一要求选择新的主服务器并自动恢复正常操作。configured timeout
副本集无法处理写入操作,直到选举成功完成。如果将副本集配置为在辅助副本上运行,则副本集可以继续为其提供服务 。
假设为default,则集群选择新的主节点之前的中值时间通常不应超过12秒。这包括将主要节点标记为不可用并致电并完成选举所需的时间。您可以通过修改复制配置选项来调整此时间段
。网络延迟之类的因素可能会延长完成副本集选举所需的时间,进而影响您的群集在没有主数据库的情况下可以运行的时间。这些因素取决于您的特定群集体系结构。replica
configuration settings
settings.electionTimeoutMillis
您的应用程序连接逻辑应包括对自动故障转移和后续选举的容忍度。从MongoDB 3.6开始,MongoDB驱动程序可以检测到主数据库的丢失,并可以一次自动 重试某些写入操作,从而提供了自动故障转移和选择的其他内置处理:
retryWrites=true
在连接字符串中包含来显式启用可重试的写入。在版本4.0中进行了更改: MongoDB 4.0删除了不赞成使用的复制协议版本0。
复制减少了副本集故障转移时间,并加快了对多个同时存在的主数据库的检测。protocolVersion: 1
使用protocolVersion 1,您可以
catchUpTimeoutMillis
用来在更快的故障转移和w:1
写入保留之间确定优先级。
有关的详细信息pv1
,请参阅
副本集协议版本。
副本集成员每两秒钟发送一次彼此的心跳(ping)。如果心跳在10秒钟内未恢复,则其他成员会将无法访问的成员标记为无法访问。
副本集具有稳定的主副本后,选举算法将“尽力而为”尝试使具有最高priority
可用呼叫的辅助副本
进行选举。成员的优先权会影响选举的时间和结果;具有较高优先级的中学的选举时间比具有较低优先级的中学的选举时间要早,而且更有可能获胜。但是,即使有更高优先级的次要实例,也可以在短时间内将较低优先级的实例选为主要实例。副本集成员继续进行选举,直到具有最高优先级的成员成为主要成员为止。
优先值为的成员0
不能成为主要成员,也不能寻求选举。有关详细信息,请参阅
优先级0副本集成员。
使用分布式副本集时,数据中心的丢失可能会影响其他一个或多个数据中心中其余成员选举主数据库的能力。
如果可能,请在数据中心之间分布副本集成员,以最大程度地确保即使丢失数据中心,其余副本集成员之一也可以成为新的主要成员的可能性。
也可以看看
副本集成员配置设置members[n].votes
和成员state
确定成员是否在选举中投票。
members[n].votes
选举中所有设置等于1票的副本集成员。要在选举中排除成员投票,请将成员members[n].votes
配置的值更改
为0
。
只有以下州的有投票权的成员才有资格投票:
尽管非投票成员不会在选举中投票,但是这些成员持有副本集数据的副本,并且可以接受来自客户端应用程序的读取操作。
由于副本集最多可包含,但只有非投票成员才能使副本集具有七个以上的成员。50 members
7 voting
members
非投票成员必须priority
为0。
例如,下面的九个成员副本集具有七个投票成员和两个非投票成员。
重要
不要不改变票对控制其成员将成为主要的数量。而是,修改
members[n].priority
选项。仅
在特殊情况下更改投票数。例如,允许超过七个成员。
要配置非投票成员,请参阅 配置非投票副本集成员。