Redis主从复制原理
一、Redis主从复制概述
Redis主从复制(Master-Slave Replication)是Redis实现高可用性和读写分离的基础架构。通过主从复制,数据可以从一个Redis服务器(主节点)复制到一个或多个Redis服务器(从节点),从而实现数据的冗余备份、读写分离和故障恢复。
主从复制的主要优势包括:
-
数据冗余:实现数据的热备份,是持久化之外的一种数据冗余方式
-
故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复
-
读写分离:主节点提供写服务,从节点提供读服务,分担服务器负载
-
高可用基石:主从复制是哨兵和集群能够实施的基础
二、主从同步核心原理
2.1 同步过程概述
Redis主从同步主要分为两个阶段:
-
全量同步(Full Resynchronization):从节点初次连接主节点时进行完整数据同步
-
增量同步(Partial Resynchronization):主节点将写命令持续发送给从节点
2.2 全量同步流程
-
建立连接:从节点连接主节点,发送
PSYNC
命令 -
生成RDB:主节点执行
BGSAVE
生成RDB快照文件 -
发送RDB:主节点将RDB文件发送给从节点
-
清空从节点数据:从节点接收RDB前会清空自身数据
-
加载RDB:从节点加载RDB文件恢复数据
-
发送缓冲区命令:主节点将生成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
策略是否一致