哨兵是独立的 Redis 进程
哨兵以特殊模式运行:它本身是一个 Redis 进程,但不存储业务数据,只负责监控主从、判定故障、选举领头哨兵并执行故障转移。默认监听 26379 端口,配置全部写在 sentinel.conf 中,运行过程中产生的状态变更会被自动改写回该文件,因此配置文件所在目录必须可写。
基本信息
| 适用平台 | Redis 2.8+ 的 Sentinel;建议全集群版本一致 |
|---|---|
| 默认端口 | 26379(客户端命令端口,与实例端口不同) |
| 启动方式 | redis-sentinel sentinel.conf 或 redis-server sentinel.conf --sentinel |
| 配置持久化 | 状态变化会自动 rewrite sentinel.conf |
| 运行数据 | 自身不存业务数据,只保存监控与选主状态 |
典型使用场景
- 为主从架构加入自动故障转移能力
- 切换演练时手工触发 FAILOVER 验证流程是否可用
- 查看当前主库地址:应用侧或中间件需要动态获取
- 巡检哨兵之间的互相发现是否完整
- 容器化部署时核对宣告地址与端口映射
启动与验证
启动与验证
redis-sentinel /etc/redis/sentinel.conf
# 或等价写法
redis-server /etc/redis/sentinel.conf --sentinel
# 连通性与状态确认
redis-cli -p 26379 PING # 期望返回 PONG
redis-cli -p 26379 INFO sentinel # 关注 sentinel_masters 与 master0 状态
redis-cli -p 26379 SENTINEL masters
redis-cli -p 26379 SENTINEL get-master-addr-by-name mymaster
# systemd 场景下查看服务状态
systemctl status redis-sentinel常用命令速查
| 命令 | 作用 | 输出要点 |
|---|---|---|
| PING | 判断哨兵是否存活 | 返回 PONG |
| INFO sentinel | 整体状态概览 | sentinel_masters 数量与 master0 status |
| SENTINEL masters | 列出被监控的主库 | 包含地址、quorum、故障转移统计 |
| SENTINEL sentinels | 列出同主库的其他哨兵 | 用于确认互相发现是否完整 |
| SENTINEL ckquorum | 检查能否形成多数派 | 部署后必做自检 |
| SENTINEL failover | 手工触发一次故障转移 | 演练专用,会真实切换 |
哨兵与 Redis 实例可以同机部署(端口不同),但生产更建议分散在不同故障域;同机部署时要留意内存与 CPU 争用,尤其是实例做快照 fork 的时刻。
容器化部署时哨兵默认可能以容器内部地址宣告自己:其他哨兵发现不到它,永远凑不齐多数派,需要通过 announce-ip 与端口映射显式声明外部可达地址。
哨兵自身不需要持久化业务数据的机制,但是它的配置文件会被实时改写:纳入版本管理时要清楚这是运行状态而不是静态配置,直接回滚文件可能把已发现的从库与选举信息一起抹掉。