面试题答案
一键面试Replica Set主要功能
- 数据冗余:将数据复制到多个节点,确保数据的安全性和持久性。即使某个节点出现故障,数据依然可以从其他节点获取。
- 读负载均衡:除了主节点(Primary)用于处理写操作外,从节点(Secondary)可以分担读操作的负载,提高系统整体的读取性能。
保证数据高可用性和一致性的方式
- 数据复制:主节点上的数据变更会通过oplog(操作日志)记录,然后异步地将这些操作应用到从节点上,保持各个节点数据的一致性。
- 故障检测与自动故障转移:集群中的节点通过心跳机制(使用ping命令)相互监控。如果一个节点在指定时间内没有收到来自其他节点的心跳,就会认为该节点出现故障。当主节点故障时,从节点会发起选举,选出新的主节点,保证服务的连续性,从而实现高可用性。
- 写操作确认:MongoDB支持不同级别的写操作确认(write concern)。例如,设置
w:majority
表示写操作需要等待大多数节点(超过一半的节点)确认写入成功,才认为本次写操作成功,确保数据的一致性。
选举机制运作
- 选举触发条件:当主节点与集群失联(通过心跳检测),或者主节点主动放弃主节点身份(例如网络分区恢复后,原主节点发现自己不再是大多数节点中的一员)时,会触发选举。
- 选举参与者:只有具备选举权(voting member)的节点才能参与选举。节点的选举权可以通过配置文件或管理命令进行设置,默认情况下,所有节点都有选举权。
- 选举流程:
- 每个具备选举权的从节点会给自己投一票,并向其他具备选举权的节点发送选举请求(包含自己的选举纪元、日志时间戳等信息)。
- 收到选举请求的节点会根据一定的规则来决定是否投票。这些规则包括:请求节点的日志是否是最新的(通过比较oplog的时间戳),请求节点的优先级(priority,可在配置中设置,优先级高的节点更容易被选为新主节点,优先级范围为0 - 1000,0表示该节点不能成为主节点)等。
- 如果一个节点获得大多数具备选举权节点的投票(超过一半),则该节点赢得选举,成为新的主节点。然后新主节点会通知其他节点更新状态,集群恢复正常运行。