实现故障恢复自动化:详解Redis哨兵技术
Jedis客户端对哨兵提供了很好的支持。如上述代码所示,我们只必要向Jedis提供哨兵节点荟萃和masterName,结构Jedis SentinelPool工具;然后便可以像行使平凡Redis毗连池一样来行使了:通过pool.getResource获取毗连,执行详细的呼吁。 在整个进程中,我们的代码不必要显式的指定主节点的地点,就可以毗连到主节点;代码中对妨碍转移没有任何浮现,就可以在哨兵完成妨碍转移后自动的切换主节点。之以是可以做到这一点,是由于在JedisSentinelPool的结构器中,举办了相干的事变,首要包罗以下两点: 遍历哨兵节点,获取主节点信息:遍历哨兵节点,通过个中一个哨兵节点+masterName得到主节点的信息;该成果是通过挪用哨兵节点的sentinel get-master-addr-by-name呼吁实现,该呼吁示譬喻下: 一旦得到主节点信息,遏制遍历(因此一样平常来说遍历到第一个哨兵节点,轮回就遏制了)。 增进对哨兵的监听:这样当产生妨碍转移时,客户端便可以收到哨兵的关照,从而完成主节点的切换。详细做法是:操作Redis提供的宣布订阅成果,为每一个哨兵节点开启一个单独的线程,订阅哨兵节点的+switch-master频道,当收到动静时,从头初始化毗连池。 3.总结 通过客户端道理的先容,可以加深对哨兵成果的领略,如下: 设置提供者:客户端可以通过哨兵节点+masterName获取主节点信息,在这里哨兵起到的浸染就是设置提供者。 必要留意的是,哨兵只是设置提供者,而不是署理。二者的区别在于:
举一个例子可以很好的领略哨兵的浸染是设置提供者,而不是署理。在前面陈设的哨兵体系中,将哨兵节点的设置文件举办如下修改: 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节点差异。在运维中,我们可以通过这些呼吁查询或修改哨兵体系;不外更重要的是,哨兵体系要实现妨碍发明、妨碍转移等各类成果,离不开哨兵节点之间的通讯,而通讯的很大一部门是通过哨兵节点支持的呼吁来实现的。下面先容哨兵节点支持的首要呼吁: 基本查询: 通过这些呼吁,可以查询哨兵体系的拓扑布局、节点信息、设置信息等。
增进/移除对主节点的监控: 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呼吁扣问其他哨兵节点该主节点的状态;假如判定主节点下线的哨兵数目到达必然数值,则对该主节点举办客观下线。 必要出格留意的是,客观下线是主节点才有的观念;假如从节点和哨兵节点产生妨碍,被哨兵主观下线后,不会再有后续的客观下线和妨碍转移操纵。 推举率领者哨兵节点:当主节点被判定客观下线往后,各个哨兵节点会举办协商,推举出一个率领者哨兵节点,并由该率领者节点对其举办妨碍转移操纵。 (编辑:河北网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |