面试题答案
一键面试MongoDB副本集中的选举机制
- 基本原理:
- MongoDB副本集采用基于心跳检测的选举机制。副本集中每个成员通过心跳消息互相通信,监控彼此的状态。当主节点(Primary)出现故障时,副本集需要选举出一个新的主节点来继续处理写操作。
- 选举过程基于多数原则,即需要大多数成员(超过一半)认为某个节点适合成为主节点,该节点才能当选。
- 选举条件:
- 数据一致性:节点的数据必须是最新的,拥有最新的操作日志(oplog)。
- 节点状态:节点必须处于健康状态,能够正常响应心跳消息。
- 优先级:每个节点都有一个优先级(priority)配置参数,优先级高的节点在选举中有更大优势。
- 选举时间:节点需要在选举超时时间内获得足够的票数。如果在规定时间内没有选出主节点,会重新进行选举。
影响选举机制的配置参数及影响
- priority(优先级):
- 影响:优先级是一个0 - 1000之间的数字,默认值为1。优先级为0的节点永远不会成为主节点,只能作为被动副本。优先级越高,在选举时越容易被选为新的主节点。例如,在一个三节点副本集中,如果其中一个节点的优先级设置为2,另外两个为1,在主节点故障时,优先级为2的节点更有可能当选为新主节点。
- votes(票数):
- 影响:每个节点默认有一票。通过设置
votes
参数,可以调整节点在选举中的投票权重。比如,一个节点的votes
设置为0,它将不能参与选举投票,也不会被选举为主节点。这个参数对于一些特殊用途的节点(如只用于数据备份但不参与选举的节点)很有用。
- 影响:每个节点默认有一票。通过设置
- hidden(隐藏节点):
- 影响:如果一个节点被设置为
hidden: true
,它不会被客户端发现,也不会参与选举(优先级自动变为0)。隐藏节点主要用于一些后台任务,如数据备份、分析等,不影响正常的读写操作和选举过程。
- 影响:如果一个节点被设置为
- slaveDelay(延迟节点):
- 影响:设置
slaveDelay
参数后,该节点的数据会滞后于主节点一定时间(以秒为单位)。延迟节点不会参与选举,因为它的数据不是最新的。这在数据恢复场景中很有用,比如误删除数据时,可以从延迟节点恢复数据,而不会影响正常的选举和读写操作。
- 影响:设置