当前位置: 首页 > 网络应用技术

在-Depth的Redis Sentinel(Sentinel模式)知识点摘要中

时间:2023-03-06 00:33:58 网络应用技术

  主和从副本奠定了REDIS分发的基础,但是普通的主和从副本无法达到高度可用的状态。主服务器通过操作和维护人员。显然,该方案是不可取的。

  为了响应上述情况,Redis正式推出了一个高度可用的解决方案,该解决方案可以抵抗NODES -REDIS SENTINEL.NEW主服务器。

  以下示例:当旧的主脱机时,超出了离线时间的上限,而前哨系统将对旧主人执行故障传输操作。故障转移操作包括三个步骤:

  本文是根据以下资源列表进行的:

  从本质上讲,Sentinel是一项具有更少命令和一些特殊功能的REDIS服务,不同的命令表和配置文件。Sentinel启动时,它需要通过以下步骤:

  Sentinel本质上是REDIS服务器,因此启动Senine需要启动Redis服务器,但是Sentine不需要读取RDB/AOF文件即可恢复数据状态。

  Sentinel用于较少的REDIS命令。Sentinel客户端上不支持大多数命令,而Sentinel具有一些特殊功能,需要将Redis Server使用的代码替换为Sentinel的特殊代码。在此期间,Sentinel将与普通Redis Server的加载不同。。

  Sentinel不支持SET,DBSize和其他命令;保留支持PING,PSUBSCRIP,订阅,退订,信息和其他说明的支持;这些说明提供了哨兵工作的保证。

  加载Sentinel的唯一代码后,Sentinel初始化了SentinelState结构。该结构用于存储与前哨相关的状态信息。其中最重要的是大师词典。

  Sentinel监视的主服务器列表存储在SentinelState的Masters词典中。创建SentinelState时,它开始初始化Sentinel监视的主服务器列表。

  主服务器的名称由我们的Sentinel.conf配置文件指定。

  SentinelRredisInstance实例保存了REDIS服务器的信息(主服务器,从服务器,Sentinel信息保存在此实例中)。

  根据上述,第二和第二配置将获得以下示例结构:

  当整体结构被初始化时,Sentinel将开始创建连接主的网络连接,此步骤将成为主的客户端。

  Sentinel和Master之间将创建命令连接:

  哨兵创建命令连接后,每10秒向主人发送信息指令。通过主人的答复信息,您可以获得知识的两个方面:

  根据服务器信息,Sentinel可以创建与从属的网络连接,并且在Sentinel和Slave之间也将创建命令连接和订阅连接。

  当Sentinel和Slave之间创建网络连接时,Sentinel已成为Slave的客户端,Sentinel还将要求从每10秒通过信息指令获取服务器信息。

  在此步骤中,Sentinel获得了Master和Slave的相关服务器数据。更重要的信息如下:

  目前,结构信息如下所示:

  目前,有什么问题吗?Sentinel如何相互找到并相互交流并相互交流。这与Sentinel:Sentinel和Main和一致监视之间的Hello Channel有关。

  Sentinel将订阅Sentinel:Sentinel和Slave之间的Hello Channel,Sentinel每2秒钟将消息发送给Sentinel:Hello Channel。消息的内容如下:

  发布Sentinel:Hello“ ,,,,,

  S代码哨兵M代表主人;IP表示IP地址,端口代表端口,RunID表示运行ID,Epoch表示配置时代。

  多个Sentinel将在配置文件中配置相同的主服务器IP和端口信息,因此多个Sentinel将订阅Sentinel:Hello Channel。频道收到的信息可以获得其他哨兵的IP和端口。两个要点需要注意:

  Sentinel不会创建订阅连接,他们将仅创建命令连接:

  目前,结构信息如下所示:

  Sentinel的主要工作是监视Redis服务器。当主实例超过预设的时间限制时,切换新的主实例。在它们中,有很多细节,大致分为四个步骤:测试主是否受到离线状态,检测主是否是客观的离线,选举,选举领袖哨兵和故障转移。

  每1秒钟,Sentinel将PING命令发送给Sentinelredisinstance实例中的所有主,从属和哨兵,以通过其他服务器的答复确定它是否仍在线。

  在Sentinel的配置文件中,当Sentinel Ping的实例在连续配置配置配置后,在连续下载的时间内返回无效命令时,当前的前哨都相信其主观离线。Sentinel配置文件将在其SentinelRredisInstance实例中适应所有主,从和哨兵。

  不一致的说明请参阅其他说明其他说明

  如果当前的哨兵检测到主体处于主观的脱机状态,则将其将其sendintintinelredisisinstance的标志修改为sri_s_down

  目前的前哨认为它的离线只能处于主观的离线状态。要确定当前的主体是否客观地离线,您还需要询问其他哨兵,所有人都考虑了主的主观离线或客观离线的总和。当前的前哨将客观地离线。

  当前的前哨将以下命令发送到SentinelRedisInstance实例中的其他哨兵:以下命令:

  Current_epoch和RunID用于Sentinel的选举。主人离线之后,需要一个领先的哨兵来选举新的主人,current_epoch,并扮演重要角色,这是后续的解释。

  接收命令的前哨将根据命令中的参数检查主服务器是否脱机。检查后,将返回以下三个参数:

  下载回到1,证明了接收IS-Master-Master-Addr命令的哨兵认为主人也受到离线的约束。Master由当前的前哨标记。

  目前,Sentinel将再次发送以下说明:

  目前,RunID将不再是0,而是Sentinel自己的Run(RunID)的价值,表明当前的Sentinel希望在IS-Master-Master-down-Addr命令中接收其他Sentinel,以将其设置为领导者Sentinel。此设置首先可用。Sentinel首先收到设置请求,并设置为Leader Sentinel的设置。

  发送命令的前哨将根据其他前哨响应的结果来确定是否由前哨将其设置为前哨。

  故障转移将给予领导者哨兵。领导人哨兵需要做以下操作:

  最困难的步骤之一是,如果您选择最好的新主人,则领导者Sentinel将进行以下清洁和分类工作:

  生成新的主机后,Leader Sentinel将将“从属IP端口命令”发送到主服务器的其他服务器(不包括新主服务器)(不包括新主服务器),以使其成为新主人的从属。

  在这一点上,Sentinel的工作流程已经结束,如果新主人脱机,则流通过程就足够了!