redis使用哨兵主从切换,程序应该做点什么?

127 阅读1分钟

概述

哨兵通过监控master,如果发现master未回复心跳包,那么会判断为主观下线,票数过半哨兵都认为master主观下线,那么确认为master客观下线,那么接下来会在多个哨兵中选择一个作为leader,去做master切换工作。切换了新的master,通知客户端连接新的master.那么问题来了,程序那边怎么知道新master地址多少?应用程序那边需要做什么改变吗?

引入依赖

//springboot项目集成redis
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

增加配置

//1.配置不再直接配置redis节点地址,而是配置哨兵地址
//2.master下线判断,以及选择新的master哨兵是最清楚的,所以只要保持和哨兵通信即可
//3.程序内部还是依旧直接使用 RedisTemplate
spring:
  redis:
   //哨兵配置
    sentinel:
     master: "mymaster"
     nodes: "sentinel-host:sentinel-port"

效果(我是部署在阿里云机器,bind没设置,导致不能外部访问,报错忽略,看自动切换效果即可)

正常连接的是我的master,10.42.0.61:6379 image.png

杀死master后,连接了新的master, 10.42.0.62:6379

image.png