Redis如何通过哨兵模式实现高可用_配置多哨兵节点避免单点监控故障

胖墨君_6813

胖墨君_6813

2026-04-11

993人浏览

原创

哨兵节点至少需部署3个且分属不同物理机或可用区,quorum值须满足过半原则;配置中down-after-milliseconds建议设为10000ms并据网络rtt微调;客户端必须通过哨兵列表动态获取主库地址,禁用dns/ip缓存。

redis如何通过哨兵模式实现高可用_配置多哨兵节点避免单点监控故障

哨兵节点必须至少部署3个,且不能全在一台机器上

单个哨兵进程只是监控和故障转移的执行者,它本身也是单点。如果只配1个哨兵,它挂了整个高可用机制就失效;配2个也不行——当主库宕机时,两个哨兵可能因网络分区无法达成多数派(quorum),无法触发failover。官方明确要求 quorum 值 ≤ 哨兵总数,且建议哨兵数为奇数(3/5/7),其中3是最小可行规模。

实操建议:

  • 3个哨兵分别部署在不同物理机或不同可用区的虚拟机上,避免共用电源、网络设备或宿主机
  • 每个哨兵配置里 sentinel monitor mymaster 192.168.1.10 6379 2 中的 2 表示“至少2个哨兵同意才判定主库客观下线”,该值必须 ≤ 哨兵总数且 > 总数/2(即满足过半原则)
  • 不要把哨兵和Redis实例混部在同一台机器上——资源争抢可能导致哨兵心跳超时误判

哨兵配置中 sentinel down-after-milliseconds 设置太短会频繁误切

这个参数定义哨兵认为主库“主观下线”的毫秒阈值。设得太小(比如 3000ms),网络抖动或Redis瞬时阻塞(如bgsave卡住)就会触发误判;设得太大(如 30000ms),真实故障又不能及时响应。

推荐做法:

  • 生产环境建议从 10000(10秒)起步,在压测和观测网络RTT后微调
  • 同时检查 sentinel failover-timeout(默认180000ms),它控制两次failover之间的最小间隔,避免反复切换——若你设了较短的 down-after-milliseconds,这个值最好同步加大,否则可能刚切完主库,哨兵又因未完成同步而再次发起选举
  • 所有哨兵节点的该参数必须一致,否则投票逻辑混乱

客户端必须用哨兵地址初始化连接,不能硬编码主库IP

很多团队把应用里的Redis连接写成 redis://192.168.1.10:6379,等哨兵切主后,旧主变从、新主换IP,客户端还在往老地址发请求,直接报 READONLY You can't write against a read only replica 或连接拒绝。

Redis 8.2.3
Redis 8.2.3

Redis 8.2.3 是一款安全优先的高性能键值存储系统。该版本紧急修复了可能引发远程代码执行(RCE)的高危漏洞(CVE-2025-62507),并解决了 HyperLogLog 及 Cuckoo Filter 等数据结构在特定场景下的崩溃问题。建议所有用户立即升级,以保障生产环境的系统稳定与数据安全。

下载

正确姿势:

  • 使用支持哨兵的客户端库(如Jedis的 JedisSentinelPool、StackExchange.Redis的 SentinelConfiguration),传入的是哨兵列表,例如 ["192.168.1.11:26379", "192.168.1.12:26379", "192.168.1.13:26379"]
  • 客户端会自动向任一哨兵发送 SENTINEL get-master-addr-by-name mymaster 获取当前主库地址,并监听 +switch-master 事件做动态更新
  • 务必禁用客户端的DNS缓存或IP缓存——某些SDK默认缓存主库地址长达几分钟,需查文档关掉 cacheMasterAddress 类似开关

哨兵日志里出现 +sdown master mymaster 但没后续 +odown,说明quorum未达成

+sdown 是主观下线,+odown 才是客观下线(多数哨兵确认)。如果只看到前者,意味着至少有一个哨兵没跟其他哨兵通信成功,常见于防火墙拦截、端口未开放或配置了错误的 sentinel announce-ip

排查重点:

  • 确认所有哨兵的 port 26379 对彼此开放(不仅是客户端连哨兵,哨兵之间也要能互相连通)
  • 检查是否启用了 sentinel announce-ip:若哨兵运行在Docker或NAT后,它上报给其他哨兵的IP可能是容器内网地址,导致通信失败,此时必须显式配置该选项为宿主机可路由的IP
  • redis-cli -p 26379 SENTINEL sentinels mymaster 登录任一哨兵,看返回的哨兵列表是否完整、状态是否为 ok

哨兵之间靠定期 INFOPING 同步状态,一旦网络延迟超过 down-after-milliseconds 的一半,就容易失联。这不是配置问题,而是基础设施层的真实约束。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

redis

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
switch语句用法
switch语句用法

switch语句用法:1、Switch语句只能用于整数类型,枚举类型和String类型,不能用于浮点数类型和布尔类型;2、每个case语句后面必须跟着一个break语句,以防止执行其他case的代码块,没有break语句,将会继续执行下一个case的代码块;3、可以在一个case语句中匹配多个值,使用逗号分隔;4、Switch语句中的default代码块是可选的等等。

2023.09.21

1011

6

Java switch的用法
Java switch的用法

Java中的switch语句用于根据不同的条件执行不同的代码块。想了解更多switch的相关内容,可以阅读本专题下面的文章。

2024.03.13

1337

13

k8s和docker区别
k8s和docker区别

k8s和docker区别有抽象层次不同、管理范围不同、功能不同、应用程序生命周期管理不同、缩放能力不同、高可用性等等区别。本专题为大家提供k8s和docker区别相关的各种文章、以及下载和课程。

2023.07.24

625

4

docker进入容器的方法有哪些
docker进入容器的方法有哪些

docker进入容器的方法:1. Docker exec;2. Docker attach;3. Docker run --interactive --tty;4. Docker ps -a;5. 使用 Docker Compose。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.08

4159

6

docker容器无法访问外部网络怎么办
docker容器无法访问外部网络怎么办

docker 容器无法访问外部网络的原因和解决方法:配置 nat 端口映射以将容器端口映射到主机端口。根据主机兼容性选择正确的网络驱动(如 host 或 overlay)。允许容器端口通过主机的防火墙。配置容器的正确 dns 服务器。选择正确的容器网络模式。排除主机网络问题,如防火墙或连接问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.08

4997

6

docker镜像有什么用
docker镜像有什么用

docker 镜像是预构建的软件组件,用途广泛,包括:应用程序部署:简化部署,提高移植性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.08

1853

7

Docker容器化部署与DevOps实践
Docker容器化部署与DevOps实践

本专题面向后端与运维开发者,系统讲解 Docker 容器化技术在实际项目中的应用。内容涵盖 Docker 镜像构建、容器运行机制、Docker Compose 多服务编排,以及在 DevOps 流程中的持续集成与持续部署实践。通过真实场景演示,帮助开发者实现应用的快速部署、环境一致性与运维自动化。

2026.02.11

199

16

Docker 容器部署
Docker 容器部署

本专题整合了Docker容器部署相关内容,阅读专题下面的文章了解更多详细操作教程。

2026.03.31

351

14

Java容器化部署与Docker实践教程合集
Java容器化部署与Docker实践教程合集

聚焦 Java 应用的容器化与云原生部署,讲解 Dockerfile 编写规范与 Java 应用镜像构建、多阶段构建(Multi-stage Build)减小镜像体积、Jib / Buildpacks 免 Dockerfile 镜像构建方案、JVM 容器感知参数(-XX:MaxRAMPercentage)配置、Docker Compose 编排多服务(应用 + MySQL + Redis)、容器健康检查与资源限制、Kubernetes

2026.05.11

340

26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.5万人学习