Redis数据同步

数据同步

完整同步

redis服务器接收到replicaof命令时,开始对另一个服务器进行复制的时候的执行流程:

  • 主服务执行BGSAVE命令,生成一个RDB文件,并使用缓冲区存储在BGSAVE命令之后执行的所有写命令。
  • 当RDB文件创建完毕,主服务器会通过套接字将RDB文件传送给从服务器。
  • 从服务器在接收完主服务器传送过来的RDB文件之后,就会载入这个RDB文件,从而获得主服务器在执行BGSAVE命令时的所有数据。
  • 当从服务器完成RDB文件载入操作时,并开始上线接收命令请求时,主服务器就会把之前存储在缓存区中的所有写命令发送给从服务器执行。

为了提高数据同步操作的执行效率,如果主服务器在接收到REPLICAOF命令之前已经完成了依次RDB创建操作,而且它的数据库在创建RDB文件没有发生任何变化,那么主服务器将直接从服务器发送已有的RDB文件。
如果主服务器创建RDB文件期间,有多个从服务器向主服务器发送数据同步请求,那么主服务器把发送请求的从服务器全部放入队列,等到RDB文件创建完毕之后,再把它发送给队列中的所有从服务器。 复用RDB文件。

在线更新

主从服务器在执行完整同步操作之后,它们的数据达到了一致状态。但当主服务器执行写命令之后,它的数据库就会被改变,这时主从服务器的数据一致性就会被改变。为了保持从服务和主服务器的数据一致性可以保持下去,Redis会对从服务器进行在线更新:

  • 每当主服务器执行完一个写命令之后,它会将相同的写命令或者具有相同效果的写命令发送给从服务器执行。
  • 从服务器只要接收并执行主服务器发来的写命令,就可以让自己的数据库与主服务器保持一致。

在线更新是异步的,并不能保证主从服务器时时刻刻是一致的状态,所以要求强一致性的程序可能需要直接读取主服务器而不是读取从服务器。
因为主服务器可能在执行完写命令并向从服务器发送相同写命令的过程中因故障而下线,所以从服务器可能会丢失主服务器已经执行的一部分写命令,导致从服务器与下线之前的主服务器数据库保持不一致的状态。
Redis的复制功能是无法杜绝不一致的。

部分同步

当因故障下线的从服务器重现上线时,通常两者的状态是不一致的,因此它们必须重新进行同步,让两者的数据库再次回到一致状态。

Redis2.8版本之前,重同步操作是通过进行完整同步实现的,但非常耗费资源且不是必要的。Redis2.8版本开始使用新的重同步功能去代替原来的重同步的功能:

  • 当一个Redis服务器成为另一个服务器的主服务器时,它会把每个被执行的写命令都记录到一个特定长度的先进先出队列中。
  • 当短线的从服务器尝试重新连接主服务器时,主服务器将检查从服务器短线期间,被执行的那些写命令是否仍然保存在队列里面。如果是,那么主服务器就会直接把从服务器缺失的那些写命令发送给从服务器执行,从而保持主从服务器数据一致,且不需要进行完整同步。
  • 如果从服务器缺失的那些命令已经不存在队列中,那么将进行完整同步。

这个队列体积越大,能够记录的写命令就越多。这个队列的体积通过repl-backlog-size来修改这个队列的大小。

无须硬盘的复制

主服务器在进行完整同步的时候,需要在本地创建RDB文件,然后通过套接字将这个RDB文件发送给从服务器。但是对于主服务器所在宿主机器硬盘负载很大,那么创建RDB文件会对主服务器的性能造成影响,导致复制进程变慢。

redis2.8.18版本开始引入无须硬盘的复制特性:启用这个特性的主服务器在接收到REPLICAOF命令时将不会在本地创建RDB文件,而是会派生出一个子进程,然后子进程通过套接字直接将RDB文件写入从服务器。

repl-diskless-sync <yes|no>

无须硬盘的复制特性只是避免在服务器上创建RDB文件,但仍然需要在从服务器上创建RDB文件。

降低数据不一致情况出现的概率

为了尽可能降低数据不一致出现的概率,Redis2.8版本开始引入两个以min-replicas开头的配置选项

min-replicas-max-lag <seconds>  从服务器最后一次成功通信的间隔
min-replicas-to-write <numbers> 从服务器的数量
# 配置从服务器是否可写
replica-read-only <yes|no>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值