缓存系列四|你知道redis的高可用策略么?

缓存系列四|你知道redis的高可用策略么?

什么是sentinel机制?

sentinel 是Redis提供的高可用解决方案。由一个或者多个sentinel 实例组成的sentinel系统可以任意监视多个master(主)服务器,以及这些master(主)服务器属下的所有Follower(从)服务器,并在被监视的master(主)服务器进入下线状态时,自动将下线master(主)服务器属下的某个Follower(从)服务器升级为新的master(主)服务器,然后由新的master(主)服务器代替已下线的master(主)服务器继续处理命令请求。

如何判断主服务器下线?

判断主服务器下线分为主观下线和客观下线两个步骤

主观下线

Sentinel 默认会以每秒一次的频率向所有与它创建了命令连接的实例发送PING命令,并通过实例返回的回复来判断实例是否在线。如果master实例连续一定时间(默认是50000毫秒,可以配置)内向Sentinel 返回无效时,sentinel则会将该master标记为主观下线。

客观下线

当Sentinel将一个主服务器判断为主观下线之后,为了确认这个主服务器是否真的下线了,它会向同样监视这一主服务器的其他Sentinel进行询问,如果是从其他的Sentinel那里接收到足够数量(可配置,比如配置超过半数)的已经下线的判断之后,Sentinel就会将主服务器判定为客观下线,并对主服务器执行故障转移操作。

确定主服务器下线后,sentinel会怎么做?

选举出leader Sentinel

当一个主服务器被判断为客观下线时,监视这个下线主服务器的各个Sentinel会进行协商,选举出一个领头的Sentinel,并由领头Sentinel对下线主服务器执行故障转移操作。那么如何选举出leader Sentinel呢,该选举策略是基于Raft算法的领头选举方法的实现。

有以下几个步骤:

在各个Sentinel未发现有主服务器是下线时,所有Sentinel都是平等的状态。确认主服务已经客观下线的Sentinel实例会向其他实例发送将自身设置为Leader的请求,如果此时有多个Sentinel都向其他Sentinel发送相关请求,则按照先到先得的规则,最先向目标Sentinel发送设置要求的源Sentinel将成为目标Sentinel的leader,而之后接受到的所有设置的要求都会被目标Sentinel拒绝。如果有Sentinel被超过半数的Sentinel标志为leader,就会被选举为leader,如果在给定时限内,没有一个Sentinel被选举为leader,会发起重新选举,直到选出leader为止。那要如何保证不会出现一直都选不出leader,陷入僵局的情况呢?

每次选举都会增加一次计数,称为任期,可以理解为一种时间同步。如果在一个任期内,没有一个Sentinel获得超过半数投票成为leader,那么等待超过2倍故障转移的超时时间后,任期加1,重新投票,各个sentinel投票的启动时间是1秒内的随机时间,这使得各个sentinel发起投票的时间不同,先发起的Sentinel 会被选为leader,这种随机启动时间的设置,可以大大降低陷入僵局选不出leader的情况,一般在1-2个任期内就可以选取leader进行故障转移。执行完成故障转移后,所有Sentinel又会恢复平等的状态。

故障转移

选出新的主服务器

故障转移操作第一步要做的就是在已下线主服务器属下的所有从服务器中,挑选出一个状态良好,数据完整的从服务器,然后将这个从服务器转换为主服务器。

以下按照优先级,一项一项的对列表进行过滤:

删除列表中所有处于下线或者断线状态的从服务器,这可以保证列表中剩余的从服务器都是正常在线的。

删除列表中所有最近5秒内没有回复过Sentinel leader 的info 命令的从服务器,这可以保证列表中剩余的从服务器都是最近成功进行过通信的。

删除所有与已下线主服务器连接断开超过一定时间(可以配置的)的从服务器,保证列表中剩余的从服务器都没有过早地与主服务器断开连接。

Sentinel leader 根据从服务器的优先级(可配置),对列表中剩余的从服务器进行排序,并选出其中优先级最高的从服务器,优先级相同的,优先选复制偏移量较大的,如果复制偏移量也相同,则按照运行的id对这些从服务器进行排序,选出其中运行id最小的从服务器。

修改从服务器的复制目标

当新的主服务器出现之后,领头Sentinel下一步要做的就是,让已下线主服务器属下的所有从服务器去复制新的主服务器,这一动作可以通过向从服务器发送SLAVEOF命令来实现。

将旧的主服务器变为从服务器

故障转移最后要做的事,将已下线的主服务器设置为新的主服务器的从服务器。

 我是榕树,先后就职于多家国内大型互联网公司,现在正从事基础组件以及监控相关的研发工作,欢迎关注我下面的号:不落叶的榕树,通过该号总结分享技术。欢迎搬好小板凳,在榕树下聊聊技术。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值