Redis 主从复制
1. 概念
主从复制指将一个 Redis 服务器(主节点,master/leader
)的数据复制到其他 Redis 服务器(从节点,slave/follower
),数据复制单向,只能从主节点到从节点,主节点以写为主,从节点以读为主 。
默认每台 Redis 服务器都是主节点,一个主节点可有多个从节点,一个从节点只能有一个主节点。
主从复制作用:
- 数据冗余:实现数据热备份,是持久化外的数据冗余方式。
- 故障恢复:主节点故障时,从节点可提供服务,实现快速故障恢复(服务冗余 )。
- 负载均衡:配合读写分离,主节点提供写服务,从节点提供读服务,分担服务器负载,提升并发量(写少读多场景适配 )。
- 高可用基石:是哨兵、集群实现的基础,保障 Redis 高可用。
工程不用单台 Redis 原因:
- 结构风险:单点故障,单台服务器处理所有请求,压力大。
- 容量限制:单台 Redis 内存容量有限(一般单台最大用内存不超 20G ),无法存放大体量数据。
一般来说,用将Redis运用于工程项目中,只使用一台Redis是万万不可能的,原因如下:
1. 从结构上,单个Redis服务器会发生单点故障,并且一台服务器需要处理所有的请求负载,压力较大;
2. 从容量上,单个Redis服务器内存容量有限,就算一台Redis服务器内存容量为256G,也不能将所 有内存用作Redis存储内存,一般来说,单台Redis最大使用内存不应该超过20G。
电商网站上的商品,一般都是一次上传,无数次浏览,也就是“多读少写”。对于这种场景,我们可 以使用如下的架构:
2. 环境配置
- 查看主库信息:
127.0.0.1:6379> info replication # 查看当前库复制信息 # Replication role:master # 角色为主节点 connected_slaves:0 # 无从机 # 其他复制相关信息...
- 复制配置文件:复制 3 个 Redis 配置文件,修改端口号、
pid
名字、log
文件名字、dump.rdb
名字。 - 启动服务器:修改后启动 3 个 Redis 服务器,通过进程查看:
root@chen-PC:/usr/local/bin# ps -ef | grep redis root 8713 1 0 16:02 ? 00:00:00 redis-server 127.0.0.1:6379 root 8719 1 0 16:02 ? 00:00:00 redis-server 127.0.0.1:6380 root 8725 1 0 16:02 ? 00:00:00 redis-server 127.0.0.1:6381 root 8731 8601 0 16:02 pts/3 00:00:00 grep redis
3. 一主二从
一个主机有两个从机
链路模式
默认 Redis 服务器是主节点,配置从机即可。
- 两种模式:
- 一个主机连两个从机(星型拓扑 )。
- 链路模式(主 -> 从 1 -> 从 2 链式拓扑 )。
- 配置从机:
127.0.0.1:6380> SLAVEOF 127.0.0.1 6379 # 从机6380 认主节点6379 OK 127.0.0.1:6380> info replication # 查看从机复制信息 # Replication role:slave # 角色为从机 master_host:127.0.0.1 # 主节点地址 master_port:6379 # 主节点端口 # 其他复制相关信息...
- 查看主机信息:主节点执行
info replication
,可见connected_slaves:2
及从机详情。
细节:主机可写,从机只读(写操作报错 (error) READONLY You can't write against a read only replica.
),主机数据自动同步到从机。
4. 复制原理
- 全量复制:从机启动连主机后发
sync
命令,主机启动存盘进程,收集修改数据集命令,完毕后传全量数据文件给从机,从机存盘加载到内存。 - 增量复制:主机继续传新修改命令给从机,保持同步。重新连主机时,自动触发全量复制。
5. 从机恢复主机
从机执行 SLAVEOF no one
可恢复为主机,脱离主从复制关系。
哨兵模式(Sentinel)
1. 概述
主从切换需手动操作,低效且影响服务。Redis 2.8+ 提供哨兵模式,自动监控主节点状态,故障时自动选新主节点,保障高可用。
2. 哨兵作用
- 发命令监控 Redis 主、从服务器运行状态。
- 主节点宕机时,自动将从节点切换为主节点,通过发布 / 订阅模式通知其他从机换主机。
多哨兵模式:单个哨兵监控有风险,多哨兵互相监控,形成集群。主节点宕机时,哨兵先 “主观下线”(单哨兵认为主节点不可用 ),多数哨兵确认后 “客观下线”,发起投票选新主节点,执行故障转移(failover
)。
3. 测试
- 配置哨兵文件:编辑
sentinel.conf
,配置监控主节点:sentinel monitor myredis 127.0.0.1 6379 1 # 监控名为myredis的主节点,1表示至少1个哨兵同意就切换
- 启动哨兵:
redis-sentinel sentinel.conf # 启动哨兵进程
主节点断开,哨兵从从机选新主节点;原主节点恢复后,成为新主节点的从机。
4. 优缺点
- 优点:
- 基于主从复制,继承主从优点。
- 自动主从切换、故障转移,提升系统可用性。
- 主从模式升级,手动转自动,更健壮。
- 缺点:
- 扩展困难:Redis 在线扩容麻烦,集群容量到上限难处理。
- 配置复杂:哨兵模式配置项多,搭建维护有一定成本。