Redis:(1) 主从配置与实现:主机、从机与哨兵
在上一节中讲了 Redis 的基础知识和各种配置,本节讲 Redis 主从配置的实现步骤,并进行实际搭建。
搭建环境:WSL2 Ubuntu 22.04
1. 架构
Redis 主从配置架构,包含
- 1 个主节点(Master)
- 至少 1 个从节点(Slave)
- 至少 3 个 Sentinel 节点(哨兵)
当主节点宕机时,系统能自动选出新主节点,程序可以连上它继续工作。
哨兵必须为奇数,防止投票数相同。
这里由于是在本机搭建示例,故简化为:
- 1 个主节点(Master)
- 1 个从节点(Slave)
- 1 个 Sentinel 节点(哨兵)
2. 搭建
2.1 编辑配置文件
```bash
# redis_cfg 文件夹下为 3 个redis 实例的配置文件
sudo cp /etc/redis/redis.conf /home/yy/DFS/redis_cfg/6380.conf
sudo cp /etc/redis/redis.conf /home/yy/DFS/redis_cfg/6381.conf
sudo cp /etc/redis/redis.conf /home/yy/DFS/redis_cfg/26382.conf
```
以 6380 为主机,6381 为从机,26382为哨兵:
三个配置文件都要编辑:ip(127.0.0.1),端口(6380/6381/26382),守护进程,pid 文件路径(如pidfile /var/run/redis/redis-6380.pid),持久化数据库的文件(dbfilename dump.rdb 改为如 dump6380.rdb),日志文件(logfile /var/log/redis/redis-server.log )。
启动三个实例并连接:
sudo redis-server /home/yy/DFS/redis_cfg/6380.conf
sudo redis-server /home/yy/DFS/redis_cfg/6381.conf
sudo redis-server /home/yy/DFS/redis_cfg/26382.conf
redis-cli -h 127.0.0.1 -p 6380
redis-cli -h 127.0.0.1 -p 6381
redis-cli -h 127.0.0.1 -p 26382
# 关闭三个实例(注意:关闭顺序为哨兵、从机、主机,这里先不要关闭)
redis-cli -p 6380 shutdown
redis-cli -p 6381 shutdown
redis-cli -p 26382 shutdown
进入三个实例的命令行界面,使用:info replication 查看主从复制状态,示例:

三个实例都应为 master
2.2 配置从机
在从机 6381 的控制台中输入 slaveof 127.0.0.1 6380,显示如下:

主机显示如下:

可知配置成功。
但是这样 6381 在重启时仍然会改为主机,所以我们可以直接在配置文件中写入:
slaveof 127.0.0.1 6380
即可。
2.3 配置哨兵
哨兵配置文件(26382.conf)中添加:
sentinel monitor mymaster 127.0.0.1 6380 1
sentinel down-after-milliseconds mymaster 5000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 10000
- sentinel monitor mymaster 127.0.0.1 6380 2
mymmaster:主节点的别名(逻辑名称),客户端通过这个名字连接。
127.0.0.1:主节点当前的 IP 地址。
6380:主节点的端口。
1:至少需要 个 Sentinel 实例同意,才认为该主节点“主观下线” → “客观下线”,从而触发故障转移。
关键点:这个数字不是指需要多少个 Sentinel 才能做 failover,而是指“判定 master 宕机所需的最少 Sentinel 同意数”。实际 failover 仍需多数 Sentinel 参与(通常建议部署奇数个,如 3 个)。
- sentinel down-after-milliseconds mymaster 5000
作用:设置 Sentinel 判断主节点“主观下线”的超时时间。
如果 Sentinel 在 5000 毫秒(5 秒) 内没有收到主节点的有效响应(PING 回复),就认为该主节点可能挂了(主观下线)。
多个 Sentinel 都认为它挂了,并且达到 quorum=2,就会标记为“客观下线”,开始 failover。
- sentinel parallel-syncs mymaster 1
作用:在故障转移完成后,限制同时向新主节点同步数据的从节点数量。
设为 1 表示:一次只允许 1 个从节点 同步新主节点的数据。
目的是避免大量从节点同时全量同步(SYNC)导致新主节点负载过高、网络拥塞。
如果有多个从节点(比如 3 个),它们会排队依次同步。
- sentinel failover-timeout mymaster 10000
作用:设置故障转移的超时时间(单位:毫秒)。
这个参数影响多个阶段的超时,包括:
等待从节点晋升为主节点的超时;
等待旧主节点恢复后重新配置为从节点的超时;
整个 failover 流程的最大时间。
如果 failover 超过 10000 毫秒(10 秒)还没完成,Sentinel 可能会放弃或重试。
- 重启哨兵实例:
sudo redis-sentinel /home/yy/DFS/redis_cfg/26382.conf
- 检查哨兵状态:
redis-cli -p 26382 info sentinel

3. 测试
3.1 读写测试
在 6380 上测试如下:

主机可读写。
在 6381 上测试如下:

从机只可读不可写。
在 26382 上测试如下:

哨兵不可读写。
3.2 故障恢复
主节点 shutdown 后,查看从节点 6381:

可知自动提升为主节点。
查看哨兵的日志文件:

也可知原来的从节点 6381 提升为主节点,原来的主节点 6380 再重新上线后查看状态,发现其变为了从节点:

4. 常用命令
ss -tuln | grep 26382 # 检查特定端口状态
sudo pkill redis-server # 关闭所有 redis 实例
redis-cli -p 26382 shutdown # 关闭哨兵实例
/pattern # vim 中向下搜索 pattern(支持正则)
更多推荐




所有评论(0)