当前位置: 首页 > news >正文

Redis主从复制原理

一、Redis主从复制概述

Redis主从复制(Master-Slave Replication)是Redis实现高可用性和读写分离的基础架构。通过主从复制,数据可以从一个Redis服务器(主节点)复制到一个或多个Redis服务器(从节点),从而实现数据的冗余备份、读写分离和故障恢复。

主从复制的主要优势包括:

  • 数据冗余:实现数据的热备份,是持久化之外的一种数据冗余方式

  • 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复

  • 读写分离:主节点提供写服务,从节点提供读服务,分担服务器负载

  • 高可用基石:主从复制是哨兵和集群能够实施的基础

二、主从同步核心原理

2.1 同步过程概述

Redis主从同步主要分为两个阶段:

  1. 全量同步(Full Resynchronization):从节点初次连接主节点时进行完整数据同步

  2. 增量同步(Partial Resynchronization):主节点将写命令持续发送给从节点

2.2 全量同步流程

  1. 建立连接:从节点连接主节点,发送PSYNC命令

  2. 生成RDB:主节点执行BGSAVE生成RDB快照文件

  3. 发送RDB:主节点将RDB文件发送给从节点

  4. 清空从节点数据:从节点接收RDB前会清空自身数据

  5. 加载RDB:从节点加载RDB文件恢复数据

  6. 发送缓冲区命令:主节点将生成RDB期间的写命令发送给从节点

2.3 增量同步机制

Redis 2.8之后引入了增量复制,主要基于以下三个核心概念:

  • 复制偏移量(Replication Offset):主从节点各自维护一个偏移量

  • 复制积压缓冲区(Replication Backlog):主节点维护的固定长度队列

  • 服务器运行ID(Run ID):每个Redis节点启动时生成的唯一标识

当从节点断开重连后,会向主节点发送自己的复制偏移量和Run ID。如果Run ID匹配且偏移量在积压缓冲区范围内,则执行增量同步,否则执行全量同步。

三、主从同步实现方式

3.1 配置方式

Redis提供多种方式配置主从复制:

配置文件方式

在从节点的redis.conf中添加:

replicaof <masterip> <masterport>
命令行方式

启动从节点后执行:

redis-cli> REPLICAOF 192.168.1.1 6379
运行时修改

在不重启服务的情况下修改:

redis-cli> REPLICAOF 192.168.1.1 6379
# 取消复制
redis-cli> REPLICAOF NO ONE

3.2 认证配置

如果主节点设置了密码,需要在从节点配置:

masterauth <master-password>

3.3 只读从节点

默认情况下,从节点是只读的(Redis 2.6+),可通过配置修改:

replica-read-only yes

四、主从同步优化与注意事项

4.1 网络中断处理

Redis 2.8+支持部分重同步,通过以下配置优化:

# 积压缓冲区大小(默认1MB)
repl-backlog-size 1mb
# 积压缓冲区存活时间(默认1小时)
repl-backlog-ttl 3600

4.2 无盘复制

Redis 6.0+支持无盘复制,主节点直接通过socket发送RDB到从节点:

repl-diskless-sync yes
# 等待更多从节点连接的时间
repl-diskless-sync-delay 5

4.3 重要配置参数

# 从节点ping主节点间隔
repl-ping-replica-period 10
# 复制超时时间
repl-timeout 60
# 是否禁用TCP_NODELAY
repl-disable-tcp-nodelay no

五、主从同步监控与管理

5.1 信息查看

使用INFO replication命令查看复制状态:

redis-cli> INFO replication

5.2 故障处理

常见问题及解决方案:

  • 同步延迟:检查网络状况,适当增大repl-backlog-size

  • 全量同步频繁:确保repl-backlog-size足够大,避免主节点频繁重启

  • 从节点数据不一致:检查主从节点maxmemory策略是否一致

http://www.lqws.cn/news/549001.html

相关文章:

  • CI/CD的常规设置及核心原理
  • 【大数据】大数据产品基础篇
  • OpenCV图像添加水印
  • Java底层原理:深入理解JVM类加载机制与反射机制
  • nginx:配置反向代理后不生效
  • 智能实验室革命:Deepoc大模型驱动全自动化科研新生态
  • could not import google.golang.org/protobuf/proto
  • 前沿融合:机器学习如何重塑智能水泥基复合材料研发范式
  • 学习设计模式《十五》——模板方法模式
  • 多张图片生成PDF每张图片生成pdf的一页
  • Windows Server 2019 查询远程登录源 IP 地址(含 RDP 和网络登录)
  • 论云原生架构及应用
  • AcWing--数据结构(二)
  • clion配置旧的C项目为CMake项目工程
  • 生成树基础实验
  • 【C++】atoi和std::stoi
  • 本年度TOP5服装收银系统对比推荐
  • HTTPS hostname wrong: should be <xxx>错误解决
  • .小故事.
  • 基于DeepSeek搭建Dify智能助手国产化架构运行arm64
  • 【LeetCode】滑动窗口相关算法题
  • leetcode.2014 重复k次的最长子序列
  • Deformable Transformer 详解
  • 本地缓存Caffeine详解(含与Spring Cache集成)
  • Java 工程智能化升级:飞算科技重构软件开发的技术范式
  • 电子电气架构 --- 涵盖“诊断与 ECU 平台”领域特有项目要求(上)
  • go写前端打包的自动化工具
  • 图像分割模型中的空间信息、上下文信息、空间路径、上下文路径到底是什么?有什么作用?
  • 大事件项目记录5-用户接口开发-更新用户头像
  • 未来已来:Deepoc大模型驱动的人机智能革命