
本文共 1400 字,大约阅读时间需要 4 分钟。
Redis Sentinel 是 Redis 高可用性解决方案的一部分。通过一组Sentinel实例,Sentinel可以监控任意多个主服务器及其所有从服务器。一旦检测到主服务器出现故障,Sentinel会自动将从服务器中的一个转为新的主服务器,确保数据的持续可用性。
启动并初始化Sentinel步骤
Sentinel的启动过程与普通Redis服务器不同。以下是详细的初始化步骤:
初始化服务器
首先,你需要启动一个Redis服务器,但这次以Sentinel模式运行。与普通Redis不同,Sentinel不需要加载RDB或AOF文件来恢复数据库状态,因为它并不直接操作数据。应用Sentinel专用代码
_RANDOM amaçlıcca:……Redis服务器会切换到Sentinel专用的代码,这个代码包含了Sentinel特有的功能模块。初始化Sentinel状态
应用专用代码后,服务器会初始化sentinelState
结构,该结构记录了所有与Sentinel功能相关的状态信息。根据配置文件初始化监控列表
根据提供的配置文件,Sentinel会读取所有需要监控的主服务器信息,并将它们存储在masters
字典中。每个主服务器对应一个sentinelRedisInstance
结构,记录其相关信息。创建网络连接
Sentinel会为每个目标主服务器创建两种类型的网络连接:- 命令连接:负责发送命令并接收响应。
- 订阅连接:用于接收主服务器发布的
__sentinel__:hello
频道信息。
主服务器信息的获取
默认情况下,Sentinel每隔10秒会向被监查的主服务器发送一次INFO
命令,以获取最新的服务器状态信息。
获取从服务器信息
当Sentinel检测到新的从服务器出现时,它会创建对应的实例结构,并为这些从服务器建立命令连接和订阅连接。与主服务器不同,Sentinel会每秒向所有被监控的主服务器和从服务器发送命令,确保高效的状态更新。
实例间状态同步
Sentinel会维护sentinels
字典,记录与当前实例同样监控同一主服务器的其他Sentinel的信息。这些之间只会建立命令连接,而不会创建订阅连接。
主服务器状态检查
Sentinel默认每秒向所有已建立连接的实例发送PING
命令,用于检测对方是否在线。down-after-milliseconds
参数定义了Sentinel主观下线的时间阈值。
主安anger下线检测
当Sentinel判断一个主服务器进入主观下线状态后,为了确保客观下线状态,它会向同一主服务器的其他Sentinel实例询问对方的判断结果。在接收到足够数量的下线报告后,Sentinel会执行故障转移操作。
故障转移操作流程
当发生故障转移时,监控该主服务器的Sentinel实例会协商选举产生新的领头Sentinel,负责对故障主服务器进行恢复操作。
选择从服务器作为新主服务器
在老旧的主服务器所在的所有从服务器中,挑选一个作为新的主服务器。** 转移主权**
将所有从服务器设置为新的主服务器的复制节点。设置老旧主服务器为从服务器状态
并设置老旧主服务器作为新主服务器的从服务器,这样当它重新上线时,会成为新主服务器的从服务器。通过以上步骤,Redis Sentinel 能够有效地实现高可用性管理,确保服务的持续稳定运行。