Redis搭建哨兵集群

一、前言:为什么需要哨兵集群?

在生产环境中,单点 Redis 主节点一旦宕机,整个写服务将中断

手动切换不仅慢(几分钟),还容易出错。

Redis Sentinel(哨兵)集群 可以实现:

✅ 自动监控主从节点健康状态

✅ 主节点宕机时自动选举新主

✅ 通知客户端更新连接地址

全程无需人工干预!

本文将带你从零搭建一个 1 主 + 2 从 + 3 哨兵 的高可用 Redis 架构,并验证故障转移效果。


二、环境准备

2.1 服务器规划(可单机模拟)

角色 IP 地址 端口 说明
Master 192.168.1.10 6379 主节点
Slave1 192.168.1.11 6379 从节点1
Slave2 192.168.1.12 6379 从节点2
Sentinel1 192.168.1.10 26379 哨兵1(可与 Master 同机)
Sentinel2 192.168.1.11 26379 哨兵2(可与 Slave1 同机)
Sentinel3 192.168.1.12 26379 哨兵3(可与 Slave2 同机)

💡 单机测试:可在同一台机器用不同端口模拟(如 6380、6381)

2.2 软件要求

  • Redis 6.0+(推荐 7.x)
  • Linux / macOS(Windows 仅限 WSL)

三、第一步:搭建 Redis 主从复制

3.1 配置主节点(master.conf)

复制代码
# /etc/redis/master.conf
port 6379
bind 0.0.0.0
daemonize yes
logfile "/var/log/redis/master.log"
dir /var/lib/redis
requirepass "your_strong_password"  # 建议设置密码

启动主节点:

bash 复制代码
redis-server /etc/redis/master.conf

3.2 配置从节点(slave1.conf & slave2.conf)

复制代码
# /etc/redis/slave1.conf
port 6379
bind 0.0.0.0
daemonize yes
logfile "/var/log/redis/slave1.log"
dir /var/lib/redis

# 关键:指向主节点
replicaof 192.168.1.10 6379
masterauth "your_strong_password"  # 主节点密码

⚠️ 注意 :Redis 5.0+ 使用 replicaof 替代 slaveof

启动两个从节点:

bash 复制代码
redis-server /etc/redis/slave1.conf
redis-server /etc/redis/slave2.conf

3.3 验证主从同步

bash 复制代码
# 在主节点写入
redis-cli -h 192.168.1.10 -a your_strong_password SET hello world

# 在从节点读取
redis-cli -h 192.168.1.11 GET hello  # 应返回 "world"

四、第二步:配置哨兵集群

4.1 创建哨兵配置文件(sentinel.conf)

所有哨兵节点使用相同配置(除日志路径外)

复制代码
# /etc/redis/sentinel.conf
port 26379
bind 0.0.0.0
daemonize yes
logfile "/var/log/redis/sentinel.log"
dir /var/lib/redis

# 监控名为 mymaster 的主节点
# quorum=2:至少 2 个哨兵同意才判定主节点宕机
sentinel monitor mymaster 192.168.1.10 6379 2

# 主节点密码(必须配置!)
sentinel auth-pass mymaster your_strong_password

# 判定主观下线时间(毫秒)
sentinel down-after-milliseconds mymaster 30000

# 故障转移超时(毫秒)
sentinel failover-timeout mymaster 180000

# 故障转移后,并行同步从节点数
sentinel parallel-syncs mymaster 1

🔑 关键参数说明

  • mymaster:主节点逻辑名称(客户端通过此名称查询)
  • quorum=2:3 节点集群中,需 2 个哨兵同意才触发 ODOWN
  • auth-pass必须配置,否则哨兵无法操作带密码的主节点

4.2 启动三个哨兵节点

bash 复制代码
# 在三台机器分别执行
redis-sentinel /etc/redis/sentinel.conf

💡 单机测试 :复制三份配置,修改 port 为 26379/26380/26381,分别启动


五、第三步:验证哨兵集群状态

5.1 查看哨兵监控信息

bash 复制代码
redis-cli -p 26379 SENTINEL MASTER mymaster

关键字段:

  • num-slaves: 2(应有 2 个从节点)
  • num-other-sentinels: 2(其他哨兵数量)
  • flags: 正常应为 master,宕机后变为 odown, sdown

5.2 查看所有哨兵共识

bash 复制代码
redis-cli -p 26379 SENTINEL SENTINELS mymaster

→ 应显示另外两个哨兵的信息

5.3 客户端获取主节点地址

bash 复制代码
redis-cli -p 26379 SENTINEL get-master-addr-by-name mymaster
# 返回:1) "192.168.1.10" 2) "6379"

六、第四步:模拟故障转移(实战验证)

6.1 手动停止主节点

bash 复制代码
# 在主节点机器执行
redis-cli -a your_strong_password shutdown

6.2 观察哨兵日志

复制代码
# /var/log/redis/sentinel.log
+sdown master mymaster 192.168.1.10 6379  # 主观下线
+odown master mymaster ...                # 客观下线
+new-epoch 1
+try-failover master mymaster ...
+vote-for-leader abc123 1                 # 投票
+elected-leader master mymaster ...
+failover-state-select-slave master mymaster ...
+selected-slave slave 192.168.1.11:6379  # 选出新主
+failover-state-send-slaveof-noone ...
+switch-master mymaster 192.168.1.10 6379 192.168.1.11 6379  # 切换完成!

6.3 验证新主节点

bash 复制代码
# 查询当前主节点
redis-cli -p 26379 SENTINEL get-master-addr-by-name mymaster
# 返回:1) "192.168.1.11" 2) "6379"

# 写入新主
redis-cli -h 192.168.1.11 -a your_strong_password SET test_key new_value

# 从节点(原主恢复后)应能同步
redis-cli -h 192.168.1.10 GET test_key  # 若原主已重启

6.4 原主恢复后自动变为从节点

  • 重启原主:

    bash 复制代码
    redis-server /etc/redis/master.conf
  • 查看其角色:

    bash 复制代码
    redis-cli -h 192.168.1.10 ROLE
    # 返回:1) "slave" 2) "192.168.1.11" ...

成功!整个过程全自动,无需人工干预。


七、客户端连接示例(Spring Boot)

复制代码
# application.yml
spring:
  redis:
    sentinel:
      master: mymaster
      nodes:
        - 192.168.1.10:26379
        - 192.168.1.11:26379
        - 192.168.1.12:26379
    password: your_strong_password

✅ 应用会自动连接当前主节点,切换时可能短暂报错,重试即可。


八、生产环境最佳实践

✅ 必须遵守

  1. 至少 3 个哨兵节点(部署在不同物理机/可用区)
  2. 哨兵与 Redis 实例尽量分离部署(避免资源竞争)
  3. 主从节点必须设置密码 ,并在哨兵中配置 auth-pass
  4. 监控哨兵日志与 +switch-master 事件

✅ 推荐配置

  • down-after-milliseconds: 10000~30000(根据网络质量)
  • quorum: 3 节点设 2,5 节点设 3
  • 从节点设置 replica-priority 控制升主顺序

九、常见问题排查

❌ 问题:哨兵无法发现从节点

  • 原因 :主节点未正确配置 replicaof,或网络不通
  • 解决 :检查 INFO REPLICATION 输出

❌ 问题:故障转移后客户端连不上

  • 原因:客户端未使用 Sentinel 模式,或未配置密码
  • 解决 :确保使用 JedisSentinelPool 或 Spring Boot Sentinel 配置

❌ 问题:哨兵日志报 NOAUTH

  • 原因 :未配置 sentinel auth-pass
  • 解决 :在 sentinel.conf 中添加主节点密码

十、结语

感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!

相关推荐
java_logo2 小时前
Apache Doris Docker 部署指南:实时分析数据库实战
数据库·docker·apache·doris·apache doris·轩辕镜像·docker部署doris
广州灵眸科技有限公司9 小时前
xfce桌面触摸校准:基于灵眸科技EASY-EAl-Orin-Nano
数据库·windows·科技
憧憬成为web高手12 小时前
皮卡丘靶场速通--sql 2
数据库·sql·mybatis
段一凡-华北理工大学12 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
二宝哥13 小时前
CentOS 7.9 系统下 Redis 5.0.4 单机安装与源码编译安装指南
redis·centos
oradh14 小时前
Oracle XTTS实现跨版本迁移和升级(Oracle 11g单库升级至19C RAC集群)
数据库·oracle·11g升级19c·xtts跨版本迁移和升级
z1234567898615 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
程序猿DD15 小时前
一个 API Key,统一调用大模型、生图和联网搜索
数据库·网关
java_logo15 小时前
Docker Compose 部署 ClickHouse:快速搭建高性能列式数据库
数据库·clickhouse·docker·列式数据库·轩辕镜像·高性能数据库·clickhouse部署教程
TlSfoward16 小时前
抓包代理链路下的 TLS 指纹变化分析 TLSFOWARD抓包工具
数据库·爬虫·网络协议·搜索引擎·php