程序员小天地

redis的主从同步(一)2.8版本以前的方式

2021-06-07  本文已影响0人  小草莓子桑

最近我们的一个服务要解决一个主节点向从节点同步数据的问题,就来翻了翻书,研究了下redis是怎么实现主从同步的,来总结一下

今天先来说一下2.8版本之前是如何实现的

redis中,实现主从复制的方式主要有两种

1.配置文件中设置slaveof选项
配置文件地方
slaveof <masterip> <masterport>
2.从服务器上使用客户端发送slaveof命令
从服务上发送命令
slaveof masterip masterport

redis主从同步功能的原理

先说说同步(sync)操作

同步(sync)操作的流程
同步(sync)操作的流程

再说说命令传播(command propagate) 操作

借用书上图举个整体流程的例子
时间 主服务器 从服务器
T0 执行 SET K1 V1 命令
T1 执行 SET K2 V2 命令
T2 向主服务器发送slaveof命令
T3 1.主服务器接受到slaveof命令后 2.开始执行BGSAVE命令 3.在后台生成一个RDB文件,包含K1、K2 4.并使用一个缓冲区记录从开始执行的所有命令
T4 SET K3 V3,并把命令写入缓冲区
T5 SET K4 V4,并把命令写入缓冲区
T6 BGSAVE命令执行完毕,向从服务器发送RDB文件
T7 接收并载入主服务器发来的RDB文件, 获得K1、K2数据
T8 向从服务器发送缓冲区中的SET K3 V3、 SET K4 V4
T9 接收并执行主服务器发来的两个命令, 执行了SET K3 V3、SET K4 V4命令
T10 同步(sync操作完成),此时主服务器中有K1、K2、K3、K4 四个key 同步(sync操作完成),此时主服务器中有K1、 K2、K3、K4 四个key,数据库状态同步一致
T11 执行 SET K5 V5 命令,并且命令传播(command propagate) 把命令传递给从服务 执行主服务器传递过来的 SET K5 V5 命令
T12 执行 SET K6 V6 命令,并且命令传播 (command propagate) 把命令传递给从服务 执行主服务器传递过来的 SET K6 V6 命令
T13 主从服务器断开连接,并重连成功 主从服务器断开连接,并重连成功
T14 重新开始同步(sync)操作,重复上述流程

2.8版本之前主从同步的缺陷

今天讲了redis的主从同步中的2.8版本以前的方式,最后说了2.8版本以前的方式中的一些缺陷,下次再来讲讲2.8版本以后的方式,欢迎大家来交流,指出文中一些说错的地方,让我加深认识,愿大家没有bug,谢谢!

上一篇下一篇

猜你喜欢

热点阅读