Springboot + Redis 哨兵模式

Springboot + Redis 哨兵模式RedisSentine 是一个分布式系统 你可以在一个架构中运行多个 Sentinel 进程 progress 这些进程使用流言协议 gossipprotoc 来接收关于主服务器是否下线的信息 并使用投票协议 agreementpro 来决定是否执行自动故障迁移 以及选择哪个从服务器作为新的主服务器

目录

Redis配置

redis.conf配置

sentinel.conf配置

Springboot整合

导入包

properties配置

测试

代码示例

模拟redis宕机


Redis配置

redis.conf配置

由于服务器资源有限,我这里通过配置不同端口,模拟Redis集群,redis-server占用6379、6380、6381端口,redis-sentinel占用26379、26380、26381端口。

首先准备3份redis配置文件,分别取名redis6379.conf,redis6380.conf,redis6381.conf

  • redis6379.conf,6379端口作为master,需要修改的配置如下
protected-mode no #设置为NO,其他IP才可以访问 port 6379 #端口 daemonize yes pidfile "/var/run/redis_6379.pid" logfile "6379.log" #日志,若redis分布在不同服务器,不用修改 dbfilename "dump6379.rdb" #数据,若redis分布在不同服务器,不用修改 masterauth "admin123/*-" #从节点访问主节点时需要的密码 requirepass "admin123/*-" #redis密码,应用访问redis时需要
  • redis6380.conf,6380端口作为slave,需要设置主节点ip和port,需要修改的配置如下:
protected-mode no #设置为NO,其他IP才可以访问 port 6380 #端口 daemonize yes pidfile "/var/run/redis_6380.pid" logfile "6380.log" #日志,若redis分布在不同服务器,不用修改 dbfilename "dump6380.rdb" #数据,若redis分布在不同服务器,不用修改 replicaof 192.168.1.1 6379 #标记主节点ip+端口,IP设置为自己服务器IP地址即可 masterauth "admin123/*-" #从节点访问主节点时需要的密码 requirepass "admin123/*-" #redis密码,应用访问redis时需要 

备注:slaveof 192.168.1.1 6379,这里需要设置成你自己的IP,可实现Redis 复制功能

  • redis6381.conf,6381端口作为slave,同上,需要修改的配置如下:
protected-mode no #设置为NO,其他IP才可以访问 port 6381 #端口 daemonize yes pidfile "/var/run/redis_6381.pid" logfile "6381.log" #日志,若redis分布在不同服务器,不用修改 dbfilename "dump6381.rdb" #数据,若redis分布在不同服务器,不用修改 replicaof 192.168.1.1 6379 #标记主节点ip+端口,IP设置为自己服务器IP地址即可 masterauth "admin123/*-" #从节点访问主节点时需要的密码 requirepass "admin123/*-" #redis密码,应用访问redis时需要

sentinel.conf配置

准备3分sentinel.conf配置文件,分别为sentinel26379.conf、sentinel26380.conf、sentinel26381.conf。

  • sentinel26379.conf,26379端口作为哨兵1,需要修改配置如下
port 26379 #端口 daemonize yes pidfile "/var/run/redis-sentinel26379.pid" logfile "/usr/local/bin/sentinelLogs/sentinel_26379.log" #配置指示 Sentinel 去监视一个名为 mymaster 的主节点, 主节点的 IP 地址为 127.0.0.1 , 端口号为 6379 , #而将这个主服务器判断为失效至少需要 2 个 Sentinel 同意 (只要同意 Sentinel 的数量不达标,自动故障迁移就不会执行) sentinel monitor mymaster 192.168.1.1 6379 2 sentinel auth-pass mymaster admin123/*- #哨兵访问主节点密码 protected-mode no
  • sentinel26380.conf,26380端口作为哨兵2,需要修改配置如下
port 26380 #端口 daemonize yes pidfile "/var/run/redis-sentinel26380.pid" logfile "/usr/local/bin/sentinelLogs/sentinel_26380.log" #配置指示 Sentinel 去监视一个名为 mymaster 的主节点, 主节点的 IP 地址为 127.0.0.1 , 端口号为 6379 , #而将这个主服务器判断为失效至少需要 2 个 Sentinel 同意 (只要同意 Sentinel 的数量不达标,自动故障迁移就不会执行) sentinel monitor mymaster 192.168.1.1 6379 2 sentinel auth-pass mymaster admin123/*- #哨兵访问主节点密码 protected-mode no
  • sentinel26381.conf,26381端口作为哨兵3,需要修改配置如下
port 26381 #端口 daemonize yes pidfile "/var/run/redis-sentinel26381.pid" logfile "/usr/local/bin/sentinelLogs/sentinel_26381.log" #配置指示 Sentinel 去监视一个名为 mymaster 的主节点, 主节点的 IP 地址为 127.0.0.1 , 端口号为 6379 , #而将这个主服务器判断为失效至少需要 2 个 Sentinel 同意 (只要同意 Sentinel 的数量不达标,自动故障迁移就不会执行) sentinel monitor mymaster 192.168.1.1 6379 2 sentinel auth-pass mymaster admin123/*- #哨兵访问主节点密码 protected-mode no
  • 启动redis-server,redis-sentinel
[root@VM-20-5-centos bin]# redis-server redis6379.conf [root@VM-20-5-centos bin]# redis-server redis6380.conf [root@VM-20-5-centos bin]# redis-server redis6381.conf [root@VM-20-5-centos bin]# redis-sentinel sentinel_26379.conf [root@VM-20-5-centos bin]# redis-sentinel sentinel_26380.conf [root@VM-20-5-centos bin]# redis-sentinel sentinel_26381.conf 

查看状态,如下图所示,即为启动成功

 [root@VM-20-5-centos mconfig]# redis-cli -p 26379 127.0.0.1:26379> sentinel masters 1) 1) "name" 2) "mymaster" 3) "ip" 4) "192.168.1.1" 5) "port" 6) "6379" 7) "runid" 127.0.0.1:26379> sentinel slaves mymaster 1) 1) "name" 2) "192.168.1.1:6381" 3) "ip" 4) "192.168.1.1" 5) "port" 6) "6381" 7) "runid" 8) "" 2) 1) "name" 2) "192.75.218.240:6380" 3) "ip" 4) "192.75.218.240" 5) "port" 127.0.0.1:26379> 

Springboot整合

导入包

 
    
    
      org.springframework.boot 
     
    
      spring-boot-starter-data-redis 
     
   

properties配置

spring.redis.host=192.168.1.1 spring.redis.port=6379 spring.redis.password=admin123/*- spring.redis.sentinel.master=mymaster spring.redis.sentinel.password=admin123/*- spring.redis.sentinel.nodes=192.168.1.1:26379,192.168.1.1:26380,192.168.1.1:26381

测试

代码示例

package com.mx.learnredis.controller; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.redis.core.RedisTemplate; import java.util.Date; @SpringBootTest class UserControllerTest { @Autowired @Qualifier("redisTemplate") private RedisTemplate redisTemplate; @Test public void test() throws InterruptedException { redisTemplate.opsForValue().set("user", "xx"); while (true) { Thread.sleep(2000); System.out.println("time "+new Date()+":" +redisTemplate.opsForValue().get("user")); } } }

模拟redis宕机

  • idea控制台输出:
  • 关闭掉主节点,登录linux服务器
  •  idea控制台输出,可看到重连日志,Success

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/223694.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午1:37
下一篇 2026年3月17日 下午1:38


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号