哨兵是什么
Sentinel(哨兵)是 Redis 官方基于主从复制的高可用组件,只负责四件事:持续监控、事件通知、自动故障转移、给客户端提供当前主库地址。它本身不保存业务数据,也不分担任何读写流量。哨兵从 Redis 2.8 起随主程序一起发布,可用 redis-sentinel 或 redis-server --sentinel 启动,默认监听 26379 端口。生产环境至少要部署三个哨兵且为奇数,才能避免单点投票失效。
基本信息
| 运行方式 | redis-sentinel /etc/sentinel.conf(Linux 随 redis 安装包提供) |
|---|---|
| 默认端口 | 26379,与业务端口无关 |
| 部署数量 | 3 或 5 个,跨机架或跨可用区分散 |
| 数据角色 | 不读写数据,只参与裁决与通知 |
| 判定条件 | quorum 票数 + 多数哨兵同意才能切换 |
典型使用场景
- 主库宕机后自动把从库提升为新主库,省掉人工登录改指向的操作
- 客户端通过哨兵查询当前主库地址,主从切换后无需修改应用配置
- 多台从库挂在同一主库上做读扩展,需要统一的主库漂移能力
- 单机内存与写入量仍在可控范围,只需高可用而不需要分片能力时优先选哨兵
- 运维告警联动:哨兵会发布 sdown、odown、switch-master 等事件,可接入监控系统
最小哨兵配置
最小哨兵配置
port 26379 # 哨兵自身端口
sentinel monitor mymaster 10.0.0.10 6379 2 # 末位 2 是判定客观下线所需票数
sentinel auth-pass mymaster app-password # 主库有密码时必须配置
sentinel down-after-milliseconds mymaster 30000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1
sentinel deny-scripts-reconfig yes # 固定哨兵不再改写配置文件常用查看命令
常用查看命令
redis-cli -p 26379 SENTINEL masters # 列出被监控的主库
redis-cli -p 26379 SENTINEL get-master-addr-by-name mymaster # 当前主库地址
redis-cli -p 26379 SENTINEL replicas mymaster # 该主库下的副本列表
redis-cli -p 26379 SENTINEL failover mymaster # 手工触发一次切换演练主要局限对照
| 局限 | 具体表现 | 缓解办法 |
|---|---|---|
| 单主写入 | 写入能力受一台机器上限约束,无法横向扩展 | 写入或数据量到顶时改用 Cluster |
| 切换窗口不可写 | 探测加选主期间写请求报错,通常持续数十秒 | 客户端重试并缩短判定时间 |
| 脑裂双写 | 旧主与哨兵网络割裂但仍被客户端可达时可能继续接收写 | 配置最少副本写保护并做业务对账 |
| 没有分片 | 槽位与数据分布不在哨兵职责范围内 | 需要分片能力时选 Cluster |
哨兵不代理流量,客户端必须支持哨兵协议或经一层代理才能用;把主库固定 IP 写死在应用配置里,切换之后必然连错。
切换期间主库身份会变,连接池里缓存的旧连接要能自动失效重建,否则应用会持续收到 READONLY 报错。