面试题答案
一键面试主从复制基本流程
- 建立连接:从节点向主节点发送
SYNC
命令(Redis 2.8 之前)或PSYNC
命令(Redis 2.8 及之后),请求进行数据同步。主节点接收到命令后,会为从节点建立一个数据同步的连接。 - 全量同步(初次同步或部分场景下)
- 主节点执行 BGSAVE:主节点收到同步请求后,执行
BGSAVE
命令,将当前数据库的数据生成 RDB 文件,并在内存中记录此后执行的写命令。 - 发送 RDB 文件:主节点将生成的 RDB 文件发送给从节点,从节点接收到 RDB 文件后,会先清空自己的数据,然后加载 RDB 文件中的数据。
- 发送写命令:主节点将记录在内存中的写命令发送给从节点,从节点执行这些命令,使自己的数据状态与主节点保持一致。
- 主节点执行 BGSAVE:主节点收到同步请求后,执行
- 增量同步(一般在网络中断恢复等场景):在 Redis 2.8 及之后,从节点和主节点使用
PSYNC
命令进行同步。如果从节点在断开连接后重新连接主节点,主节点能够识别从节点之前同步的进度,只将断开连接期间主节点执行的写命令发送给从节点,从节点执行这些命令来完成数据同步。
数据同步方式
- 全量同步:适用于初次连接或主节点无法识别从节点同步进度的情况,通过传输完整的 RDB 文件来同步数据。
- 增量同步:当主节点能够识别从节点的同步进度时,只传输断开连接期间产生的写命令,减少数据传输量。
主从节点角色职责
- 主节点职责
- 处理客户端的写请求,并将写操作记录在内存缓冲区。
- 生成 RDB 文件,并将其发送给从节点。
- 向从节点发送记录的写命令,确保从节点数据与自身一致。
- 从节点职责
- 向主节点发送同步请求,建立数据同步连接。
- 接收主节点发送的 RDB 文件并加载数据。
- 接收并执行主节点发送的写命令,保持与主节点数据同步。
复制过程中可能出现的数据不一致问题及应对措施
- 问题
- 网络延迟或中断:可能导致主从节点之间的数据同步延迟,从节点的数据可能滞后于主节点。
- 主节点故障恢复:在主节点故障恢复后,可能会出现数据丢失或不一致的情况。
- 应对措施
- 监控与报警:通过监控工具实时监测主从节点的同步状态和延迟情况,设置合理的阈值,当出现异常时及时报警。
- 自动故障转移:使用 Redis Sentinel 或 Redis Cluster 等机制,实现主节点故障时的自动故障转移,选举新的主节点,并重新同步数据。
- 数据补偿:可以通过定期的数据比对和修复机制,如在从节点定期与主节点进行数据校验,发现不一致时,重新进行全量或增量同步。