Redis部分同步和全同步
2021-08-22 本文已影响0人
lenny611
假设主机A,从机B,C,D,其中该系统已经上线有一部分时间了,B突然掉线,那么B再次恢复连上主机A之后,是要同步掉线之间恢复的数据,还是主机A上的全量数据呢?遗憾的是,Redis2.8之前只能按照主机A上的RDB文件全量恢复数据,即全同步。
具体同步过程如下:
1.从机向主机发送Sync请求同步;
2.主机将RDB文件发送给从机,并且将正在发生的写命令写到缓冲区发送给从机
3.从机利用主机的RDB文件进行全同步。
image.png
实际上,如果只是断线重连,发送RDB文件这一步是可以省略的。
SYNC命令:
1.主服务器需要执行BGSAVE
生成RDB文件,该操作会耗费CPU,IO和内存。
2.发送RDB文件给从机,耗费网络资源,影响主服务器的响应时间。
3.从服务器载入RDB文件陷入阻塞,无法处理命令请求。
所以在需要的时候才执行SYNC命令。
部分同步:通过PFYNC
命令实现,这样就避免了全同步,减少了开销,具体流程如下:
部分同步的实现:
1.主从机都维护一个复制偏移量,当偏移量不一致的时候,就是主从机状态不一致的时候,这时候只需要把相差的偏移量发送给从机同步即可。
2.主机会把写命令写入复制挤压缓冲区内,
image.png