面向小白的SpringBoot的Redis的哨兵初始化节点解析

192 阅读2分钟

这是我参与2022首次更文挑战的第24天,活动详情查看:2022首次更文挑战

昨天我们手动实现了Redis的操作,是不是玩的非常爽呢?那接下来,我们就来了解下Redis的哨兵操作,那什么是哨兵呢?实际上是Redis给我们的一种高可用的解决方案。

什么是高可用?就是一个系统经过设计,尽量减少停工时间。

怎么设计呢?搞一主多从,如果主节点宕机了,剩下的多个从节点就商量谁把主节点的故障进行转移,Redis哨兵呢集成了我们的监控、通知、故障迁移。当然还可以通过哨兵节点获取Master,带一个服务发现的功能。

JedisSentinelPool

我们可以看到这个构造方法,是初始化用的,设置了一些属性,sentinels 就是需要和Redis打交道的这个sentinels,可以是多个,然后有一个masterName,一会会讲到,是主节点的名字,剩下的我们先不看,往下走。

image.png

往下走,我们看到一个初始化方法,如下:

image.png

点进去我们可以看到是把所有的sentinel取出来,把ip和端口解析出来,重新初始化一个jedis用于连通sentinel。 image.png

接下来是根据MasterName来获取一个主节点,主节点有两个值,分别是host和port用List保存,如果为空或者大小不为2,代表没有获取到,就打印个日志,然后下一个。 image.png

找到之后呢?就不再遍历了,没找到就下一个 image.png

如果找遍了所有都没有找到,然后这个从节点还可用,说明什么?说明存活的从节点没有监听这个主节点,抛异常,你活着不监听还能叫哨兵? image.png

如果找遍了所有都没有找到,然后这个从节点还不可用,说明什么?说明全部阵亡。 image.png

走到这,说明找到主节点,然后把每个从节点都监听这个主节点,然后开启监听器 image.png

然后把这个主节点,放到池子里,初始化的工作就完成了。

image.png

也不难吧。