ToolkitX
知识库工具箱

哨兵模式

高可用架构、主从切换、故障转移

25min·高级

01. 哨兵是什么——自动值班警卫

Redis Sentinel(哨兵)是 Redis 的高可用方案,干三件事: 监控——盯着主从节点,看谁挂没挂 通知——出问题发消息通知你 自动故障转移——主节点挂了,自动从从节点里选一个当新主节点 像一群值班警卫 24 小时盯着集群,主节点一出问题立刻自动切换,对应用基本透明。

02. 哨兵怎么干活

哨兵工作流程: 多个哨兵一起盯着主从(至少 3 个,防误判) 大多数哨兵都认为主挂了(主观下线→客观下线) 哨兵投票选个领头的执行故障转移 领头哨兵从从节点里挑最合适的(数据最新、网络好)晋升为新主 其他从节点自动切到新主节点 整个过程通常在几十秒内完成
bash
# sentinel.conf 关键配置
sentinel monitor mymaster 127.0.0.1 6379 2
# ↑ 监控名为 mymaster 的主节点,至少 2 个哨兵同意才判定故障

sentinel down-after-milliseconds mymaster 5000
# ↑ 5 秒没响应就判主观下线

sentinel failover-timeout mymaster 10000

# 启动哨兵
redis-sentinel /path/to/sentinel.conf
哨兵至少 3 个且部署在不同物理机上。只有 2 个的话挂一个就没法达成多数派共识了。

03. 客户端如何感知故障转移?

故障转移后主节点变了,客户端怎么知道新地址? 答案是客户端不直连 Redis IP,而是先问哨兵:「现在主节点是谁?」哨兵告诉它当前主节点地址,客户端再连过去。主流客户端库(Jedis、Lettuce、ioredis)都支持 Sentinel 模式。
javascript
// Node.js ioredis 连接 Sentinel
const Redis = require('ioredis');
const redis = new Redis({
sentinels: [
    { host: 'sentinel1', port: 26379 },
    { host: 'sentinel2', port: 26379 },
    { host: 'sentinel3', port: 26379 }
],
name: 'mymaster'
});
redis.set('key', 'value');  // 自动连到当前主节点

知识测验

1/5正确 0

Redis Sentinel 最少需要几个哨兵?

下一节

Redis Cluster

下一节