Redis高级篇-8 Redis哨兵通知Java代码客户端

凯哥java

共 2544字,需浏览 6分钟

 ·

2023-06-06 06:30

在上一篇,我们搭建哨兵集群的时候,已经验证了哨兵对集群的监控及故障转移功能。本文,咱们就来讲讲哨兵的第三个功能:通知。也就是RedisTemplate的哨兵模式。

在sentinel集群监管下的Redis主从集群,其节点会因为自动故障转移而发生变化,Redis的客户端必须感知这种变化,及时更新连接信息。spring的RedisTemplate底层利用lettuce实现了节点的感知和自动切换。下面,我们通过一个测试来实现RedisTemplate集成哨兵机制。

想要让RedisTemplate实现哨兵模式,操作步骤如下:

1:引入依赖;

2:配置senntinel相关信息;

3:配置读写分离

4:测试

一:引入依赖

在pom文件中引入相关依赖

         

             org.springframework.boot

             spring-boot-starter-data-redis

二:配置Redis sentinel相关信息

在配置文件application.yml中指定Redis的sentienl相关信息。

spring:

  redis:

    sentinel:

      master: mymaster #自定义的master名字

      nodes: # 指定Redis-sentinel集群地址

        - 192.168.1.11:27001

        - 192.168.1.11:27002

        - 192.168.1.11:27003

         198c9620414386b71f8e4171a37e2951.webp

三:配置lettuce读写分离

在项目中,添加配置类(可以在启动类中,也可以新写一个@Configuration的类),添加一个新的bean。如下:

@Bean

public LettuceClientConfigurationBuilderCustomizer clientConfigurationBuilderCustomizer(){

    return clientConfigurationBuilder -> {

        clientConfigurationBuilder.readFrom(ReadFrom.REPLICA_PREFERRED);

    };

}

         

51480aac988bebf68c683a6343eb75be.webp

这个bean中配置的就是读写策略:ReadFrom.REPLICA_PREFERRED。其中读写策略包括四种:

① MASTER:从主节点读取;

② MASTER_PREFERRED:优先从master节点读取,master不可用才读取replica

③ REPLICA:从slave(replica)节点读取;

④ REPLICA_PREFERRED:优先从slave(replica)节点读取,如果所有的slave都不可用的时候,才从master读取。

建议采用第四种方案。

四:测试

代码修改完成之后,刷新pom依赖,重启项目,查看启动日志。

注意:查看启动日志,将日志级别设置为debug。这样便于观察。

项目启动会,访问想Redis中set一个key.查看控制台日志:

因为sentinel是集群模式,项目启动后,要选择一个地址进行连接。

64fc66e9f5b4bcbc98fb20a5fad2860b.webp

lettuce采用订阅模式,订阅sentinel的

74f6651e097dbcd9124bd00479869343.webp

当执行set的时候,因为set是写操作,只能在master上进行写操作。所以,RedisTemplate会切换与7002这台master机器进行连接。如下图:

41d81032985344144e43e49742ee858c.webp

目前master是7002,我们关闭7002,由于sentinel监控了集群,会执行故障迁移,会产生一个新的master出来。我们关闭7002.当新master选举出来之后,在执行set命令。看看日志。

7002关闭后,我们从sentinel的日志中,可以看到7003成了新的master。如下图:

73b7485229d92debf7c447955586229f.webp

在选举出新master之前,项目会报错。控制台空的错误如下图:

4db3c6c8452ba7821f8d8eca52122462.webp

当新的master选举后,项目日志就正常了。我们在访问set,看看控制台日志:

755f05471ef242ab31566a2d0dd7249e.webp

主从切换自动完成。

执行读操作,因为我们设置读写模式是:优先slave,当所有slave都不可用的时候才选择master。因为当前我们slave都可用。所以任意选择。日志如下图:

4e866c23edd2e830311bf7476c30d447.webp

         

浏览 64
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报