学习

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

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

Sentinel 组监控主 Redis 实例及其副本。如果 Sentinel 检测到主实例已故障,Sentinel 进程将查找具有最新数据的副本,并将该副本提升为主实例。这样,与数据库通信的客户端就可以重新连接到新主实例,并继续正常运行,对用户的影响最小。

确定主实例已关闭#

为了让 Sentinel 能够确定主实例已关闭,我们需要有足够的 Sentinel 同意该服务器从其角度看是不可达的。

多个 Sentinel 同意需要采取行动,被称为**达到法定人数**。如果 Sentinel 无法达到法定人数,它们就无法确定主实例已故障。法定人数所需的 Sentinel 的确切数量是可以配置的。

触发故障转移#

一旦 Sentinel 确定主实例已关闭,它们需要选举和授权一个领导者(一个 Sentinel 实例)来执行故障转移。只有在大多数 Sentinel 同意的情况下才能选择领导者。

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

Sentinel 和客户端库#

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

进一步阅读#

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