redis哨兵

Redis Sentinel 是一种高可用性解决方案,用于监控和故障转移主从服务器。Sentinel 实例会定期检查主服务器状态,当检测到主观下线后,会进一步确认客观下线状态,并协调进行故障转移,选择新的主服务器。此过程涉及与其他 Sentinel 的通信,确保集群的一致性。Sentinel 还负责更新从服务器的目标,确保数据同步。
摘要由CSDN通过智能技术生成

redis sentinel 哨兵

redis哨兵是redis高可用性的解决方案:有一个或多个sentinal实例组成的sentinel系统可以监视多个主服务器,以及主服务器属下的从服务器。并在被监视的主服务器下线状态时,从主服务器属下的某个从服务器升级为新的主服务器代替原来的主服务器继续执行命令请求。

  1. 启动并初始化sentinal
    使用命令redis-server /path/to/your/sentinel.conf --sentinal或者redis-sentinel /path/to/your/sentinel.conf来启动sentinel
    将执行以下步骤:

    1)初始化服务器
    2)将普通redis服务器使用的代码替换成sentinel专用代码
    3)初始化sentinel的状态。
    4)根据给定的配置文件,初始化sentinel的监视主服务器列表
    5)创建连向主服务器的网络连接

初始化服务器
sentinel本质是一个是一个运行在特殊模式下的redis服务器,sentinel执行的工作和普通的redis服务器不同,sentinel的初始化过程和普通的redis的初始化过程不完全相同,有的功能普通redis服务器需要,但是sentinel服务器却不需要比如持久化和set,delete这种。具体如下图。
在这里插入图片描述
使用sentinel专用代码
第二个步骤就是将一部分的普通服务器的代码替换成sentinel服务器专用代码
比如修改端口号,普通redis服务器使用6379端口号,除此之外,snetinel还会使用sentinel服务器专用命令表,而不是普通redis服务器命令表

初始化sentinel状态

sentinelState保存了sentinel的状态

在这里插入图片描述
初始化sentinel的状态的master属性
master字典记录了所有被sentinel监视的主服务器的相关信息,其中
字典的键是监视的主服务器的名字,字典的值是被监视的主服务器sentinelRedisIntance结构
在这里插入图片描述

其中addr属性是一个指向sentinel.c/sentinelAddr结构的指针结构如下:
在这里插入图片描述
它保存着实例的ip和端口号

创建连上主服务器的网络连接
对于每个被sentinel监视的主服务器,sentinel会创建连向主服务器的异步网络连接:
一个是命令连接,用于向主服务器发送命令
另一个是订阅连接,用于专门订阅主服务器上的_sentinel_:hello频道

获取主服务器的信息
sentinel默认会以每10秒一次的频率,向被监控的主服务器发送info命令,并通过分析info命令的回复分析主服务器的当前信息。
得到类似下面的回复
在这里插入图片描述
一方面是主服务器自己的信息,主服务器的run id和role属性,另一方面是主服务器所属的从服务器的信息根据这些信息会对redisServerInstance做一个修改

获取从服务器的信息

当主服务器有新的从服务器,sentinel除了会为这个从服务器创建相应的实例结构,sentinel还会创建连接从服务器的命令连接和订阅连接

向主服务器和从服务器发送消息

在默认情况下,sentinel会以每两秒一次的频率,通过命令连接向所有的被监视的主服务器和从服务器发送命令
在这里插入图片描述

在这里插入图片描述
也可以通过订阅_sentinel_:hello连接来接收信息

更新sentinel字典的键是另一个sentinel的名字,格式为ip:port,value是sentinel的实例结构。
接收来自另一个sentinel的信息,提取出另一个另一个sentinel的ip,端口,运行id,配置纪元等信息
与主服务器相关的参数,源sentinel监视的主服务器的信息ip,端口,运行id,配置纪元

创建连向其他sentinel的命令连接

sentinel通过频道发现新的sentinel时不仅会为它创建实例结构,还会向新的sentinel创建实命令连接,最终监视同一主服务器的多个sentinel形成相互连接的网络

检查主观下线状态
在默认情况下Sentinel会以每两秒一次的频率向它创建命令连接的实例(包括主服务器,从服务器,其他sentinel在内)发送ping命令,并通过ping命令的回复判断是否下线,回复分为两种,有效回复和无效回复,有效回复分为pong,loading和masterdown三种,其他都为无效回复,或者在指定时间内没有回复
sentinel配置文件的 down-after-millseconds就是配置主观下线时间长度

检查客观下线状态,当sentinel将一个主服务器判断为主观下线之后,为了确认这个主服务器是否下线,他会向监视这一主服务器的sentinel进行询问。

sentinel使用 sentinel is-master-down-by-addr <current_epoch> 询问其他sentinel是否同意主服务器下线,其他sentinel接收到消息,回去检查主服务器是否下线,然后向源sentinel返回一条包含三个参数的multi bulk作为回复
down_state
leader_runid
leader_epoch
是否下线的状态,目标sentinel的领头sentinel的runid 和配置纪元
目标sentinel接收回复后,统计判断客观下线所需要的数量,sentinel会将主服务器对应的实例结构的flags属性得sri_0_down打开表示该主服务器进入了客观下线状态
当主服务器被检查为客观下线,监视这个主服务器的sentinel会进行协商会选举出一个领头的sentinel并由领头的sentinel对下线的主服务器进行故障转移操作。配置纪元是计数器,所有的sentinel都有被选举为领头sentinel的资格,每一个发现主服务器的sentinel都会向目标sentinel发送is_master_down_by_addr命令这次的runid不是而是源sentinel的id,sentinel设置局域领头sentinel的规则是先到先得。如果某个sentinel被半数以上得sentinel设置为领头sentinel。那么这个sentinel就被设置为领头sentinel,由这个领头的sentinel进行故障转移。
故障转移会从已下线的主服务器的所有从服务器中挑选一个从服务器,并将其转换为主服务器。
让从服务器去复制新的主服务器
下线的主服务器称为新的主服务器的从服务器

挑选出一台状态最好的发送slaveOF one升级从服务器,sentinel以每秒一次的频率向被升级的从服务器发送info命令观察回复中的角色,当角色从slave变成master时,表示升级成功
修改其他从服务器的目标,执行slaveOF命令,与主服务器进行同步

将已下线的主服务器设置为主服务器的从服务器,当它上线时,会自动主服务器发送slaveOf命令,进行同步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值