【Redis主从架构】Redis replication详细流程及原理深度解析



一、Redis replication复制的完整流程

1 slave node启动之后,仅仅只会保存master node的信息,包括master node的host 和ip,但是复制流程还没有开始。
2 salve node 内部有个定时任务,每秒检查是否有master node要连接和复制,如果发现, slave node 就跟 master node 建立socket网络连接。
3 slave node 发送ping命令给master node。
4 口令认证,如果master 设置了 requiress,那么 salve node必须发送masterauth的口令过去进行认证。
5 slave node第一次连接到master,会执行全量复制,将所有数据发送给slave node
6 master node后续持续写命令,异步复制到slave node。
redis replication复制流程图

二、Redis的断点续传和无磁盘化复制,全量复制

1.断点续传

其实redis从2.8开始就支持主从复制的断点续传,即如果主从复制过程中,由于网络等原因断掉,那么可以接着上次复制的地方,继续复制下去。
而底层实现的机制就是通过在master 和slave中都保存的replica offset,offset是保存在backlog中的,如果master和slave网络连接断掉,slave会让master从上次的replica offset开始继续复制,但是如果没有找到offset,就会执行一次全量复制

1.1 offset

1)master和slave都会维护一个offset,两者都会在自身不断累加offset,
2)slave每秒都会上传offset给master,同时master也会保存每个slave的offset

1.2 backlog

master有一个backlog文件,默认是1mb,offset就是保存在backlog中的,backlog文件主要是用来做全量复制断开的增量复制

1.3 Master run idheartbeat

如果根据ip+host来定位master是不靠谱的,尤其当master重启或者数据发生变化的时候,那么slave应根据不同的run id区分,run id 不同就做全量复制

1.4 heartbeat

1)主从节点互相都会发送heartbeat信息
2)master 默认每隔10秒发送一次heartbeat,slave node每秒发送一个heartbeat。

2.无磁盘化复制

master在内存中直接创建rdb,然后发送给slave,不会再自己本地落地磁盘

3. 全量复制

1)master 执行 bgsave 命令,在本地生成一份rdb快照文件。
2)master node 将rdb快照文件发送到 salve node,如果rdb复制事件超过60s(repl-timeout),那么 slave node 就会认为复制失败,可以适当的调大这个参数。
3)对于千兆网卡的机器,一般一秒传输100MB文件,6G文件很可能超过60s秒,导致复制失败
4)master node 生成rdb时,会将所有新增的命令存储到内存中,在slave node 保存了rdb之后,再讲新的写命令复制给 slave node。
5)client-output-buffer-limit slave 256MB 64MB 60,如果在复制期间,新增的数据超过内存缓存区大小64MB,或者一次性到达256MB,那么停止复制,复制失败
6)如果slave node 开启了AOF,那么会立即执行BGRWRITEAOF,重新AOF。

4. 增量复制

1)如果复制过程中,master-slave网络连接中断,那么salve重新连接到master,是进行增量复制
2)master 直接从自己的backlog中获取部分丢失的数据,发送给slave node,默认backlog的大小是1MB
3) master 会根据salve发送的psync中的offset来从backlog中获取数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值