Redis主从复制底层原理

发布时间:2024年01月15日

1.全量同步

在讲底层原理之前,我们先看下面的这张图

?我们先看第一阶段:

在搭建主从集群的时候,首先要认主人:

执行replicaof命令或者执行slaveof(slaveof ip port?)建立连接,连接一旦建立,slave就可以向master发请求数据同步,此时,我发送replid offset,master判断replid是否和我的id一直,如果不一致,那说明是第一次连接,我返回我的id和offset.slave保存版本信息。

再来看第二阶段:

这一阶段master要将所有的数据都发给slave,在redis中是有一种持久化机制将所有的数据保存到一个文件当中。那就是rdb.因此master执行bgsave生成RDB,然后发送到RDB文件。

第三阶段:

在生成RDB文件,发送RDB文件期间,可能仍然会有数据写入,这一部分操作的命令全部写入repl_backlog.第三阶段就是发送repl_baklog中的命令。slave执行接收到的命令。

2.增量同步

如果slave重启同步后,则执行增量同步,master会去repl_baklog中获取offset后的数据。但是这里会出现一个问题,那就是repl_baklog大小有上限,如果写满后会覆盖最早的数据,这时候如果执行增量复制会丢失数据,因此,这个时候就要进行全量复制。

主从同步的优化

在master中配置repl-diskless-sync yes启用无磁盘复制,避免全量同步时的磁盘IO。

文章来源:https://blog.csdn.net/liu_zhi_tao/article/details/135505725
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。