笛里谁知壮士心,沙头空照征人骨。这篇文章主要讲述分布式|跟着“乐哉”学习redis系列教程-redis主从同步相关的知识,希望能为你提供帮助。
八、redis主从同步
CAP原理
最终一致
CAP原理就好比分布式领域的牛顿定律,他是分布式存储的理论基石。
C:Consistent,一致性
A:Availabilty,可用性
P:Partition tolerance,分区容错性
分布式系统的节点往往都是分布在不同的机器上,进行网络隔离的。这意味着必然有网络断开的风险,这个网络断开的名字叫网络分区。
在网络分区发生的时候,两个节点无法进行通信,我们对一个节点进行操作,将无法同步到另外的机器上,所以数据的一致性无法得到保证,除非我们牺牲可用性,在网络分区发生时,将不再提供对外的服务,直到网络恢复。
用一句话概括cap原理就是:当网络分区发生时,一致性和可用性难两全。
【分布式|跟着“乐哉”学习redis系列教程-redis主从同步】主从同步与从从同步
Redis的主从数据是异步同步的,所以分布式的Redis系统并不满足一致性要求,当客户端在redis的祝节点修改了数据后,立即返回,即使在主从断开,主节点依然可以对外提供服务。所以redis满足可用性。
Redis保持最终一致性,从节点在网络恢复后,努力追赶主节点,最终从节点和主节点状态保持一致,所以redis是保持最终一致性
增量同步
redis同步支持主从同步和从从同步,从从同步功能是redis后续版本增加的功能,以减轻主节点的同步负担。
快照同步
redis同步的是指令流,主节点会将那些对自己的状态产生修改的指令记录在本地的内存buffer中,然后异步将buffer中的指令同步到从节点,从节点一边同步,一边向主节点反馈自己同步到哪里了(偏移量)
因为buffer是有限的,所以redis不能将所有的节点保存在buffer中,redis复制的内存buffer是一个定长的环形数组,如果数组满了,会从头开始覆盖,这时候就需要进行快照同步了。
无盘复制
快照同步是一个非常消耗资源的操作,他首先需要在主节点上进行一次bgsave,将当前内存的数据全部快照到磁盘文件中,然后再将快照文件发送给从节点,从节点接收完毕,立即执行一次全量加载,加载之前需要将当前内存的数据清空,加载完毕后,再通知主节点进行增量同步。
如果在执行全量同步的时候,新增加的指令被覆盖了,有需要再次进行全量同步,若如此下去会造成死循环,所以需要设置一个合理的buffer大小参数。
wait指令
当进行快照复制的时候,会将内存中的内容保存到文件中,这将是一个非常耗时的IO操作,将会影响主节点的服务效率。
所以从2.8.18开始,redis支持无盘复制,主节点直接通过套接字将快照内容发送到从节点,从节点接收到内容后存到磁盘文件中,再进行一次性加载
redis的复制是异步进行的,wait指令可以让异步复制变成同步复制,确保系统的强一致性(不严格),wait指令是redis3.0版本以后才出现的
wait 1 0
参数解析:
第一个参数代表同步的从节点数量,第二个参数是等待的时间,以秒为单位;
等待wait之前的数据同步到n个节点,等待时间为n秒,如果第二个参数为0,则代表一直等待
推荐阅读
- 分布式|redis到底支不支持事务呢()
- Navicat Premium 16软件安装包和安装教程
- 小白快速入门|flutter-快速预览dart的基本语法(持续更新)
- 入门指南|redis-Sentinel(哨兵机制)你学废了么()
- CS5801HDMI TO eDP/DP转换芯片资料
- 分布式|redis持久化,面试必问!!!
- 路由基础学习笔记之OSPF认证
- 分享一个全网最全的订单库存扣减设计思路
- 分布式|redis实现集群的几种方式你都知道了么()