Redis复制的原理与优化

版权声明:本文为博主原创文章,转载请注明出处 https://blog.csdn.net/love905661433/article/details/82289883

Redis单机问题

  • 机器故障
  • 容量瓶颈
  • QPS瓶颈

主从复制作用

  • 数据副本
  • 扩展读性能(读写分离)

主从复制限制

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

主从复制配置

执行命令

主从复制 : 从节点执行slaveof ip port,会清除从节点数据

取消复制 : 从节点执行 slaveof no one,不会清除从节点数据

配置实现

slaveof ip port : 设置Redis为哪个节点的从节点

slave-read-only yes : 设置从节点只读

两种方式对比

方式 命令 配置
优点 无需重启 统一配置
缺点 不便于管理 需要重启

全量复制开销

  • bgsave时间
  • RDB文件网络传输时间
  • 从节点清空数据时间
  • 从节点加载RDB的时间
  • 可能的AOF重写时间

部分复制

  1. slave丢失链接
  2. master将之后数据写入复制积压缓冲区
  3. slave重新连接到master
  4. slave执行psync命令将自己的offset(偏移量)传给master
  5. master判断如果偏移量在缓冲区范围之内,则进行部分复制,否则进行全量复制
  6. 将master复制积压缓冲区数据复制到slave

部分复制

故障处理

slave故障

master故障

开发与运维中的问题

  • 读写分离 : 读流量分摊到从节点

    可能遇到问题 :

    1. 复制数据延迟
    2. 读到过期数据
    3. 从节点故障
  • 主从配置不一致

    1. 如maxmemory不一致 : 丢失数据
    2. 如数据结构优化参数(hash-max-ziplist-entries) : 内存不一致
  • 规避全量复制

    1. 第一次全量复制 :
      • 第一次不可避免
      • 小主节点,低峰执行
    2. 节点运行ID不匹配 :
      • 原因 : 主节点重启
      • 策略 : 故障转移(哨兵或集群等)
    3. 复制积压缓冲区不足
      • 网络中断,部分复制无法满足
      • 增大复制缓冲区配置rel_backlog_size,”网络”增强
  • 规避复制风暴

概念:

主节点重启导致多个从节点都要进行全量复制
  1. 单主节点复制风暴,如下图

    • 问题 : 主节点重启, 多从节点复制
    • 解决 : 更换复制拓扑

>    ![单主节点复制风暴](../../%E7%9F%A5%E8%AF%86%E7%A7%AF%E7%B4%AF/Redis/image/%E5%8D%95%E4%B8%BB%E8%8A%82%E7%82%B9%E5%A4%8D%E5%88%B6%E9%A3%8E%E6%9A%B4.jpg)

  1. 单机器复制风暴

    • 单一主机上部署大量master,机器宕机后,大量全量复制

    • 主节点分散多机器

>      ![单机器复制风暴](../../%E7%9F%A5%E8%AF%86%E7%A7%AF%E7%B4%AF/Redis/image/%E5%8D%95%E6%9C%BA%E5%99%A8%E5%A4%8D%E5%88%B6%E9%A3%8E%E6%9A%B4.jpg)

主从复制问题

  • 手动故障转移
  • 写能力和存储能力受限

猜你喜欢

转载自blog.csdn.net/love905661433/article/details/82289883