数据同步:主从库如何实现数据一致?

Redis的高可靠性通过主从复制实现,读写分离,主库执行写操作后异步同步给从库。首次复制为主从全量复制,后续通过增量复制保持同步。主从级联模式下,主库断连后,会保存操作记录,恢复时从缓存中发送未同步数据。若从库落后过多,可能导致数据不一致。
摘要由CSDN通过智能技术生成

Redis高可靠性

  • 数据尽量少丢失
  • 服务尽量少中断

Redis主从模式,读写分离

  • 读操作: 主库和从库都可以
  • 写操作:首先主库执行,然后主库将操作同步给读库
  • 通过 replicaof(Redis 5.0 之前使用 slaveof)命令形成主库和从库的关系 replicaof 主库ip 主库端口
  • 全量复制主从长链接增量复制
  • 全量复制时,基于硬盘复制,和socker复制(无盘复制)
  • Redis主从库的复制是异步的,主库收到命令操作后,在本地执行完成后,就会返回给客户端,并不会等到和从库同步完成后才返回给客户端,读数据容易造成主从不同步,数据一致性差的问题

主从复制第一次过程

  • 从库给主库发送psync命令,其中包含了主库的runID和复制的进度offset参数。由于第一次从库不知道主库的runID,于是这个参数设置为问号,offset为-1时,表示需要全量复制
  • 主库收到响应后,会发送FULLRESYNC响应给从库,带上主库自己的runID和主库目前的复制进度
  • 主库将所有数据同步给从库。从库收到数据后,在从库本地完成数据清空与主库发送的RDB文件中的数据加载
  • 从库同步过程中,主库的写操作会先记录到缓存replication buffer中。同步完成后,主库会把buffer中的写操作发送给从库
  • 后续数据通过主从之间长链接的形式进行传递,省去建立链接的开销
    在这里插入图片描述

主从级联模式

  • 主-从-从 也就是主库全量复制一次到一个从库,然后后续复制操作交由收到全量rdb的从库进行

主从网络断开怎么办

  • 主库在断开与从库的连接后,主库会继续写replication_buffer 也会写repl_backlog_buffer
  • repl_backlog_buffer 环形缓冲区,作用是用于记录主库操作的位置,从库会记录自己读到的位置,一般来说master >= slave
  • 增量复制,从库连接恢复后,会发送psync命令和自己的复制进度,然后主库在repl_backlog_buffer中找到从库发送的偏移量,然后将主库的位置与从库之间的数据发送给从库,数据记录在replication_buffer中
  • 因为是环形缓冲区,从库的读取速度如果比较慢,会被主库落下一圈,也就是说主库会覆盖从库还没有读到的数据,导致主从数据不一致
  • 主库会根据从库各自的复制进度,来决定这个从库可以进行增量复制,还是全量复制
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值