深入Redis(十七)主从同步

主从同步

很多企业都没有用到Redis集群,但至少都做了主从。

首先理解一下现代分布式系统的理论基石——CAP原理。

CAP原理

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

分布式系统的节点往往分布在不同机器上进行网络隔离,这意味着会有网络断开的风险,这种网络断开的场景也称“网络分区”。

当网络分区发生时,两个节点无法通信,数据的一致性将不能保证,除非牺牲可用性,也就是暂停分布式节点服务,在网络分区发生时,不再提供修改数据的功能直到网络恢复正常。

最终一致

Redis的主从数据是异步同步的,所以分布式的Redis系统并不满足一致性要求,Redis保证最终一致性,即从节点会努力追赶主节点,最终主从状态一致。

主从同步

Redis同步支持主从同步和从从同步,从从同步是为了减轻主库的同步负担而增加的功能,理解主从同步即可。

增量同步

Redis同步的是指令流,主节点会将修改数据的指令记录在本地内存buffer中,然后异步同步到从节点,从节点一边同步一边反馈同步偏移量。

Redis的复制内存buffer是一个定长的环形数组,如果数组内容满了就会从头开始覆盖。

如果因为网络状况不好,从节点短时间无法进行同步,那么在网络恢复后,主节点内存buffer中的指令可能被覆盖掉了,这时就要用到更复杂的同步机制——快照同步。

快照同步

快照同步是一个非常耗费资源的操作,其首先在主库上进行一次bgsave将当前内存的数据快照到磁盘文件中,然后将快照文件传送到从节点。

从节点加载快照后再执行增量同步,如果快照同步的时间过长或内存buffer太小,则会导致后续增量同步无法进行,然后再次发起快照同步,陷入死循环。

因此必须配置一个合适的内存buffer大小参数。

增加从节点

从节点刚加入到集群,必须进行一次快照同步,同步完成后再进行增量同步。

无盘复制

快照同步会对系统负载产生较大影响,特别是当系统正在进行AOF的fsync操作时发生快照,fsync会被推迟执行,这会影响主节点的服务效率。

无盘复制就是主服务器直接通过套接字将快照内容发送到从节点。

Wait指令

Redis的复制是异步执行的,wait指令可以让异步复制变成同步复制,确保系统的强一致性。

wait提供两个参数,第一个参数是从库的数量N,第二个参数是时间t,以毫秒为单位,表示等待wait指令之前的所有写操作同步到N个从库,最多等待时间t,如果t=0,表示无限等待从库同步完成,如果发生网络分区,wait会永远阻塞,整个Redis服务器将丧失可用性。

小结

主从同步是Redis分布式的基础,Redis的高可用离开了主从同步将无从进行。并且Redis的集群模式都依赖主从同步,如果只用来做缓存,就没必要主从同步,如果要求持久化,则必须认真对待。

猜你喜欢

转载自www.cnblogs.com/ikct2017/p/9503513.html
今日推荐