• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

SpringBoot结合Redis哨兵模式的实现示例

springboot 搞代码 4年前 (2022-01-05) 30次浏览 已收录 0个评论

这篇文章主要介绍了SpringBoot结合Redis哨兵模式的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

Redis哨兵模式

Redis Sentinel介绍

Redis Sentinel是Redis高可用的实现方案。Sentinel是一个管理多个Redis实例的工具,它可以实现对Redis的监控、通知、自动故障转移。

Redis Sentinel主要功能

Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务:

  • 监控(Monitoring):Sentinel 会不断地检查你的主服务器和从服务器是否运作正常。
  • 提醒(Notification):当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知。
  • 自动故障迁移(Automatic failover):当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作, 它会将失效主服务器的其中一个从服务器升级为新的主服务器, 并让失效主服务器的其他从服务器改为复制新的主服务器; 当客户端试图连接失效的主服务器时, 集群也会向客户端返回新主服务器的地址, 使得集群可以使用新主服务器代替失效服务器。

Redis Sentinel部署

Redis集群配置

Redis集群启动

复制3个reids.conf配置文件

 cp redis.conf /home/redis/redis6379.conf cp redis.conf /home/redis/redis6380.conf cp redis.conf /home/redis/redis6381.conf

修改reids.conf配置文件,以6379配置为例

 vim redis6379.conf #启用后台启动 daemonize yes #pidfile位置 pidfile "/home/redis/6379/redis6379.pid" #端口 port 6379 #日志文件位置 logfile "/home/redis/6379/log6379.log" #rdb备份文件名称 dbfilename "dump6379.rdb" #rdb<b style="color:transparent">来源gao@!dai!ma.com搞$$代^@码网</b>备份文件路径 dir "/home/redis/rdb/"

修改redis-slave配置文件,修改和master如上配置,6380、6381配置文件,新增如下

 slaveof 192.168.126.200 6379

先启动master服务,在启动slave服务

 master节点服务 ./redis-cli -p 6379 127.0.0.1:6379> info replication # Replication role:master connected_slaves:2 slave0:ip=192.168.126.200,port=6380,state=online,offset=975350,lag=1 slave1:ip=192.168.126.200,port=6381,state=online,offset=975350,lag=1 master_repl_offset:975495 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:2 repl_backlog_histlen:975494 slave节点服务 ./redis-cli -p 6380 # Replication role:slave master_host:192.168.126.200 master_port:6379 master_link_status:up master_last_io_seconds_ago:0 master_sync_in_progress:0 slave_repl_offset:989499 slave_priority:100 slave_read_only:1 connected_slaves:0 master_repl_offset:0 repl_backlog_active:0 repl_backlog_size:1048576 repl_backlog_first_byte_offset:0 repl_backlog_histlen:0

sentinel集群配置

编写sentinel配置文件,master配置

 touch sentinel1.conf vim sentinel1.conf #Sentinel节点的端口 port 26379 dir "/home/redis/sentinel" daemonize yes logfile "sentinel-26379.log" #当前Sentinel节点监控 127.0.0.1:6379 这个主节点 #代表判断主节点失败至少需要2个Sentinel节点节点同意 #mymaster是主节点的别名 sentinel monitor mymaster 192.168.126.200 6380 2 #每个Sentinel节点都要定期PING命令来判断Redis数据节点和其余Sentinel节点是否可达,如果超过30000毫秒且没有回复,则判定不可达 sentinel down-after-milliseconds mymaster 30000 #当Sentinel节点集合对主节点故障判定达成一致时,Sentinel领导者节点会做故障转移操作,选出新的主节点,原来的从节点会向新的主节点发起复制操作,限制每次向>新的主节点发起复制操作的从节点个数为1 sentinel leader-epoch mymaster 1 #故障转移超时时间为180000毫秒 sentinel failover-timeout mymaster 180000 #同理创建修改sentinel2.conf、sentinel3.conf配置文件

启动3台sentinel服务

 ./redis-sentinel /home/redis/sentinel1.conf ./redis-sentinel /home/redis/sentinel2.conf ./redis-sentinel /home/redis/sentinel3.conf

SpringBoot结合Redis哨兵模式

创建SpringBoot项目,添加依赖

  org.springframework.bootspring-boot-starter-data-redis org.springframework.bootspring-boot-starter-web org.springframework.bootspring-boot-starter-test org.projectlomboklombok<!--redis连接池--> org.apache.commonscommons-pool2

核心配置文件application.yml

 server: port: 80 spring: redis: lettuce: pool: # 连接池最大连接数(使用负值表示没有限制) 默认为8 max-active: 8 # 连接池中的最大空闲连接 默认为8 max-idle: 8 # 连接池最大阻塞等待时间(使用负值表示没有限制) 默认为-1 max-wait: -1ms # 连接池中的最小空闲连接 默认为 0 min-idle: 0 sentinel: # 主节点的别名 master: mymaster # sentinel服务的ip和端口 nodes: 192.168.126.200:26379,192.168.126.200:26380,192.168.126.200:26381

程序调用

 @RestController @RequestMapping("/redis") public class RedisController { // 使用SpringBoot封装的RestTemplate对象 @Autowired RedisTemplate redisTemplate; @RequestMapping("/get") public String get(String key) { String value = redisTemplate.opsForValue().get(key); return value; } @RequestMapping("/set") public String set(String key, String value) { redisTemplate.opsForValue().set(key, value); return "success"; } }

模拟故障

手动shutdown redis的master服务后,后台会尝试重连,当超过最大等待时间,无法连接后,sentinel会重新选举出一个新的master,程序获取到新的master节点,提供读写服务

以上就是SpringBoot结合Redis哨兵模式的实现示例的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:SpringBoot结合Redis哨兵模式的实现示例

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址