1
头图

Redis Sentinel 的基本实现原理,具体包含以下几个方面:

  • 三个定时任务
  • 主管下线
  • 客观下线
  • Sentinel 领导者选举
  • 故障转移

本节对 三个定时任务 展开说明。
Redis Sentinel 通过三个定时任务完成对各个节点发现和监控:

  • 每隔 10 秒;
  • 每隔 2 秒;
  • 每隔 1 秒;

每隔 10 秒

每隔 10 秒,每隔 Sentinel 节点会向主节点和从节点发送 info 命令获取最新的拓扑图。

作用表现

  • 通过向主节点执行 info 命令,获取从节点信息,这也是为什么 Sentinel 节点不需要显示配置监控从节点;
  • 当有新的从节点加入时可以立即感知到;
  • 节点不可达或故障转移后,可以通过 info 命令实时更新节点拓扑信息;

每隔 2 秒

每隔 2 秒,每个 Sentinel 节点会向 Redis 数据节点的 __sentinel__:hello 频道发送该 Sentinel 节点对于主节点的判断以及当前 Sentinel 节点的信息,同时每个 Sentinel 节点也会订阅该频道,来了解其他 Sentinel 节点以及它们对主节点的判断。

工作内容

  • 发现新的 Sentinel 节点:通过订阅主节点的 __sentinel__:hello 了解其他 Sentinel 节点信息,如果是新加入的 Sentinel 节点,将该 Sentinel 节点信息保存起来,并于该 Sentinel 节点创建连接。
  • Sentinel 节点之间交换主节点的状态,作为后面客观下线以及领导者选举的依据。

__sentinel__:hello 频道

每隔 1 秒心跳检测

每隔 1 秒,每个 Sentinel 节点会向主节点、从节点、其余 Sentinel 节点发送一条 ping 命令做一次心跳检测,来确认这些节点当前是否可达。

作用表现

通过每 1 秒定时任务,Sentinel 节点对主节点、从节点、其余 Sentinel 节点都建立起连接,实现了对每个节点的监控,这个定时任务是判断节点是否可用的重要依据。

sentinel 节点向其余节点发送 ping 命令

参考:《Redis 开发与运维》


其名
10 声望2 粉丝

Hello World!