Redis主从复制细节

1.全量复制

  • master执行bgsave指令创建子进程在本地生成一个rdb快照文件
  • master将rdb快照文件发送到slave,如果slave复制rdb文件的时间超过了60s(repl-timeout),那么slave node就会认为复制失败,可以适当调节这个参数
  • master在生成rdb文件和将rbd文件复制给slave 的过程中,会将所有新的写命令缓存在内存中(/即缓存在内部的内存缓冲区中),当slave接收了rdb文件,保存rdb文件到磁盘,将数据加载到内存之后,master再将新的写命令复制给slave

***注意:如果在复制期间,缓存新的写命令时,内存缓冲区持续(60s之内)消耗超过64M或者一次性消耗超过256M,那么停止复制,复制失败

client-output-buffer-limit slave 256mb 64mb 60
  • slave 接收到rdb之后,先将rdb文件保存到磁盘上,保证数据持久化,然后清空自己的旧数据,在清空旧的数据之前会基于旧版本的数据对外提供服务,然后重新加载rdb文件到自己的内存中
  • 如果slave开启了aof,那么会执行bgrewriteaof,立即基于当前redis内存中的数据重写aof

2.增量复制

  • 如果全量复制过程中,master-slave网络连接断掉,那么slave重新连接master之后会触发增量复制:”psync runid offset”
  • master直接从自己的backlog(默认backlog是1MB)中获取部分丢失的数据,将这些数据发送给slave node
  • master就是根据slave发送的psync指令中的offset来从backlog中获取数据的

3.heartbeat(心跳包)

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

master默认每隔10秒发送一次heartbeat给slave,而slave 每隔1秒发送一个heartbeat给master

4.异步复制

  • master每次接收到写命令之后,先在内部/内存写入数据,然后将写命令异步发送给slave,确保master和slave数据一致
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值