深入理解Redis主从架构

Redis主从架构概述

Redis主从架构是一种分布式数据库架构,它包括一个主节点(Master)和一个或多个从节点(Slave)。主节点处理所有写操作,从节点负责复制主节点的数据并处理读请求。以下是主从架构的核心组件:

主节点(Master):

  • 主节点是Redis集群的核心,负责处理所有写操作。
  • 客户端连接到主节点,并向其发送写请求。
  • 主节点将写操作同步到所有连接的从节点,以保持数据一致性。

从节点(Slave):

  • 从节点是主节点的复制品,其数据与主节点保持同步。
  • 从节点可以处理读操作,但不允许进行写操作(只读)。
  • 如果主节点不可用,可以将从节点提升为新的主节点。

主从同步步骤

具体步骤如下:

1、从节点根据自身状态,发送 psync命令给 master:

  • 如果从实例从未执行过 replicaof ,则从节点发送 psync ? -1,代表全量,从 -1 处开始复制。
  • 如果从节点之前执行过 replicaof,则取当前实例中记录下 runID和 offset,执行命令 psync <runID> <offset>, runID 是主节点 runID,offset 是复制偏移量。

2、主节点根据接收到的psync命令及当前服务器状态,决定执行全量复制还是部分复制:

  • 对比主、从节点的 runID 一致,且从节点发送 slave_repl_offset 之后的数据在 repl_backlog_buffer缓冲区中均存在(队列是环形的,有可能被擦除重写了),则回复 CONTINUE,代表以追加模式进行部分复制。

  • runID 与从节点发送的 runID 不同,或者从节点发送的 slave_repl_offset 之后的数据已不在主节点的 repl_backlog_buffer缓冲区中 (因为队列是环形的,所以等待时间太长或者有断连的情况,有可能被擦除重写了),则回复从节点 FULLRESYNC <runid> <offset>,表示要进行全量复制,同时记下主节点的 runID 和offset。日志如下:

repl_backlog_buffer:它是为了从库断开之后,如何找到主从差异数据而设计的环形缓冲区,从而避免全量复制带来的性能开销。如果从库断开时间太久,repl_backlog_buffer环形缓冲区被主库的写命令覆盖了,那么从库连上主库后只能乖乖地进行一次全量复制,所以repl_backlog_buffer配置尽量大一些,可以降低主从断开后全量复制的概率 。而在repl_backlog_buffer中找主从差异的数据后,如何发给从库呢?这就用到了replication buffer

replication buffer:Redis和客户端通信也好,和从库通信也好,Redis都需要给分配一个 内存buffer进行数据交互,客户端是一个client,从库也是一个client,我们每个client连上Redis后,Redis都会分配一个client buffer,所有数据交互都是通过这个buffer进行的:Redis先把数据写到这个buffer中,然后再把buffer中的数据发到client socket中再通过网络发送出去,这样就完成了数据交互。所以主从在增量同步时,从库作为一个client,也会分配一个buffer,只不过这个buffer专门用来传播用户的写命令到从库,保证主从数据一致,我们通常把它叫做replication buffer

repl_backlog_size环形缓冲区写满之后,从库是会丢失掉那部分被覆盖掉的数据,还是直接进行全量复制

  1. 一个从库如果和主库断连时间过长,造成它在主库repl_backlog_bufferslave_repl_offset位置上的数据已经被覆盖掉了,此时从库和主库间将进行全量复制。
  2. 每个从库会记录自己的slave_repl_offset,每个从库的复制进度也不一定相同。在和主库重连进行恢复时,从库会通过psync命令把自己记录的slave_repl_offset发给主库,主库会根据从库各自的复制进度,来决定这个从库可以进行增量复制,还是全量复制。

主从架构的优势

Redis主从架构具有多个关键优势:

  1. 高可用性:通过故障转移机制,Redis主从架构提供了高可用性。如果主节点出现故障,可以快速切换到一个从节点,几乎没有停机时间。

  2. 读写分离:Redis主从架构允许从节点处理读操作,从而减轻了主节点的读负载,提高了整体性能。

  3. 数据冗余:从节点是主节点的复制,提供了数据冗余。即使主节点出现问题,数据仍然可用。

  4. 灵活性:可以根据需要扩展从节点,以处理更多的读请求,从而提高系统的扩展性。

如何搭建Redis主从架构

本地搭建可以参考:使用Docker Compose搭建Redis主从复制环境

要搭建Redis主从架构,需要执行以下步骤:

  1. 安装和配置Redis :在主节点和从节点上安装Redis,并配置它们的redis.conf文件,确保允许数据复制。

  2. 启动主节点:首先启动主节点,确保其正常运行。

  3. 启动从节点:启动从节点,并在配置文件中指定主节点的IP地址和端口。这个跟MySQL很类似。

    bash 复制代码
    replicaof <masterip> <masterport>
  4. 数据同步 :从节点会自动连接到主节点并请求数据复制。可以使用INFO replication命令检查复制状态。

  5. 测试和监控:验证主从架构是否正常工作,监控主节点和从节点的性能和状态。

结论

Redis主从架构是一种强大的架构模式,可用于提高Redis数据库的可用性、性能和可扩展性。它通过将写操作集中在主节点上,同时允许多个从节点处理读操作,为应对高负载和故障提供了解决方案。通过了解Redis主从架构的工作原理和配置方法,可以更好地利用Redis来构建强大的应用程序和服务。

相关推荐
2401_857610031 小时前
SpringBoot社团管理:安全与维护
spring boot·后端·安全
凌冰_1 小时前
IDEA2023 SpringBoot整合MyBatis(三)
spring boot·后端·mybatis
码农飞飞1 小时前
深入理解Rust的模式匹配
开发语言·后端·rust·模式匹配·解构·结构体和枚举
一个小坑货2 小时前
Rust 的简介
开发语言·后端·rust
monkey_meng2 小时前
【遵守孤儿规则的External trait pattern】
开发语言·后端·rust
Estar.Lee2 小时前
时间操作[计算时间差]免费API接口教程
android·网络·后端·网络协议·tcp/ip
新知图书3 小时前
Rust编程与项目实战-模块std::thread(之一)
开发语言·后端·rust
盛夏绽放3 小时前
Node.js 和 Socket.IO 实现实时通信
前端·后端·websocket·node.js
Ares-Wang4 小时前
Asp.net Core Hosted Service(托管服务) Timer (定时任务)
后端·asp.net
fpcc4 小时前
redis6.0之后的多线程版本的问题
c++·redis