Redis:复制

    Redis的主从数据是异步同步的,所以分布式的Redis系统并不满足一致性要求;但是当主节点中数据发生修改后,会不断的向从节点同步数据。即使网络断开了,从节点的数据出现不一致,但是当网络恢复后,从节点会继续同步数据,保证最终一致性。

1、同步的渠道

    Redis支持主从同步和从从同步。

2、同步的方式

2.1 增量同步

    主节点会将对自己的状态产生修改性影响的指令记录在本地buffer中,然后异步将buffer中的指令同步到从节点,从节点通过执行这些指令来达到和主节点一致的状态,同时还会向主节点反馈自己同步的进度。

    Buffer是通过定长的环形数组来实现的,如果数组满了,就会从头开始覆盖,以防止存储过多的指令,占据过多的内存。

    当然,这也会产生一些问题。如果网络状况不好,从节点无法短时间内和主节点进行同步,则当网络恢复时,主节点中一些没有同步的指令可能已经被覆盖掉了。这时只能使用快照同步。

2.2 快照同步

    快照同步的主要流程:

  1. 在主节点进行bgsave,将当前内存数据快照保持到磁盘中;
  2. 将快照文件传送到从节点;
  3. 从节点接受快照文件;
  4. 从节点清空全部数据,并全量加载主节点的快照文件;
  5. 从节点通知主节点继续进行增量同步。

    这时候还有一个问题:如果增量同步的缓冲区太小,可能会在快照同步期间,新的指令覆盖了主节点备份快照之后的指令,则在快照同步后从节点需要继续进行快照同步,就可能会陷入快照同步的循环。

3、同步复制

    Redis提供了wait命令,用于强制指定Redis进行同步的复制:

wait 1 1000

    wait包含两个参数:

  • 第一个参数:从节点的数量N,等待wait指令之前的所有写操作同步到N个从节点;
  • 最大等待时长,单位是毫秒。

    这时会产生一个问题:如果发生了网络分区,主节点所在分区的从节点数量小于第一个参数指定的数量,会导致wait指令长时间阻塞,Redis服务器在这段时间内丧失可用性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值