sentinel.conf必须独立存在且由redis-sentinel专属命令启动,不能混入redis.conf或通过redis-server加载;核心配置sentinel monitor必须带非零quorum参数,密码配置需按顺序显式声明,配置变更后必须重启进程而非reload。

sentinel.conf 必须独立存在,不能混在 redis.conf 里
哨兵进程(redis-sentinel)只读取自己的配置文件,完全不认 redis.conf 里的 sentinel 相关配置。哪怕你在 redis.conf 里写了 sentinel monitor mymaster 127.0.0.1 6379 2,启动哨兵时也直接忽略——它压根不会加载这个文件。
常见错误现象:redis-sentinel sentinel.conf 启动后,sentinel master mymaster 返回空,或者 INFO SENTINEL 显示 0 个 monitored masters。
- 哨兵必须用单独的
sentinel.conf文件启动,路径任意,但推荐放在/etc/redis/sentinel.conf - 该文件不能是
redis.conf的副本或 include 进去的子配置;必须是哨兵专属 - 启动命令只能是
redis-sentinel /path/to/sentinel.conf,不能用redis-server
sentinel monitor 配置项必须带 quorum 参数且不能为 0
sentinel monitor 是唯一决定主节点是否被监控的核心配置,格式为:sentinel monitor <name><ip><port><quorum></quorum></port></ip></name>。漏掉 quorum 或设为 0,哨兵会静默跳过该行,不报错也不生效。
使用场景:你有 3 个哨兵节点,想让至少 2 个同意才触发故障转移 —— 那 quorum 就得设成 2,不是 1 也不是 3。
-
quorum是“判定主节点客观下线所需的哨兵数量”,不是“总哨兵数” - 若设为 1,单个哨兵误判就可能发起 failover,风险高;设为哨兵总数,又可能导致无法达成共识
- 生产环境建议
quorum = N/2 + 1(N 为哨兵总数,向上取整),比如 3 哨兵配 2,5 哨兵配 3
密码相关配置必须显式写全,且顺序不能颠倒
如果 Redis 主从启用了 requirepass,哨兵要连主库、从库、其他哨兵,就必须分别配置对应密码。漏掉任何一项,哨兵日志里会出现 NOAUTH Authentication required 或 READONLY You can't write against a read only slave,但配置文件本身看起来“语法正确”。
关键点在于:这三类密码必须分开写,且必须在 sentinel monitor 之后才生效:
-
sentinel auth-pass <name><password></password></name>:主库密码(必填) -
sentinel auth-replica <name><password></password></name>:从库密码(Redis 6.2+ 才支持;旧版本从库复用auth-pass) -
sentinel auth-user <name><username></username></name>和sentinel auth-pass <name><password></password></name>:仅当启用 ACL 时需要(Redis 6.0+)
容易踩的坑:auth-pass 写在 monitor 前面,或把从库密码硬塞进 auth-pass 当作通用密码——哨兵不会自动复用,只会连不上从库导致同步失败。
配置变更后必须重启哨兵进程,reload 不生效
redis-sentinel 不支持 SIGUSR1 或 CONFIG REWRITE 动态重载配置。改完 sentinel.conf 后执行 redis-cli -p 26379 sentinel reload 看似成功,实际只是重新读取了部分运行时状态,sentinel monitor、auth-pass 等核心配置仍沿用启动时的值。
验证方式:改完配置后,用 ps aux | grep sentinel 确认进程已 kill 并重启;再查 redis-cli -p 26379 sentinel masters 是否返回预期主节点信息。
- systemd 管理的哨兵服务,必须
systemctl restart redis-sentinel,不能只reload - 如果你用
supervisord,确保其配置里autorestart=true且startsecs足够长(哨兵启动比 Redis server 慢) - 修改
sentinel down-after-milliseconds或failover-timeout这类参数,同样必须重启,否则永远按旧值判断
最常被忽略的一点:哨兵配置文件里写的路径(如 dir /var/lib/redis/sentinel)和日志路径(logfile /var/log/redis/sentinel.log)权限不对,会导致进程静默退出——检查 ps 输出是否存在,比看配置语法更重要。











