聊聊redis的主从复制吧

Posted 魔法二少

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了聊聊redis的主从复制吧相关的知识,希望对你有一定的参考价值。

点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人。

文章不定期同步公众号,还有各种一线大厂面试原题、我的学习系列笔记。

  • 聊聊基础概念

主从复制与主从替换

主从复制不同于主从替换,主从复制是正常情况下主节点同步数据到从节点;主从替换是主节点挂了之后,把从节点替换为主节点

从节点配置主节点的信息

(1)临时配置:进入从节点的redis-cli执行【slaveof host port】,hosts是主节点的ip,port是主节点的端口号,结果总是返回ok

(2)永久配置:进入redis.conf,添加【slaveof host port】到文件中

runid和offset

runid:每个redis在启动或重启时都会生成一个唯一的runid;

offset:主从节点都有自己的主从复制偏移量,主节点复制数据到从节点时,从节点的偏移量的offset=原始offset+数据命令长度,同时从节点会把\'从offset\'发给主节点,所有主节点会同时保存\'主offset\'和\'从offset\',主节点可以通过判断\'主offset\'是否等于\'从offset\'来判断主从是否一致

backlog:是一个复制积压缓冲区,最大1M,主节点复制\'命令数据\'到从节点的时候,同时会把\'命令数据\'保存一份备份到backlog,在\'命令数据\'因网络问题丢失后,主节点仍可以从backlog中复制备份的数据到从节点

  • 主从复制的过程

全量复制:

(1) 一开始从节点执行slaveof命令,查找网络上的主节点,找到后发送ping给主节点,主节点返回pong,这样双方就建立了连接关系,建立了连接关系后就可以进行数据的复制了

(2) 从节点发送【psync ? -1】给主节点,\'?\'是因为从节点第一次不知道主节点的runid所以用?代替,-1表示从节点自己的偏移量(首次主从复制固定为-1)

(3) 主节点收到-1后知道这是第一次主从复制,返回【funllresync 主runid 主offset】给从节点,从节点收到后保存在自己的信息中

(4) 主节点发完fullresync命令后马上执行bgsave命令生成rdb文件,然后把rdb文件传送给从节点,同时这些\'命令数据\'备份一份到backlog缓冲区中;从节点收到rbd文件后将其保存到自己的数据库中

增量复制:

上面的(4)中,主节点在复制rdb文件给从节点时,若由于网络等问题导致全量复制过程中断时,可以采用增量复制来弥补,因为从节点从主节点处复制了一部分数据后有自己的offset,当网络恢复后,从节点发送【psync 主runid 从offset】给主节点,主节点收到后先判断该\'runid\'是否是自身,若是则再去backlog中判断\'从offset\'偏移量之后的\'命令数据是否存在,存在则先发送【continue 主runid 主offset】给从节点,发完continue命令后,主节点再将\'从offset\'偏移量之后的\'命令数据\'真正地发给从节点,至此主从复制恢复正常。

OK,如果文章哪里有错误或不足,欢迎各位留言。
创作不易,各位的「三连」是二少创作的最大动力!我们下期见!

以上是关于聊聊redis的主从复制吧的主要内容,如果未能解决你的问题,请参考以下文章

redis源码学习从源码角度看主从复制:前期提要

跟随杠精的视角一起来了解Redis的主从复制

亲自动手实践Redis主从复制Sentinel主从切换Cluster分片的操作,看完还学不会就安心当条咸鱼吧

redis简单了解一:(部署/主从复制)

聊聊Redis集群搭建及选举原理

详解Redis 主从复制及主从复制原理