1 写在前面

当我们使用不到Redis集群(主从分布式结构,如codis, Cluster等)的时候,如果使用Redis,为了保证Redis的高可用,Redis是一定需要做主备/主从的。

说明:主从的从,意思是仆从,负责一部分的工作,比如主读从写;而主备的备是不工作的,只有主节点故障了才启用备机。

这需要看Redis的具体使用途径,如果Redis只是用来做缓存,那就无需主备结构了,主节点挂掉了重启一下就行。但是如果Redis使用了持久化功能,就必须认真对待主备复制,它是系统数据安全的基础保障。

 

2 CAP原理

CAP原则,在一个分布式的系统中,一致性,可用性,分区容忍性最多只能同时实现两点,不可能三者兼顾。那么对于分布式系统,网络分布必然发生,所以一致性和可用性两难全。

  • C - Consistent ,一致性
  • A - Availability ,可用性
  • P - Partition tolerance ,分区容忍性

3 主从同步

3.1 最终一致

Redis 的主从数据是异步同步的,所以分布式的 Redis 系统并不满足「一致性」要求。当客户端在 Redis 的主节点修改了数据后,立即返回,即使在主从网络断开的情况下,主节点依旧可以正常对外提供修改服务,所以 Redis 满足「可用性」。

Redis 保证「最终一致性」,备节点会采用多种策略努力追赶上落后的数据,尽力保持和主节点一致。

Redis主从同步:

  1.   增量追赶,写指令流同步
  2.   增量太慢了,全量追赶,快照同步
  3.   无盘复制,生产快照是一个遍历的过程

3.2 增量同步

Redis 同步的是指令流,主节点会将那些对自己的状态产生修改性影响的指令记录在本地的内存 buffer 中,然后异步将 buffer 中的指令同步到从节点,从节点一边执行同步的指令流来达到和主节点一样的状态,一边向主节点反馈自己同步到哪里了 (偏移量)。

因为内存的 buffer 是有限的,所以 Redis 主库不能将所有的指令都记录在内存 buffer 中。Redis 的复制内存 buffer 是一个定长的环形数组,如果数组内容满了,就会从头开始覆盖前面的内容。

                                                        Redis 原理(二):Redis高可用——主从同步

如果因为网络状况不好,从节点在短时间内无法和主节点进行同步,那么当网络状况恢复时,Redis 的主节点中那些没有同步的指令在 buffer 中有可能已经被后续的指令覆盖掉了,从节点将无法直接通过指令流来进行同步,这个时候就需要用到更加复杂的同步机制 —— 快照同步。

3.3 快照同步

快照同步是一个非常耗费资源的操作,它首先需要在主库上进行一次 bgsave 将当前内存的数据全部快照到磁盘文件中,然后再将快照文件的内容全部传送到从节点。从节点将快照文件接受完毕后,立即执行一次全量加载,加载之前先要将当前内存的数据清空。加载完毕后通知主节点继续进行增量同步。

在整个快照同步进行的过程中,主节点的复制 buffer 还在不停的往前移动,如果快照同步的时间过长或者复制 buffer 太小,都会导致同步期间的增量指令在复制 buffer 中被覆盖,这样就会导致快照同步完成后无法进行增量复制,然后会再次发起快照同步,如此极有可能会陷入快照同步的死循环。

                                        Redis 原理(二):Redis高可用——主从同步

3.4 增加从节点

当从节点刚刚加入到集群时,它必须先要进行一次快照同步,同步完成后再继续进行增量同步。

3.5 无盘复制

快照同步是先将主节点的数据全部快照存储到磁盘文件中,有很重的IO操作,会影响主节点的服务效率。

所以从 Redis 2.8.18 版开始支持无盘复制。所谓无盘复制是指主服务器直接通过套接字将快照内容发送到从节点,生成快照是一个遍历的过程,主节点会一边遍历内存,一边将序列化的内容发送到从节点,从节点还是跟之前一样,先将接收到的内容存储到磁盘文件中,再进行一次性加载。

 

 

 

 

 

 

 

 

 

 

相关文章:

  • 2021-07-10
  • 2021-04-27
  • 2021-08-08
  • 2021-09-19
  • 2021-07-26
  • 2021-06-08
  • 2021-05-27
  • 2021-12-23
猜你喜欢
  • 2021-07-12
  • 2021-09-14
  • 2022-12-23
  • 2022-01-01
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案