首页 > 编程知识 正文

redis主从复制原理详解,redis主从数据一致性

时间:2023-05-06 10:27:20 阅读:147463 作者:4257

运行slaveof命令或设置slaveof选项,以便一个服务可以复制来自另一个服务的数据。 主数据库可以读/写,并且在写入操作更改数据时,会自动将数据同步到辅助数据库。 它是从数据库中只读的,并且从主数据库接收同步的数据。 一个主数据库可以有多个从数据库,一个从数据库只能有一个主数据库。

全量复制:

1 .主节点在bgsave命令fork子进程中进行RDB持久化。 这个过程非常消耗CPU、存储器(页面复制)、硬盘IO。

2 .主节点通过网络向从节点发送RDB文件会给主节点的宽带带来很大的消耗。

3 .清空节点上的旧数据并加载新RDB文件的过程被阻止,无法响应客户端指令; 从节点运行bgrewriteaof会产生额外的消耗。

部分复制:

1 .复制偏移:执行复制的两个主从节点各自保存一个复制偏移偏移

2 .复制回缓冲区:主节点内部维护了固定长度的FIFO队列作为复制回缓冲区和缓冲区。 如果主从节点的offset之差超过缓冲区长度,则无法执行部分复制,只能执行全部容量复制。

3 .服务器的执行ID(runID ) :每个Redis节点都有其执行ID。 运行ID在启动时由节点自动生成,主节点将自己的运行ID发送到从节点,从节点保存主节点的运行ID。 当节点Redis断开重新连接时,根据执行ID确定同步的进度:

)1)如果存储在从节点上的runid与主节点的当前runid相同,则表示主节点以前已同步,主节点将尝试继续使用部分复制(是否可以复制)

)如果从节点拥有的runid不同于主节点的当前runid,则表示从节点在断开连接之前同步的Redis节点只能进行完整量的复制,而不是当前主节点。

工艺原理图:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。