查询当前主库地址
SENTINEL GET-MASTER-ADDR-BY-NAME 按监控对象名称返回当前主库的地址,是客户端与运维脚本在切换后重新定位主库的标准入口。返回值一般是两行:ip 与端口。命令本身很简单,但有两个容易忽视的边界:切换进行中查询可能拿到尚未更新的旧地址;名称拼错时返回空值而不是报错。因此脚本必须做空值判断,并在使用地址后准备好连接失败的重试逻辑。
基本信息
| 命令 | SENTINEL GET-MASTER-ADDR-BY-NAME <master-name> |
|---|---|
| 返回 | ip 与端口两行 |
| 名称不存在 | 返回空值,而不是报错 |
| 切换期间 | 可能仍返回旧地址 |
| 配套机制 | 订阅 +switch-master 事件刷新缓存 |
典型使用场景
- 客户端启动时确定初始的主库地址
- 运维脚本在切换后重新定位主库并做连通性检查
- 巡检脚本对比哨兵报告的主库与实际连接的主库是否一致
- 故障复盘中还原切换前后的地址变化过程
- 多套主从环境按名称批量查询各自主库地址
查询与应对
查询与应对
redis-cli -p 26379 SENTINEL GET-MASTER-ADDR-BY-NAME mymaster
redis-cli -p 26379 SENTINEL MASTER mymaster | grep -E 'flags|num-slaves'
redis-cli -p 26379 SENTINEL GET-MASTER-ADDR-BY-NAME typo-name # 返回空值
redis-cli -p 26379 SUBSCRIBE +switch-master # 配合事件刷新
redis-cli -h <查询到的地址> PING # 使用前先验证连通返回情况与应对
| 情况 | 返回 | 应对 |
|---|---|---|
| 正常 | ip 与端口两行 | 直接使用,并缓存 |
| 名称不存在 | 空值 | 脚本显式判断,避免拿空值连接 |
| 切换进行中 | 可能是旧地址 | 连接失败后重新查询再重试 |
| 切换已完成 | 新地址 | 刷新本地缓存与连接池 |
客户端库通常封装了这个查询并缓存结果,缓存的有效期与刷新时机比查询本身更重要:收到切换事件后立即刷新,遇到只读类错误或重定向时也应重新查询一次。
这套机制只在哨兵模式下成立。集群模式定位主库的方式完全不同(客户端维护路由表并跟随重定向更新),不要把两种模式的定位逻辑混用在同一个客户端里。