面试题答案
一键面试网络延迟对成员健康状态判定的影响
- 心跳检测:MongoDB副本集成员通过定期发送心跳(默认2秒一次)来互相确认健康状态。网络延迟可能导致心跳包的发送和接收延迟,使得副本集其他成员在一段时间内收不到某成员的心跳。如果延迟时间超过配置的心跳超时时间(默认10秒),该成员会被判定为不可用。
- 选举影响:在进行选举新的主节点时,网络延迟可能影响投票信息的及时传递。如果部分成员因网络延迟未能及时收到投票请求或回复,可能导致选举过程受阻或结果不准确。例如,可能出现分裂的小集群各自进行选举,产生多个“主节点”的假象,破坏副本集的一致性。
网络分区时MongoDB的处理及维持正常运行方式
- 多数原则:MongoDB副本集遵循多数原则来维持正常运行。当出现网络分区,副本集会尝试根据多数成员所在的分区来确定主节点。只有包含多数成员(超过一半)的分区才能选出主节点并继续提供写操作服务。例如,一个5成员的副本集,至少3个成员在同一分区才能选出主节点。
- 隔离机制:处于少数成员分区的节点会自动降级为secondary状态(如果原来是primary),并且停止处理写操作。这些节点会不断尝试重新连接多数成员分区,一旦网络恢复,它们会与多数成员同步数据,重新融入副本集。
- 配置副本集仲裁节点:可以配置仲裁节点(Arbiter)来帮助解决网络分区问题。仲裁节点不存储数据,只参与选举投票。它的存在可以帮助确保在网络分区时更容易形成多数,从而稳定地选出主节点。例如,一个4成员的副本集(2个数据节点和2个仲裁节点),在网络分区时,只要有一个数据节点和一个仲裁节点在同一分区,就满足多数原则可以选出主节点。