"/>
侧边栏壁纸
博主头像
PySuper 博主等级

千里之行,始于足下

  • 累计撰写 218 篇文章
  • 累计创建 15 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

Redis 高可用 -- 主从复制(数据同步)

PySuper
2021-12-06 / 0 评论 / 0 点赞 / 15 阅读 / 0 字
温馨提示:
本文最后更新于2024-05-28,若内容或图片失效,请留言反馈。 所有牛逼的人都有一段苦逼的岁月。 但是你只要像SB一样去坚持,终将牛逼!!! ✊✊✊

一般来说,一个高可用的方案要满足以下三点要求:

  • 数据备份 (冗余) 数据冗余在不同的节点上,防止数据丢失
  • 故障自动切换 正在服务的节点故障时,可以自动地切换到备用节点
  • 在线扩容 (缩容) 即可以根据需要动态地增加、减少服务实例

配置

  • 从复制 master 节点不需要做任何配置
  • 只需要在 slave 的配置文件中加入(根据redis版本二选一):
    • slaveof masterip masterport
    • replicaof masterip masterport
  • 从节点启动时就会自动向主节点发起连接,完成主从同步的一系列过程

优点

  • 提供了基本的数据多节点备份功能,当主节点发生故障时,可以启用从节点继续提供服务
  • 支持主从同步从从同步两种,后者是 Redis 后续版本新增的功能,以减轻主节点的同步负担

缺点

  • 无法实现故障的自动切换
  • 主节点故障时,需要手动将程序 (客户端) 的配置从主节点切换为从节点,然后重启客户端程序
  • 受主节点瓶颈限制

原理

主从复制.png

1、slave 节点初次启动时主动向 master 发起 TCP 连接,并发起同步请求 (psync 命令)

2、master 接收连接 (可要求授权认证),并将 slave 的信息保存起来

3、master 节点收到同步请求,执行 BGSAVE 命令生成 rdb 文件,文件生成后发送给 slave

4、slave 收到后首先清除自己的旧数据,然后载入收到的 rdb 文件,slave 更新至 master 执行 bgsave 命令前的状态

5、master 将保存 rdb 文件期间收到的写命令发送给 slave,slave 更新至主节点的最新状态

6、此后 master 每有写命令,就会主动发送给 slave 节点

主从节点会分别维护一个复制偏移量 (复制的字节数)

当出现网络中断等情况时,重连后会从偏移量处开始进行部分复制,避免了全量复制的重型操作

同步

全量复制

开销

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

master节点

  • 发送第一个Pong回复
  • 接受同步命令,并创建/更新RDB文件,并发送
  • 接收slave完成更新的通知

slave节点

  • 连接master节点
  • 发送第一个ping命令,并完成接收
  • 发送PSYN命令
  • 接收并加载完整的ROB文件

增量复制

增量复制.png

master节点

  • 接收到一个缓存更新
    • 正常slave
      • 更新给slave
    • 重连slave
      • 发送pong回复
      • 接收slave的同步命令,确认进行增量更新
      • 环形内存中取的增量数据

正常的slave节点

  • 接收更新数据,并完成更新

重连的slave节点

  • 重连master节点
  • 发送ping命令,接收pong信息
  • 发送同步命令(PSYNC命令 + run_id + offset
  • 接收更新命令,并完成更新

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区