集群
主从同步
防止主节点宕机,影响业务的持续服务,节省数据恢复的时间。
CAP 原理
C : Consistent 一致性
A : Availability 可用性
P : Partition tolerance ,分区容忍性
网络分区:分布式系统的节点分布在不同机器上隔离开有网络断开的风险叫网络分区,数据的一致性:对一个节点进行修改的操作无法同步到另一个节点。
可用性:可以牺牲可用性,发生网络分区时,展示停止分布式节点服务,不提供数据修改,只到网络正常再开启服务。
在网络发生分区时无发保证网络一致性和可用性。
最终一致
Redis系统不满足一致性要求,因为主从数据是异步同步的。
Redis满足可用性,主从网络断开时,主节点仍然可以正常对外提供修改服务。
Redis满足最终一致性,当网络恢复时,从节点会努力追赶与主节点保持一致。
主从同步与从从同步
从从同步与主从同步差不多。
增量同步
主节点会对修改性影响的指令记录在本地的内存 buffer 中,把buffer中的指令异步同步到从节点,从节点执行同步的指令流并向主节点反馈自己偏移量。
Redis 的复制内存 buffer 是一个定长的环形数组,如果数组内容满了, 就会从头开始覆盖前面的内容。如果网络不好,从节点短时间内暂停与主节点进行同步,当网络恢复,
buffer 中有可能已经被后续的指令覆盖掉,从节点无法直接指令流来进行同步 ,需要用快照同步。
快照同步
耗费资源的操作,在主节点上进行一次 bgsave ,将数据全部快照到磁盘,再传送给从节点,从节点立即执行一次全量加载, 加载之前把当前内存的数据清空,之后通知主节点继续进行增量同步。
快照同步的时间过长或者复制 buffer 太小,都会导致同步期间的增量指令在复制 buffer 中被覆盖,这样就会导致快照同步完成后无法进行增量复制,会再次发起,陷入死循环。
增加从节点:从节点刚加入到集群时,必须先进行一次快照同步,同步完成后再继续进行增量同步。
无盘复制
主服务器通过套接字将快照内容发送到从节点,主节点一边遍历内存并将序列化的内容发送到从节点,从节点将接收到的内容存储到磁盘文件中,再进行一次性加载。
wait 指令:让异步复制变身同步复制,确保系统的强一致性。
wait N t
从节点的数量N ,第二个参数是时间t
wait 指令之前的所有写操作同步到 N个从节点,最多等待t秒。 t= 0表示无限等待直至N 个从节点同步完成;如果出现了网络分区,,wait 指令会永远阻塞.