Redis 主从复制

Redis 主从复制
penjcRedis 主从复制(Master-Slave Replication)详解
1. 什么是 Redis 主从复制?
Redis 主从复制(Replication) 是一种数据同步机制,允许 从节点(Slave) 复制 主节点(Master) 的数据,以提高系统的可用性、负载均衡能力,并支持高可用架构(如 Sentinel、Cluster)。
1.1 主从复制的核心作用
- 数据冗余:从节点保存主节点的数据,防止数据丢失。
- 负载均衡:读请求可以分摊到多个从节点,提高并发能力。
- 故障恢复:主节点故障时,可快速切换到从节点(结合 Redis Sentinel)。
- 高可用架构:作为 Redis 集群(Redis Cluster)的基础组件。
2. Redis 主从复制的工作原理
Redis 的主从复制流程主要包括:
- 从节点发送同步请求(
PSYNC
命令) - 主节点创建 RDB 快照 并发送给从节点(全量同步)
- 主节点发送命令流(增量同步)
- 从节点应用数据,最终达到一致性
2.1 全量同步(Full Synchronization)
当从节点连接到主节点时,会进行 全量同步:
- Step 1:从节点发送
PSYNC
请求主节点同步数据。 - Step 2:如果是新加入的从节点,主节点创建 RDB 快照(
BGSAVE
)。 - Step 3:主节点将 RDB 快照发送给从节点。
- Step 4:从节点加载 RDB 文件,并接收主节点发送的写入命令。
2.2 增量同步(Incremental Synchronization)
当从节点与主节点同步后,主节点会继续将后续的写操作同步到从节点,以保持数据一致。
- Step 1:主节点会维护一个 复制积压缓冲区(Replication Backlog Buffer),存储最近的写入操作。
- Step 2:如果主从连接断开并重连,只要缓冲区中的数据还未丢失,从节点可以继续增量同步,避免重新全量同步。
2.3 断线重连
- 如果断开时间短(缓冲区仍然保留),可以使用 增量同步(仅同步最近丢失的数据)。
- 如果断开时间长(缓冲区数据丢失),则需要重新进行 全量同步。
3. Redis 主从复制的配置
3.1 配置主节点
主节点默认无需特殊配置,直接启动即可:
1 | redis-server /etc/redis/redis.conf |
3.2 配置从节点
在 redis.conf
配置文件中,添加:
1 | replicaof <master-ip> <master-port> |
或在 Redis CLI 运行:
1 | SLAVEOF <master-ip> <master-port> |
例如:
1 | SLAVEOF 192.168.1.100 6379 |
从节点会连接到 192.168.1.100:6379
并开始同步数据。
4. Redis 主从复制的数据流
4.1 查看主从信息
在 主节点 查看:
1 | INFO replication |
示例输出:
1 | # Replication |
在 从节点 查看:
1 | INFO replication |
示例输出:
1 | # Replication |
4.2 主从同步过程
(1)写入数据
在主节点写入:
1 | SET key1 "Hello, Redis!" |
然后在从节点读取:
1 | GET key1 |
返回:
1 | "Hello, Redis!" |
说明数据已同步到从节点。
(2)断开主从
1 | SLAVEOF NO ONE |
从节点会变为独立节点,不再同步主节点的数据。
(3)恢复主从关系
1 | SLAVEOF 192.168.1.100 6379 |
从节点会重新同步主节点的数据。
5. Redis 复制模式
Redis 支持两种复制模式:
5.1 异步复制(默认)
- 默认情况下,Redis 采用异步复制。
- 主节点会将写入操作发送给从节点,但不会等待从节点完成复制。
- 优点:性能高,主节点可以继续处理其他请求。
- 缺点:如果主节点故障,部分数据可能尚未同步到从节点,可能会丢失。
5.2 半同步复制
- 在 Redis 5.0 及以上,提供了
replica-serve-stale-data
和replica-read-only
选项:replica-serve-stale-data no
:从节点在复制未完成时不提供服务。replica-read-only yes
:从节点仅允许读操作,不允许写操作。
6. Redis 主从复制的应用
6.1 读写分离
- 主节点(Master)处理写请求。
- 从节点(Slave)处理读请求,减少主节点的负载。
- 结合 负载均衡(Nginx、LVS) 或 客户端路由(如 Redis 读写分离方案)提高性能。
6.2 备份与高可用
- 使用 从节点进行数据备份,避免主节点数据丢失。
- 配合 Redis Sentinel 实现自动故障转移(主节点宕机时,从节点自动提升为主节点)。
7. Redis 主从复制的缺点
7.1 数据一致性问题
由于 Redis 默认是异步复制,可能导致:
- 主节点写入数据后崩溃,而数据尚未同步到从节点,导致数据丢失。
- 解决方案:使用
WAIT
命令,确保数据至少写入一定数量的从节点:1
WAIT 1 1000
1
:等待至少 1 个从节点确认。1000
:等待 1000ms 超时。
7.2 复制延迟
- 网络负载或主节点压力过大时,从节点可能会 滞后主节点数据。
- 解决方案:监控
replication offset
差值,确保复制延迟在可接受范围内。
7.3 主节点压力
- 所有从节点都会向主节点请求数据,导致主节点负载高。
- 解决方案:采用 链式复制(Redis Cluster)减少主节点负载。
8. Redis 主从复制 vs. Redis Cluster
方案 | 主从复制 | Redis Cluster |
---|---|---|
数据分片 | ❌ 无数据分片 | ✅ 支持数据分片 |
高可用 | ✅ 结合 Sentinel 实现 | ✅ 内置高可用 |
复制方式 | Master-Slave | 多主多从 |
扩展性 | 中等,不能水平扩展 | 良好,支持数据分片 |
总结
- Redis 主从复制 用于 数据冗余、读写分离、提高可用性。
- 复制流程:从节点连接主节点 → 主节点快照(RDB) → 发送命令流(增量同步)。
- 两种复制模式:
- 异步复制(默认):高性能,但可能丢数据。
- 半同步复制:确保数据一致性,适用于高可靠场景。
- 结合 Redis Sentinel 或 Redis Cluster 以提高高可用性和扩展性。
Redis 主从复制是 分布式 Redis 架构的基础,常与 Sentinel(高可用)和 Cluster(分片) 结合使用!
评论
匿名评论
✅ 你无需删除空行,直接评论以获取最佳展示效果