面试题答案
一键面试副本集成员角色
- 主节点(Primary):
- 负责处理所有的写操作,客户端的写请求都发送到主节点。
- 主节点维护着 oplog(操作日志),记录所有对数据库的修改操作。
- 从节点(Secondary):
- 从主节点同步 oplog 中的数据,并应用这些操作来保持与主节点数据的一致性。
- 从节点可以处理读请求,分担主节点的读压力。
- 仲裁节点(Arbiter):
- 仲裁节点不存储数据,它的主要作用是参与选举过程,帮助决定哪个节点成为主节点。
- 仲裁节点仅在选举时投票,以确保副本集能够快速选出新的主节点。
数据同步方式
- 初始同步:
- 当一个新的从节点加入副本集时,它会执行初始同步。
- 从节点会选择一个同步源(通常是主节点),并请求同步数据。同步源会将整个数据库的数据文件发送给从节点,这个过程类似于全量备份恢复。
- 从节点接收数据后,会将其加载到自己的存储中。
- 持续同步(oplog 同步):
- 主节点在处理写操作时,会将这些操作记录到 oplog 中。
- 从节点定期轮询主节点的 oplog,获取新的操作记录。
- 从节点将获取到的 oplog 记录应用到自己的数据副本上,从而保持与主节点数据的一致性。这个过程是增量同步,只同步主节点新增的操作。
灾难恢复中的工作原理
- 主节点故障:
- 当主节点发生故障时,副本集进入选举阶段。
- 从节点和仲裁节点通过心跳机制检测到主节点失联,开始投票选举新的主节点。
- 具有最新数据且优先级较高的从节点(根据配置的优先级)有更大机会被选举为新的主节点。
- 选举完成后,新的主节点开始处理写请求,而其他从节点继续从新主节点同步 oplog 来保持数据一致。
- 从节点故障:
- 如果一个从节点发生故障,其他从节点和主节点仍然可以正常工作。
- 当故障的从节点恢复后,它会重新加入副本集,并从其他节点(通常是主节点或同步状态较好的从节点)执行初始同步或继续 oplog 同步,以重新与副本集保持数据一致。