学习

在本单元的开头,我们了解到如果没有复制和自动故障转移,就无法实现高可用性。我们在前两章中介绍了复制,现在我们将解释 Sentinel——一个提供自动故障转移的工具。

Redis Sentinel 是一个分布式系统,由多个以 Sentinel 模式启动的 Redis 实例组成。我们将这些实例称为 Sentinel

Sentinel 群组监控一个主 Redis 实例及其副本。如果 Sentinel 检测到主实例发生故障,Sentinel 进程将寻找拥有最新数据的副本,并将该副本提升为新的主实例。这样,与数据库通信的客户端将能够重新连接到新的主实例,并像往常一样继续运行,最大限度地减少对用户的影响。

判断主实例是否宕机#

为了让 Sentinel 能够判断主实例已宕机,我们需要有足够多的 Sentinel 从它们的角度一致认为服务器不可达。

一定数量的 Sentinel 同意需要采取行动被称为 达到法定票数 (quorum)。如果 Sentinel 无法达到法定票数,它们就无法判断主实例发生故障。所需法定票数的 Sentinel 确切数量是可配置的。

触发故障转移#

一旦 Sentinel 决定主实例已宕机,它们需要选举并授权一个领导者(一个 Sentinel 实例)来执行故障转移。只有多数 Sentinel 同意,才能选出领导者。

在最后一步,领导者将通过发送命令 REPLICAOF NO ONE 将选定的副本重新配置为主实例,并将其他副本重新配置为跟随新提升的主实例。

Sentinel 和客户端库#

如果你的系统使用 Sentinel 来实现高可用性,那么你需要一个支持 Sentinel 的客户端。并非所有库都具有此功能,但大多数流行的库都支持,因此在选择库时务必将其添加到需求列表中。

延伸阅读#

有关 Redis Sentinel 的更多信息,请查阅 redis.io 上的 文档