加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

实现故障恢复自动化:详解Redis哨兵技术

发布时间:2018-11-06 15:13:22 所属栏目:编程 来源:DBAplus社群
导读:在前面分享的《读完这篇文章,就根基搞定了Redis主从复制》中我们曾提到,Redis主从复制的浸染稀有据热备、负载平衡、妨碍规复等;但主从复制存在的一个题目是妨碍规复无法自动化。本文将要先容的哨兵,它基于Redis主从复制,首要浸染即是办理主节点妨碍恢

Jedis客户端对哨兵提供了很好的支持。如上述代码所示,我们只必要向Jedis提供哨兵节点荟萃和masterName,结构Jedis SentinelPool工具;然后便可以像行使平凡Redis毗连池一样来行使了:通过pool.getResource获取毗连,执行详细的呼吁。

在整个进程中,我们的代码不必要显式的指定主节点的地点,就可以毗连到主节点;代码中对妨碍转移没有任何浮现,就可以在哨兵完成妨碍转移后自动的切换主节点。之以是可以做到这一点,是由于在JedisSentinelPool的结构器中,举办了相干的事变,首要包罗以下两点:

遍历哨兵节点,获取主节点信息:遍历哨兵节点,通过个中一个哨兵节点+masterName得到主节点的信息;该成果是通过挪用哨兵节点的sentinel get-master-addr-by-name呼吁实现,该呼吁示譬喻下:

实现妨碍规复自动化:详解Redis哨兵技能

一旦得到主节点信息,遏制遍历(因此一样平常来说遍历到第一个哨兵节点,轮回就遏制了)。

增进对哨兵的监听:这样当产生妨碍转移时,客户端便可以收到哨兵的关照,从而完成主节点的切换。详细做法是:操作Redis提供的宣布订阅成果,为每一个哨兵节点开启一个单独的线程,订阅哨兵节点的+switch-master频道,当收到动静时,从头初始化毗连池。

3.总结

通过客户端道理的先容,可以加深对哨兵成果的领略,如下:

设置提供者:客户端可以通过哨兵节点+masterName获取主节点信息,在这里哨兵起到的浸染就是设置提供者。

必要留意的是,哨兵只是设置提供者,而不是署理。二者的区别在于:

  • 假如是设置提供者,客户端在通过哨兵得到主节点信息后,会直接成立到主节点的毗连,后续的哀求(如set/get)会直接发向主节点;

  • 假如是署理,客户端的每一次哀求城市发向哨兵,哨兵再通过主节点处理赏罚哀求。

举一个例子可以很好的领略哨兵的浸染是设置提供者,而不是署理。在前面陈设的哨兵体系中,将哨兵节点的设置文件举办如下修改:

sentinel monitor mymaster 192.168.92.128 6379 2

改为

sentinel monitor mymaster 127.0.0.1 6379 2

然后,将前述客户端代码在局域网的其它一台呆板上运行,会发明客户端无法毗连主节点;这是由于哨兵作为设置提供者,客户端通过它查询到主节点的地点为127.0.0.1:6379,客户端会向127.0.0.1:6379成立Redis毗连,天然无法毗连。假如哨兵是署理,这个题目就不会呈现了。

关照:哨兵节点在妨碍转移完成后,会将新的主节点信息发送给客户端,以便客户端实时切换主节点。

四、根基道理

前面先容了哨兵陈设、行使的根基要领,本部门先容哨兵实现的根基道理。

1.哨兵节点支持的呼吁

哨兵节点作为运行在非凡模式下的Redis节点,其支持的呼吁与平凡的Redis节点差异。在运维中,我们可以通过这些呼吁查询或修改哨兵体系;不外更重要的是,哨兵体系要实现妨碍发明、妨碍转移等各类成果,离不开哨兵节点之间的通讯,而通讯的很大一部门是通过哨兵节点支持的呼吁来实现的。下面先容哨兵节点支持的首要呼吁:

基本查询:

通过这些呼吁,可以查询哨兵体系的拓扑布局、节点信息、设置信息等。

  • info sentinel:获取监控的全部主节点的根基信息。

  • sentinel masters:获取监控的全部主节点的具体信息。

  • sentinel master mymaster:获取监控的主节点mymaster的具体信息。

  • sentinel slaves mymaster:获取监控的主节点mymaster的从节点的具体信息。

  • sentinel sentinels mymaster:获取监控的主节点mymaster的哨兵节点的具体信息。

  • sentinel get - master - addr - by- name mymaster:获取监控的主节点mymaster的地点信息,前文已有先容。

  • sentinel is-master-down-by-addr:哨兵节点之间可以通过该呼吁扣问主节点是否下线,从而对是否客观下线做出判定。

增进/移除对主节点的监控:

sentinel monitor mymaster2 192.168.92.128 16379 2:与陈设哨兵节点时设置文件中的sentinel monitor成果完全一样,不再详述。

sentinel remove mymaster2:打消当前哨兵节点对主节点mymaster2的监控。

逼迫妨碍转移:

sentinel failover mymaster:该呼吁可以逼迫对mymaster执行妨碍转移,即便当前的主节点运行齐备;譬喻,假如当前主节点地址呆板即将报废,便可以提前通过failover呼吁举办妨碍转移。

2.根基道理

关于哨兵的道理,要害是相识以下几个观念:

按时使命:每个哨兵节点维护了3个按时使命。按时使命的成果别离如下:通过向主从节点发送info呼吁获取最新的主从布局;通过宣布订阅成果获取其他哨兵节点的信息;通过向其他节点发送ping呼吁举办心跳检测,判定是否下线。

主观下线:在心跳检测的按时使命中,假如其他节点高出一按时刻没有回覆,哨兵节点就会将其举办主观下线。顾名思义,主观下线的意思是一个哨兵节点“主观地”判定下线;与主观下线相对应的是客观下线。

客观下线:哨兵节点在对主节点举办主观下线后,会通过sentinel is-master-down-by-addr呼吁扣问其他哨兵节点该主节点的状态;假如判定主节点下线的哨兵数目到达必然数值,则对该主节点举办客观下线。

必要出格留意的是,客观下线是主节点才有的观念;假如从节点和哨兵节点产生妨碍,被哨兵主观下线后,不会再有后续的客观下线和妨碍转移操纵。

推举率领者哨兵节点:当主节点被判定客观下线往后,各个哨兵节点会举办协商,推举出一个率领者哨兵节点,并由该率领者节点对其举办妨碍转移操纵。

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读