【Redis主从架构】Redis replication完整流程和深入讲解

4. 【Redis主从架构】Redis replication完整流程和深入讲解

1. Replication完整复制流程

  1. slave node启动,仅仅保存 master node 的信息,包括 master node 的host和ip,但是复制流程还没有开始master host和ip从哪里来,redis.conf里面的slaveof配置的。

  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。

2. 数据同步相关的核心机制

第一次slave 连接 master 的时候,执行的全量复制,这个过程中一些细节的机制

  1. master 和 slave 都会维护一个offset

master 会在自身不断累积offset,slave也会在自身不断累加offset

slave 每秒都会上报自己的offset给master,同时master也会保存每个slave的offset,主要作用是:master和slave都要知道各自数据的offset,才能知道互相之间数据不一致的情况

  1. backlog

master node有一个backlog,默认大小是1M。

master node给salve复制数据的时候,会同步将数据写到backlog中

backlog主要是用来做全量复制中断时的增量复制

  1. master run id

  • master runid的作用

在这里插入图片描述

  • info server命令可以看到 master 的run id

如果根据host+ip命令定位master node,是不靠谱的,如果master node重启或者数据出现了变化,那么 slave node应该根据不同的run id的不同做全量复制

如果需要不更改run id重启redis,可以使用redis-cli debug reload命令。

  1. psync

slave 节点 使用 psync 命令从 master node进行复制,psync runid offset

master node 会根据自身的情况返回响应信息,可能是 fullresync runid offset 触发全量复制,可能是continue触发增量复制。

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。

rdb生成,rdb通过网络拷贝,slave旧数据的清理、slave aof rewrite,很好时间。

4. 增量复制

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

5. heartbeat

主从节点互相都会发送heartbeat信息

master 默认每隔10秒发送一次heartbeatslave node每秒发送一个heartbeat

6. 异步复制

master 介绍到写命令之后,现在内部写入数据,然后异步发送给slave node。

参考 石衫老师 《亿级流量教程》课程笔记

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值