- 将新节点添加到副本集。
initiating a replica set
,即初始化一个副本集的时候。- 使用
rs.stepDown()
orrs.reconfig()
,和等方法执行副本集维护。 - 辅助成员失去与主服务器的连接超过配置的超时(默认为10秒)。
- 在选举成功完成之前,副本集无法处理写入操作。
- 如果此时查询配置为在辅助节点上运行,则副本集可以继续提供读取查询。
- 假设默认副本配置设置,群集选择新主要成员之前的中位时间通常不应超过12秒。这包括将主要成员标记为不可用并呼叫和完成选举所需的时间。可以通过修改
settings.electionTimeoutMillis
复制配置选项来调整此时间段。 - 网络延迟等因素可能会延长副本集选举完成所需的时间,从而影响集群在没有主节点的情况下运行的时间。这些因素取决于集群体系结构。
- 从MongoDB 3.6开始,MongoDB驱动程序可以检测主服务器的丢失并 retry certain write 自动重试某些写操作,从而提供额外的内置自动故障转移和选举处理。
- MongoDB 4.2兼容驱动程序默认启用可重试写入。
- MongoDB 4.0和3.6兼容驱动程序必须通过包含
retryWrites=true
在连接字符串中显式启用可重试写入。
-
协议:从 mongodb 4.0 开始。副本集配置仅仅支持
protocolVersion: 1
并且不再支持protocolVersion: 0
。该参数能减少副本集故障转移时间。 -
心跳:副本集成员每两秒发送一次心跳(ping)。如果心跳在10秒内没有返回,则其他成员将该成员标记为不可访问。
-
成员的优先级:在副本集具有稳定的主要副本之后,选举算法将进行“尽力而为”尝试以使具有最高优先级的次要呼叫选举。成员优先权影响选举的时间和结果;优先级较高的辅助成员选举比优先级较低的辅助成员要早一些,并且也更有可能获胜。但是,较低优先级的实例可以在短时间内被选为主要实例,即使可用的优先级较高的实例也是如此。副本集成员继续调用选举,直到可用的最高优先级成员成为主要成员。
-
优先级为
0
的成员不能成为主要成员,也不会寻求选举。 -
丢失数据中心 :使用分布式副本集,数据中心的丢失可能会影响其他数据中心或数据中心的其余成员选择主要成员的能力。
-
网络分区 :网络分区可以将主分区与具有少数节点的分区隔离。当主要成员只能检测到副本集中的少数节点时,主服务器将降级并成为辅助服务器。分区中可以与大多数节点(包括其自身)通信的成员进行选举以成为新的主节点。
-
非投票成员:虽然无表决权的成员不在选举中投票,但这些成员持有副本集数据的副本,并且可以接受来自客户端应用程序的读取操作。