深入理解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来构建强大的应用程序和服务。

相关推荐
Tony Bai4 小时前
“我曾想付钱给 Google 去工作”—— Russ Cox 深度访谈:Go 的诞生、演进与未来
开发语言·后端·golang
Mr.Pascal4 小时前
Redis:主动更新,读时更新,定时任务。三种的优劣势对比
数据库·redis·缓存
serendipity_hky5 小时前
【SpringCloud | 第2篇】OpenFeign远程调用
java·后端·spring·spring cloud·openfeign
嘟嘟MD5 小时前
程序员副业 | 2025年11月复盘
后端·创业
SadSunset5 小时前
(15)抽象工厂模式(了解)
java·笔记·后端·spring·抽象工厂模式
汝生淮南吾在北5 小时前
SpringBoot+Vue养老院管理系统
vue.js·spring boot·后端·毕业设计·毕设
李慕婉学姐6 小时前
【开题答辩过程】以《基于springboot的地铁综合服务管理系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·spring boot·后端
期待のcode6 小时前
Springboot配置属性绑定
java·spring boot·后端
海上彼尚6 小时前
Go之路 - 6.go的指针
开发语言·后端·golang
gugugu.6 小时前
Redis 字符串类型完全指南:从原理到实战应用
数据库·redis·缓存