Redis主从架构高可用方案_整合Redis哨兵实现自动故障发现与自动主从切换

雨伟小哥_2384

雨伟小哥_2384

2026-05-20

459人浏览

原创

哨兵配置中 sentinel monitor 的第三个参数填判定主库下线所需投票数,须过半且至少为2,如3个哨兵填2、5个填3;填1易致脑裂;所有哨兵该值必须一致,且不超总数。

redis主从架构高可用方案_整合redis哨兵实现自动故障发现与自动主从切换

哨兵配置文件里 sentinel monitor 的第三个参数到底填几?

填 2,不是 1,也不是哨兵节点总数。这个值是「判定主库客观下线所需的哨兵投票数」,必须满足「过半且至少为 2」。比如你部署了 3 个哨兵,这里填 2;5 个哨兵就填 3。填 1 会导致脑裂风险——任意一个哨兵网络抖动就可能误判主库下线,触发不必要的切换。

常见错误现象:+sdown master mymaster 127.0.0.1 6379 日志频繁出现,但主库明明在线;或者切换后旧主库恢复,却没被降为从库,形成双主。

  • 必须确保所有哨兵节点的 sentinel monitor 配置完全一致(名称、IP、端口、quorum 值)
  • quorum 值不能大于哨兵总数,否则永远无法达成共识
  • 如果 Redis 主库启用了密码,必须在哨兵配置中补上 sentinel auth-pass <master-name><password></password></master-name>

哨兵启动后一直报 +tilt 或 +reset-after-panic

这是哨兵进程进入「倾斜模式(Tilt Mode)」的标志,说明它检测到自身时钟异常或事件循环严重延迟,不再信任自己的判断逻辑。根本原因通常是:系统时间被 NTP 突然校准、CPU 过载导致事件处理超时、或磁盘 I/O 阻塞了哨兵的定时任务。

使用场景:你在容器或低配云主机上部署哨兵,又开了 cron 定时同步时间,就很容易触发。

  • 检查系统时间是否稳定:ntpq -p 看 offset 是否持续大幅跳变
  • 用 redis-cli -p 26379 info sentinel | grep tilt 确认当前是否处于 tilt 状态
  • 临时缓解:重启哨兵进程;长期解决需优化宿主机资源分配,禁用激进的 NTP step 调整(改用 slewing)

主从切换后客户端连不上新主库?

哨兵只负责发现和切换,不负责通知客户端。客户端仍拿着老的主库地址发请求,自然失败。这不是哨兵的问题,而是客户端集成方式不对。

Redis Skill - 高性能缓存管理
Redis Skill - 高性能缓存管理

Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。

下载

性能影响:硬编码 IP+端口的直连方式,在故障切换后会持续失败直到超时重试,RT 延长数秒甚至分钟级。

  • Java 应用推荐用 JedisSentinelPool 或 Lettuce 的 RedisSentinelConfiguration,它们会定期向哨兵询问 sentinel get-master-addr-by-name 获取最新主库地址
  • Python 用 redis.sentinel.Sentinel 实例,调用 sentinel.discover_master('mymaster') 动态获取
  • 切忌自己写轮询逻辑去查哨兵——哨兵响应慢或返回空时容易引发雪崩

为什么哨兵 + 主从还是扛不住写流量突增?

哨兵保障的是「高可用」,不是「高性能」。主从复制是异步的,从库不参与写操作;所有写请求必须打到单点主库。当写 QPS 突破主库瓶颈,哪怕哨兵再灵敏,也救不了吞吐下降和连接堆积。

容易被忽略的地方:很多人以为“上了哨兵就等于分布式”,其实哨兵管理的仍是单主架构。真正的水平扩展要靠分片(如 Redis Cluster 或 Codis),而哨兵只是 Cluster 中每个分片的 HA 组件之一。

如果你的应用写多读少、且无法接受分片带来的 key 分布复杂性,那就得接受主库是天然瓶颈——哨兵能做的,只是让这个瓶颈挂掉时,换另一个同规格的机器顶上而已。

相关文章

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

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

下载

相关标签:

redis

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

相关专题

更多
常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.02

4429

19

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.14

3955

11

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.02

7252

6

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

643

6

redis怎么解决数据一致性
redis怎么解决数据一致性

redis 提供了两种一致性模型,以维护副本数据一致性:强一致性 (sync) 确保写操作仅在复制到所有从节点后才完成;最终一致性 (async) 则在主节点上写操作后认为已完成,牺牲一致性换取性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

756

6

mysql和redis怎么保证双写一致性
mysql和redis怎么保证双写一致性

确保 mysql 和 redis 双写一致性的技术包括:1、事务性更新:同时更新 mysql 和 redis,保证一致性;2、主从复制:mysql 主服务器更改同步到 redis 从服务器;3、基于事件的更新:mysql 记录更改并发送到 redis等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

7042

6

redis缓存一般存些什么数据
redis缓存一般存些什么数据

redis缓存中存储的数据类型包括:字符串、哈希、列表、集合、有序集合、位图、地理空间数据和hyperloglog。这些数据类型适用于存储各种数据,从简单信息到复杂对象和地理位置。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

1160

6

redis的8种数据类型有哪些
redis的8种数据类型有哪些

redis 提供 8 种数据类型:字符串(文本、数字、二进制)、哈希(键值对)、列表(有序集合)、集合(无序唯一元素)、有序集合(按分数排序)、地理空间(地理位置)、hyperloglog(估计大数据基数)和位图(位序列存储)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

1076

6

redis主要作用有哪些
redis主要作用有哪些

redis 的主要作用包括:1. 缓存数据,提高访问速度;2. 充当消息队列,实现消息传递;3. 存储各种数据类型,如字符串、散列和集合;4. 管理会话信息,确保可靠性和可用性;5. 限制请求速率,防止服务器超载等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

6198

6

热门下载

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

精品课程

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

共0课时 | 0人学习