Redis主从复制原理

发布于:2025-06-29 ⋅ 阅读:(15) ⋅ 点赞:(0)

一、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策略是否一致