在本单元的开头,我们了解到如果没有复制和自动故障转移,就无法实现高可用性。我们在前两章中介绍了复制,现在我们将解释 Sentinel——一个提供自动故障转移的工具。
Redis Sentinel 是一个分布式系统,由多个以 Sentinel 模式启动的 Redis 实例组成。我们将这些实例称为 Sentinel。
Sentinel 群组监控一个主 Redis 实例及其副本。如果 Sentinel 检测到主实例发生故障,Sentinel 进程将寻找拥有最新数据的副本,并将该副本提升为新的主实例。这样,与数据库通信的客户端将能够重新连接到新的主实例,并像往常一样继续运行,最大限度地减少对用户的影响。
为了让 Sentinel 能够判断主实例已宕机,我们需要有足够多的 Sentinel 从它们的角度一致认为服务器不可达。
一定数量的 Sentinel 同意需要采取行动被称为 达到法定票数 (quorum)。如果 Sentinel 无法达到法定票数,它们就无法判断主实例发生故障。所需法定票数的 Sentinel 确切数量是可配置的。
一旦 Sentinel 决定主实例已宕机,它们需要选举并授权一个领导者(一个 Sentinel 实例)来执行故障转移。只有多数 Sentinel 同意,才能选出领导者。
在最后一步,领导者将通过发送命令 REPLICAOF NO ONE
将选定的副本重新配置为主实例,并将其他副本重新配置为跟随新提升的主实例。
如果你的系统使用 Sentinel 来实现高可用性,那么你需要一个支持 Sentinel 的客户端。并非所有库都具有此功能,但大多数流行的库都支持,因此在选择库时务必将其添加到需求列表中。
有关 Redis Sentinel 的更多信息,请查阅 redis.io 上的 文档。