MST
星途 面试题库

面试题:Redis复制数据备份时处理网络中断的策略

当Redis主从复制过程中出现网络中断,从节点如何重新与主节点同步数据以确保数据备份的完整性?请详细说明涉及到的重连机制、部分重同步和全量重同步的场景及实现方式。
44.1万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试

重连机制

  1. 自动尝试重连:从节点在检测到与主节点的网络连接中断后,会按照一定的时间间隔自动尝试重新连接主节点。这个时间间隔通常会随着重连失败次数的增加而逐渐延长,以避免过于频繁地无效尝试。例如,初始重连间隔可能是1秒,每次失败后翻倍。
  2. 配置参数控制:在Redis配置文件中,可以通过 repl-timeout 等参数来设置连接超时时间,影响重连的行为。如果在指定时间内未能成功连接主节点,则判定此次重连失败。

部分重同步

  1. 场景:部分重同步适用于网络中断时间较短,主节点的数据变化量相对较小的情况。此时从节点可以只获取中断期间主节点新增的数据,而不需要进行全量的数据同步,从而减少带宽和时间消耗。
  2. 实现方式
    • 主节点维护复制偏移量:主节点会为每个从节点维护一个复制偏移量(replication offset),记录从节点当前复制数据的位置。同时主节点自身也有一个全局的复制偏移量,记录已处理的写命令的偏移量。
    • 从节点记录偏移量:从节点同样保存自己的复制偏移量。当网络中断恢复后,从节点向主节点发送 PSYNC 命令,并携带自己最后的复制偏移量。
    • 主节点判断:主节点收到 PSYNC 命令和偏移量后,会判断该偏移量是否在其复制积压缓冲区(replication backlog)内。如果在,主节点会将缓冲区中从该偏移量开始的增量数据发送给从节点,从节点接收并应用这些增量数据,完成部分重同步。

全量重同步

  1. 场景:当网络中断时间较长,主节点的数据变化量较大,或者从节点是初次连接主节点时,就需要进行全量重同步。
  2. 实现方式
    • 从节点发起请求:从节点向主节点发送 SYNC 命令(Redis 2.8 之前使用 SYNC,之后使用 PSYNC,如果主节点不支持部分重同步,也会以全量重同步方式响应)。
    • 主节点执行BGSAVE:主节点收到 SYNC 命令后,会执行 BGSAVE 命令,在后台生成RDB快照文件,同时将新收到的写命令缓存起来。
    • 发送RDB文件:RDB文件生成完成后,主节点将RDB文件发送给从节点,从节点接收到RDB文件后,会先清空自身的数据,然后加载RDB文件,将数据恢复到主节点生成RDB文件时的状态。
    • 发送缓存命令:主节点将缓存的写命令发送给从节点,从节点按顺序执行这些命令,从而使数据与主节点保持一致,完成全量重同步。