Sentinel网络
为了演示方便,19.1 节只使用了单个 Sentinel 监视主服务器和它属下的从服务器,但是在实际应用中,只使用单个 Sentinel 监视主从服务器并不合适,因为:
-
单个 Sentinel 可能会形成单点故障,当唯一的 Sentinel 出现故障时,针对主从服务器的自动故障转移将无法实施。如果同时有多个 Sentinel 对主服务器进行监视,那么即使有一部分 Sentinel 下线了,其他 Sentinel 仍然可以继续进行故障转移工作。
-
单个 Sentinel 可能会因为网络故障而无法获得主服务器的相关信息,并因此错误地将主服务器判断为下线,继而执行实际上并无必要的故障转移操作。如果同时有多个 Sentinel 对主服务器进行监视,那么即使有一部分 Sentinel 与主服务器的连接中断了,其他 Sentinel 仍然可以根据自己对主服务器的检测结果做出正确的判断,以免执行不必要的故障转移操作。
为了避免单点故障,并让 Sentinel 能够给出真实有效的判断结果,我们可以使用多个 Sentinel 组建一个分布式 Sentinel 网络,网络中的各个 Sentinel 可以通过互通消息来更加准确地判断服务器的状态。在一般情况下,只要 Sentinel 网络中有半数以上的 Sentinel 在线,故障转移操作就可以继续进行。
当 Sentinel 网络中的其中一个 Sentinel 认为某个主服务器已经下线时,它会将这个主服务器标记为 主观下线(Subjectively Down,SDOWN),然后询问网络中的其他 Sentinel,是否也认为该服务器已下线(换句话说,也就是其他 Sentinel 是否也将这个主服务器标记成了主观下线)。当同意主服务器已下线的 Sentinel 数量达到 sentinel monitor 配置选项中 quorum 参数所指定的数量时,Sentinel 就会将相应的主服务器标记为 客观下线(objectively down,ODOWN),然后开始对其进行故障转移。
因为 Sentinel 网络使用客观下线机制来判断一个主服务器是否真的已经下线了,所以为了让这种机制能够有效地运作,用户需要将 quorum 参数的值设置为 Sentinel 数量的半数以上,从而形成一种少数服从多数的投票机制。举个例子,在一个拥有 3 个 Sentinel 的网络中,quorum 参数的值至少需要设置成 2;而在一个拥有 5 个 Sentinel 的网络中,quorum 参数的值至少需要设置成 3;诸如此类。因为构成少数服从多数机制至少需要 3 个成员进行投票,所以用户至少需要使用 3 个 Sentinel 才能构建一个可信的 Sentinel 网络。
组建Sentinel网络
在了解了 Sentinel 网络的基本原理和作用之后,现在让我们来了解一下组建 Sentinel 网络的方法。
组建 Sentinel 网络的方法非常简单,与启动单个 Sentinel 时的方法一样:用户只需要启动多个 Sentinel,并使用 sentinel monitor 配置选项指定 Sentinel 要监视的主服务器,那些监视相同主服务器的 Sentinel 就会自动发现对方,并组成相应的 Sentinel 网络。
举个例子,如果我们想要构建一个由 3 个 Sentinel 组成的 Sentinel 网络,并让这些 Sentinel 去监视主服务器 website_db,那么可以启动 3 个 Sentinel,并让它们分别载入以下 3 个 Sentinel 文件:
# 文件sentinel26379.conf
port 26379
sentinel monitor website_db 127.0.0.1 6379 2
# 文件sentinel26380.conf
port 26380
sentinel monitor website_db 127.0.0.1 6379 2
# 文件sentinel26381.conf
port 26381
sentinel monitor website_db 127.0.0.1 6379 2
因为在这个例子中,我们需要在同一台机器上启动 3 个 Sentinel,而 Sentinel 在默认情况下将使用 26379 作为自己的端口号,所以我们在配置文件中通过 port 配置选项为 3 个 Sentinel 分别指定了各自的端口号,以免造成端口冲突。
与各不相同的端口号相反,我们为 3 个 Sentinel 设置了相同的 sentinel monitor 配置选项,并将 quorum 参数的值设置成了 2。这样一来,当 Sentinel 网络中有两个 Sentinel 都认为主服务器 website_db 已经下线时,针对该服务器的故障转移操作就会开始实施。图 19-3 展示了这个 Sentinel 网络。
