面试题答案
一键面试主节点(Primary)
- 角色:
- 主节点是副本集中唯一能够接受写操作的节点。所有的写请求,如插入、更新、删除等操作都在主节点上执行。
- 主节点维护着整个副本集的数据状态,当有写操作发生时,它会将操作记录在自己的 oplog(操作日志)中。
- 高可用性作用:
- 提供数据的写入服务,确保整个副本集能够正常处理业务的写需求。
- 主节点通过 oplog 将写操作同步给从节点,使得从节点能保持与主节点数据的一致性,从而维持整个副本集的数据完整性,保证高可用性。如果主节点出现故障,从节点需要重新选举产生新的主节点来继续提供写服务。
从节点(Secondary)
- 角色:
- 从节点通过复制主节点的 oplog 来同步数据,保持与主节点数据的一致性。
- 从节点可以接受读请求,分担主节点的读负载。这对于读多写少的应用场景非常有用,通过将读请求分配到从节点,可以提高系统的整体性能。
- 高可用性作用:
- 作为主节点的备份,当主节点发生故障时,从节点参与选举过程,有可能被选举为新的主节点,确保副本集能够继续提供读写服务,维持高可用性。
- 从节点的数据同步机制保证了即使主节点出现故障,数据也不会丢失,因为从节点上保存着主节点数据的副本,只要有足够多的从节点可用,就能够恢复数据状态。
仲裁节点(Arbiter)
- 角色:
- 仲裁节点不存储数据,它的主要作用是在副本集选举主节点的过程中参与投票。
- 仲裁节点的存在是为了帮助确定在选举过程中哪个从节点应该成为新的主节点。它在副本集中只起到投票的作用,不参与数据的复制和同步。
- 高可用性作用:
- 仲裁节点的存在可以影响选举结果,避免在选举过程中出现脑裂(split - brain)问题。例如,在一个三节点的副本集中,如果没有仲裁节点,当两个节点出现网络分区时,可能会各自认为自己是主节点,导致数据不一致。而仲裁节点可以打破这种僵局,通过投票确定唯一的主节点,确保副本集的高可用性。它使得副本集在选举主节点时能够更快速、准确地达成一致,减少选举过程中的不确定性,保障系统稳定运行。