主从复制:

  • 一个 master 可以有多个 slave
  • 一个 slave 只能有一个 master
  • 数据流向是单项的,master 到 slave

主从复制的配置方式:
1、slaveof 命令:异步执行

  • 开始主从复制:slaveof host port,使用该命令会清空redis之前存在的数据并从master做一次全量复制
  • 取消复制:slaveof no one

image.png

2、配置:

  1. slaveof ip port
  2. slave-read-only yes

全量复制与部分复制

全量复制过程:
image.png
全量复制开销:

  • bgsave 时间
  • rdb 文件传输时间
  • slave 节点清空数据时间
  • slave 节点加载 rdb 文件的时间
  • 可能的 aof 重写时间

部分复制的过程:
image.png

开发与运维中可能出现的问题

开发与运维中可能出现的问题:

  • 读写分离
  • 主从配置不一致
  • 规避全量复制
  • 规避复制风暴

1、读写分离:读流量分摊到从节点
image.png
可能遇到的问题:

  • 复制数据延迟
  • 读到过期数据
  • 从节点故障

2、配置不一致

  • 如 maxmemory 不一致:可能导致数据丢失
  • 数据结构优化参数(如 hash-max-ziplist-entries ):内存不一致

3、规避全量复制

全量复制出现的时机:

  • 第一次全量复制:第一次的全量复制不可避免,尽量选取流量低峰期进行复制
  • 节点 ID 不一致:
    • 比如主节点重启(运行 ID 发生变化)
    • 故障转移:例如哨兵或集群
  • 复制积压缓冲区不足
    • 网络中断,部分复制无法满足
    • 增大复制缓冲区配置 rel_backlog_size,网络“增强”

4、规避复制风暴

  • 单主节点复制风暴
    • 发生原因:主节点重启,多从节点复制
    • 解决:更换复制拓扑

image.png

  • 单机器复制风暴:
    • 如下图,机器宕机后,大量全量复制
    • 解决:主节点分散多机器

image.png