聊聊redis的主从复制吧
2021/6/19 2:26:51
本文主要是介绍聊聊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的主从复制吧的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-02Redis项目实战:新手入门教程
- 2024-10-22Redis入门教程:轻松掌握数据存储与操作
- 2024-10-22Redis缓存入门教程:快速掌握Redis缓存基础知识
- 2024-10-22Redis入门指南:轻松掌握Redis基础操作
- 2024-10-22Redis Quicklist 竟让内存占用狂降50%?
- 2024-10-17Redis学习:从入门到初级应用教程
- 2024-10-12Redis入门:新手必读教程
- 2024-09-26阿里云Redis项目实战:新手入门教程
- 2024-09-26阿里云Redis资料入门教程
- 2024-09-25阿里云Redis入门教程:快速掌握Redis的基本操作