您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    超片面散布式缓存高可用方案:哨兵机制
    时间:2020-11-26 12:03 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    开发任务中关于散布式缓存高可用方案(搭建Redis缓存高可用方案),Redis主从架构下是如何保证高可用的呢?

    我们知道是运用了哨兵机制来完成。那Redis 效劳部署的哨兵形式主要是什么,又处置了什么成绩呢,于是应用周末时间整理了下,置信看完这篇文章,你也可以去给别人做技术分享了。O(∩_∩)O哈哈~

    成绩铺垫

    在讨论哨兵形式之前,我们先来看一个运用成绩: Redis效劳主机宕机

    实践运用进程中,会出现master宕机的状况(这样会招致没有写效劳,只要读效劳)。那我们要保证效劳的可用,就需求从其他salve节点中选取一个来作为master节点,来继续提供效劳才能。

    那主要的举措笼统下:

    将宕机的master下线

    找一个slave作为master

    通知一切的slave衔接新的master

    全量数据或许部分数据同步

    其中存在几个成绩:

    谁来确认master宕机?(假设仅仅是网络颤动了一下,就把我宕掉么?)

    如何从slave中找一个master替代,谁来找?怎样找?有什么依据?

    修正配置后,原始的主恢复了怎样办?

    其实引入 哨兵机制 ,就可以很好的处置上述成绩。

    超片面散布式缓存高可用方案:哨兵机制

    哨兵-Redis集群

    什么是哨兵?

    Sentinel(哨兵)是Redis 的高可用性处置方案:由一个或多个Sentinel 实例组成的Sentinel 系统可以监视恣意多个主效劳,以及这些主效劳器属下的一切从效劳,并在被监视的主效劳进入下线(不可效劳)形状时,自动将下线主效劳器属下的某个从效劳器晋级为新的主效劳器。

    总结一下哨兵的作用:

    集群监控

    不断的反省master和slave能否正常运转(master存活检测、master与slave运转状况检测)

    音讯通知

    当被监控的效劳器出现成绩时,向其他哨兵、客户端发送通知

    自动缺点转移

    断开缺点master与slave的衔接,选取一个slave作为新master,将其他slave衔接到新的master并告知客户端新的效劳器地址。

    留意:哨兵也是一台Redis效劳器,只是不提供数据效劳;通常哨兵配置的数量为双数。

    哨兵的任务原理

    下面主要针对哨兵在停止缺点转移进程中阅历的三个阶段辨别停止阐述。

    1、集群监控

    step1:哨兵1衔接到Redis集群

    发送info命令到master,并树立cmd衔接;

    哨兵端保存哨兵形状(SentinelStatus),保存一切哨兵形状,主节点和从节 点的信息;master端会记载 redis 实例的信息(SentinelRedisInstance);

    哨兵依据master中获取的每个slave信息,去衔接每个slave,发送异样也是info命令。

    集群监控

    step2:哨兵2参加出去后

    异样会发送info命令到master节点,并树立cmd衔接;

    发现master中存在其他哨兵节点的信息,哨兵2中保存哨兵信息(区别与哨兵1的是它保存了哨兵1和哨兵2的2个哨兵节点信息);

    为了每个哨兵的信息都分歧它们之间树立了一个发布订阅。为了哨兵之间的信息长期对称它们之间也会互发 ping 命令。

    集群监控

    step3:哨兵3参加后

    异样停止哨兵1、2的举措,会发送info命令到master节点,并树立cmd衔接;

    为了保证哨兵1-哨兵2之间的信息是同步的,树立了一个发布订阅的一个队列(可以互发ping命令)

    集群监控

    小结一下:

    Sentinel会向master、slave以及其他Sentinel获取形状;

    Sentinel之间会组建“对应频道”,大家一同发布信息、订阅信息、收信息、同步信息等。

    2、音讯通知

    1)Sentinel节点会经过master/slave 节点树立的cmd衔接获取其任务形状

    2)Sentinel收到反应结果之后,会在哨兵外部停止信息的互通

    音讯通知

    3、缺点转移

    关于缺点转移,严厉来讲可划分两个步骤: 缺点判定 、 缺点转移 。

    Q1:如何判别一个节点出现缺点?

    哨兵会不断给主节点发送 publish sentinel:hello

    直到主节点缺点,哨兵报出 sdown,同时此哨兵还会向其他哨兵发布音讯说这个主节点挂了。发送的指令是 sentinel is-master-down-by-address-port。

    其他的哨兵接纳到指令后,主节点挂了吗?让我去看看究竟挂没挂。发送的信息也是 hello。

    其他的哨兵也会发送他们收到的信息并且发送指令 sentinel is-master-down-by-address-port 到本人的内网,确认一下第一个发送 sentinel is-master-down-by-address-port 的哨兵说你说的对,这个家伙确实挂了。

    当一切人都以为主节点挂了后就会修正其形状为 odown。

    当一个哨兵以为主节点挂了标记的是 sdown,当半数哨兵都以为挂了其标记的形状是 odown。

    一个哨兵以为master节点挂了称为客观下线(sdown),超半数哨兵以为master节点挂了则称为客观下线(odown)。

    Q2:如何停止缺点转移?

    1)首先,哨兵选举出哨兵Leader去处置缺点转移

    此时选举方式运用的是Raft协议,这个之前有过引见,感兴味的同窗可以移步了解: 

    2)其次,哨兵Leader从一切的slave节点找出一个作为master节点

    主要的规则:

    选择在线的节点,pass掉已下线的节点;

    选择照应速度快的,pass掉照应慢的节点

    选择与原master断开时间短的,pass掉断开时间较长的;

    假设以上优先级均分歧,会思索其他优先准绳:

    偏移量较大

    假设说 slave1 的 offset 为 50,slave2 偏移量为 55,则哨兵就会选择 slave2 为新的主节点。

    runid偏大的

    这点相似于职场中的论资排辈,也就说依据 runid 的创立时间来判别,时间早的先上位。

    3)数据转移

    新master上任:Sentinel向新的master发送slaveof no one

    其他slave周知:向其他slave发送slaveof 新master IP端口

    总结

    Redis 主从复制的作用中有这么一句话“主从复制是高可用的基石”,那完成高可用必不可少的就是哨兵和集群。

    1、Sentinel的作用

    集群监控

    不断的反省master和slave能否正常运转(master存活检测、master与slave运转状况检测)

    音讯通知

    当被监控的效劳器出现成绩时,向其他哨兵、客户端发送通知

    自动缺点转移

    断开缺点master与slave的衔接,选取一个slave作为新master,将其他slave衔接到新的master并告知客户端新的效劳器地址。

    2、Sentinel的任务方式

    每个Sentinel以每秒钟一次的频率向它所知的Master,Slave以及其他 Sentinel 实例发送一个 PING 命令

    假设一个实例(Instance)距离最后一次有效回复 PING 命令的时间超过 down-after-milliseconds 选项所指定的值, 则这个实例会被 Sentinel 标记为客观下线。

    若 Master 重新向 Sentinel 的 PING 命令前往有效回复, Master 的客观下线形状就会被移除。

    假设一个Master被标记为客观下线,则正在监视这个Master的一切 Sentinel 要以每秒一次的频率确认Master确实进入了客观下线形状。

    当有足够数量的 Sentinel(>=配置文件指定的值)在指定的时间范围内确认Master确实进入了客观下线形状, 则 Master会被标记为客观下线  

    若没有足够数量的 Sentinel 赞同 Master 曾经下线, Master 的客观下线形状就会被移除。

    在普通状况下, 每个 Sentinel 会以每 10 秒一次的频率向它已知的一切Master,Slave发送 INFO 命令

    当Master被 Sentinel 标记为客观下线时,Sentinel 向下线的 Master 的一切 Slave 发送 INFO 命令的频率会从 10 秒一次改为每秒一次

    【编辑引荐】

    需求5G室内系统的三个缘由

    无效劳和微效劳架构,谁是业务计算的未来?

    国际首个具有自主知识产权的新一代云架构信誉卡中心业务系统StarCard上线一周年

    夜深人静了,我们来学学散布式锁

    Android 12 将使操作系统更新更容易:可经过运用商店更新

    (责任编辑:admin)