Spring Boot整合Redis哨兵模式(双机热备)

Redis中的哨兵主要有两个作用:

  • 通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器(master)和从服务器(slave)。
  • 当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。

用文字描述一下故障切换(failover)的过程。假设主服务器宕机,哨兵1先检测到这个结果,系统并不会马上进行failover过程,仅仅是哨兵1主观的认为主服务器不可用,这个现象成为主观下线。当后面的哨兵也检测到主服务器不可用,并且数量达到一定值时,那么哨兵之间就会进行一次投票,投票的结果由一个哨兵发起,进行failover操作。切换成功后,就会通过发布订阅模式,让各个哨兵把自己监控的从服务器实现切换主机,这个过程称为客观下线

以上介绍摘自网络文章《Redis哨兵(Sentinel)模式》

介绍完哨兵模式后,我们会发现,java应用中我们按照常规的用法指定了redis的链接后,当主从服务进行了切换,我们的程序就无法正常运行了,因为我们配置的Master主机,已经宕机了,或者已经被切换为从机了,我们需要一个手段来自动将redis服务地址切换至新的主机。

从哨兵模式的介绍,我们可以看出,哨兵在进行主从切换的过程中会有广播,spring boot的redis配置中就有基于哨兵的配置,监听主机变化自动切换主机。

实现很简单,直接上代码:

1. 引入redis的starter包
<!-- 这个没有疑问,跟正常使用是一样的 -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2. 添加配置
# 该值为master服务器别名,与哨兵监听配置的名称一致,通常默认mymaster
spring.redis.sentinel.master=mymaster
# host:port,多个用","隔开
spring.redis.sentinel.nodes=192.168.0.1:26379,192.168.0.2:26379
3. 正常使用redistemplate即可
@Resource
private StringRedisTemplate stringRedisTemplate;