前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Spring Boot配置Redis Sentinel的例子

Spring Boot配置Redis Sentinel的例子

作者头像
颇忒脱
发布于 2019-07-02 06:24:00
发布于 2019-07-02 06:24:00
3K00
代码可运行
举报
运行总次数:0
代码可运行

原文地址:https://chanjarster.github.io...

本文介绍Spring Boot连接Redis Sentinel的例子。

本文关联的源码:github

基本信息

拓扑(M代表redis-master,S代表redis-sentinel,R代表redis-slave,C代表Spring Boot Application):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
     +---------------------------+
     |                           |
  +-----+       +-----+       +-----+
  |  M  |-------|  S  |-------|  R  |
  +-----+       +-----+       +-----+
     |             |
     |          +-----+
     +----------|  C  |
                +-----+

application.yaml配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spring:
  redis:
#    host: redis-master
#    port: 6379
    password: abc
    sentinel:
      master: springboot
      nodes:
        - redis-sentinel:26379

注意这里不需要配置master的host和port,这些信息会从Redis Sentinel中得到。

演示步骤

打包并构建镜像:mvn clean install dockerfile:build

进入docker目录,执行docker-compose up -d

观察Spring Boot Application的日志:docker logs -f docker_spring-boot_1,会发现每隔3秒执行INCR foo

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
07:53:49.205  INFO  hello.Application                    : INCR foo: 1
07:53:52.212  INFO  hello.Application                    : INCR foo: 2
07:53:55.213  INFO  hello.Application                    : INCR foo: 3
07:53:58.216  INFO  hello.Application                    : INCR foo: 4
07:54:01.217  INFO  hello.Application                    : INCR foo: 5

停止redis-master:docker stop docker_redis-master_1,会看到Spring Boot Application的Redis链接出现了问题:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
07:54:37.206  INFO  hello.Application                    : INCR foo: 17
07:54:40.204  INFO  hello.Application                    : INCR foo: 18
07:54:42.238  INFO  i.l.core.protocol.ConnectionWatchdog : Reconnecting, last destination was /10.0.19.4:6379
07:54:52.247  WARN  i.l.core.protocol.ConnectionWatchdog : Cannot reconnect: io.netty.channel.ConnectTimeoutException: connection timed out: /10.0.19.4:6379
...
07:55:22.560  INFO  i.l.core.protocol.ConnectionWatchdog : Reconnecting, last destination was 10.0.19.4:6379
07:55:22.842  WARN  i.l.core.protocol.ConnectionWatchdog : Cannot reconnect: io.netty.channel.AbstractChannel$AnnotatedNoRouteToHostException: Host is unreachable: /10.0.19.4:6379
...
07:55:29.582  INFO i.l.core.protocol.ConnectionWatchdog  : Reconnecting, last destination was 10.0.19.4:6379
07:55:32.353  WARN i.l.core.protocol.ConnectionWatchdog  : Cannot reconnect: io.netty.channel.AbstractChannel$AnnotatedNoRouteToHostException: Host is unreachable: /10.0.19.4:6379
...

等待大约60秒,Redis Sentinel介入,将redis-slave提拔为master,链接恢复:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
07:55:43.860  INFO i.l.core.protocol.ConnectionWatchdog  : Reconnecting, last destination was 10.0.19.4:6379
07:55:43.882  INFO i.l.core.protocol.ReconnectionHandler : Reconnected to 10.0.19.6:6379
07:55:43.887  INFO hello.Application                     : INCR foo: 20
07:55:43.889  INFO hello.Application                     : INCR foo: 21
07:55:43.891  INFO hello.Application                     : INCR foo: 22
07:55:43.892  INFO hello.Application                     : INCR foo: 23

此时拓扑变成这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
     +-------------//------------+
     |                           |
  +-----+       +-----+       +-----+
  |  M  |--//---|  S  |-------| [M] |
  +-----+       +-----+       +-----+
     |             |             |
     |          +-----+          |
     +----//----|  C  |----------+
                +-----+

清理容器docker-compose down

Master重启之后的问题

这个问题和Spring Boot没有关系,是Redis本身的。如果我们把前面停掉的master重启,sentinel是不会感知到这个master的,因为这个master的ip变了(见这个comment):

你可以观察重启之以后的master的INFO:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ docker exec docker_redis-master_1 redis-cli -a abc INFO replication
# Replication
role:master
...

可以看到它启动之后还是master,不是slave。这样的话就等于出现了两个master,这就出问题了。

BTW,redis的配置中可以使用hostname,比如slaveof redis-master。但是redis-sentinel,使用的是ip,即使你配置的是hostname,最终也是ip。执行下面命令可以看见sentinel的配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ docker exec docker_redis-sentinel_1 cat /bitnami/redis-sentinel/conf/sentinel.conf | grep springboot

sentinel monitor springboot 10.0.25.2 6379 1
sentinel down-after-milliseconds springboot 60000
sentinel auth-pass springboot abc
sentinel config-epoch springboot 0
sentinel leader-epoch springboot 0
sentinel known-slave springboot 10.0.25.5 6379

解决办法1:使用host network

使用host network来部署redis-master、redis-slave,使用<host-ip>:<container-port>来访问它们,因为host的ip是比较固定的,可以缓解这个问题。

用host network则还有一个限制:不能在同一个host上启动两个相同container-port的容器。

解决办法2:publish端口

把redis-master、redis-slave的端口publish到host上,redis.config中把slave-announce-ipslave-announce-port设置为host-ip和host-port,最后使用<host-ip>:<host-port>访问,同样也是利用host的ip固定特性来解决这个问题。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
为什么程序员都想拥有一台Mac电脑?
苹果电脑在电子类产品中算是另类了,特别受到程序员的青睐,有一次跟一个刚入行不久的同事聊天,近期准备出手买一个苹果电脑,苹果电脑肯定不是性价比最高的,为啥一定选择买个,做编程的怎么着也得拥有一个Mac电脑,满足自己的那份期待,这是典型的苹果情怀。
程序员互动联盟
2018/09/29
3.4K0
为什么程序员都想拥有一台Mac电脑?
一个月体验,终于懂了程序员为什么喜欢用MacBook!
在没用MacBook之前,一直不知道为什么各种文章说它就是程序员的标配?直到前段时间换了台Macbook,真香~
Python进击者
2019/11/12
4K0
代码我只服雷布斯!分享雷军22年前写的代码
身为小米科技的创始人、董事长和首席执行官,雷军的名字如雷贯耳。其实扒扒雷军的年轻时代,其实他大学读的是计算机专业,是程序员出身,而且一干就是10年。有网友曾说“代码只服雷军”。雷军的代码水平真的很牛吗
顶级程序员
2018/05/03
1.5K0
代码我只服雷布斯!分享雷军22年前写的代码
一个打算写一辈子代码的程序员
很多程序员喜欢称自己是码农,也就是写代码的农民,然而我从来不这么称呼我自己,一方面我觉得我还没有农民伯伯们辛苦,另一方面,我觉得我做的事情更像是一个设计师。
程序那些事儿
2023/03/07
2230
一个打算写一辈子代码的程序员
小米雷军:我的程序员人生
这篇文章是在雷总个人博客看到的,里面聊到了他作为程序员的一些经历、初衷以及思考。写的不错,转来给大家看看。
统计学家
2021/10/11
6030
雷军做程序员时写的博客,真心强啊!
这是「进击的Coder」的第 718 篇技术分享 来源:blog.sina.com.cn/leijun “ 阅读本文大概需要 6 分钟。 ” 这篇文章是在雷总个人博客看到的,里面聊到了他作为程序员的一些经历、初衷以及思考。写的不错,转来给大家看看。 如果程序人生的话,这条路太漫长。 我并非天生喜欢写程序,上高中时也没有想过程序员的生活。 我学电脑非常偶然,小时好友上大学时选择了计算机系,为了和这个朋友有更多的共同语言,我也选择了计算机系,开始步入程序人生的道路。 当我学会一些后,发现自己特别喜欢写程序。我
崔庆才
2022/09/13
9730
雷军做程序员时写的博客,真心强啊!
程序员,你离坐牢还有多远?
程序员是一个令人羡慕的高端职业,从业人员素质很高。一般不会干杀人放火强奸抢劫一类的坏事。所以,一般人认为,程序员与“坐牢”这个词没有什么相干。
用户5997198
2020/06/04
6550
程序员到底如何成为编程高手或以此创业?
每个IT企业,尤其是初创企业,非常苦恼:找不到好的程序员。现在大学、软件学院及各种培训机构,每年培养几十万的程序员,毕业的每个人都有同样困恼:找不到好的工作。问题出在哪里呢?
Spark学习技巧
2018/08/01
3450
程序员到底如何成为编程高手或以此创业?
一名普通java程序员如何成为一名高级架构师?
现在普通的java程序员多如牛毛,但真正站在金字塔顶端的程序员少的可怜,可以称之为可遇不可求,要成为一个高级架构师需要很多因素,除了自身因素之外还要需要外界环境激发,一个架构师首先是一个优秀的程序员,从事十几年始终自我定位也不是一个什么优秀的程序员,但有幸的在技术生涯持续过程中遇到几位真正的技术高手,在这尝试总结归纳下编程的习惯。
程序员互动联盟
2018/12/29
9670
作为一个会写代码的人,觉得自己最酷是什么时候?
从入行到现在代码已经十几年了,加入编程行业还是因为自己的一点小兴趣,程序员每个阶段的需求点是不一样的,所以让自己很兴奋的事情也会不相同。刚开始入行阶段,能够用代码写一个非常简单的功能都能兴奋的一晚上不睡觉,这是初级程序员最大的乐趣,毕竟从不会写代码到能写代码这种感觉是最美的,也是最兴奋的,不能称之为炫酷了应该是特别有意思。
程序员互动联盟
2019/06/19
7140
作为一个会写代码的人,觉得自己最酷是什么时候?
程序员最喜欢的五大神器
程序员留给大家的印象,不修边幅,沉默寡言。但程序员对于自己使用的神器,相当舍得花钱。今天咱们梳理下程序员最喜欢五大神器。 1.Mac电脑 Mac电脑在一定程度上体现了极致,高品质,这点和优秀程序员内在气质是吻合的,程序员对于自己代码都会一直不停在优化,重构以期望做到做好。苹果电脑在设计上追求每个细节做到极致,哪怕是外观的点点滴滴,诚然Mac电脑有这样那样的不兼容的因素,但是还是很多人喜欢,特别是有情怀的码农。 2. 码农神器HHBK键盘 这种键盘做了极大的简化,非常适合满足不用IDE编程的程序员,特
企鹅号小编
2018/01/19
1.4K0
程序员最喜欢的五大神器
程序员的江湖,黑话一定要牢记
参考原文:http://www.runoob.com/w3cnote/programmer-word-remember-boss-word.html
AWeiLoveAndroid
2019/03/01
5570
程序员的江湖,黑话一定要牢记
程序员最喜欢的五大神器
程序员留给大家的印象,不修边幅,沉默寡言。但程序员对于自己使用的神器,相当舍得花钱。今天咱们梳理下程序员最喜欢五大神器。 1.Mac电脑 Mac电脑在一定程度上体现了极致,高品质,这点和优秀程序员内在
程序员互动联盟
2018/03/16
1.2K0
程序员最喜欢的五大神器
怎样的程序员才算成功?他真心喜欢写代码吗?【程序员002】
当前在众多人眼中是否成功的重要标准就是是否赚足够多的钱,毕竟“钱”是生存、养家糊口的根本!
刘金玉编程
2023/02/27
2750
怎样的程序员才算成功?他真心喜欢写代码吗?【程序员002】
这个时代,写给我们这些浮躁的程序员
2010 年初写过一篇博客(我们是一群和平年代充满浮躁与抱怨的程序员),一年过去了,社会好像更浮躁,也有网友问我这方面的问题,于是有了下面这篇文章,再次写 给我们这些刚入行浮躁的程序员,如何成长,以下
春哥大魔王
2018/04/16
9170
这个时代,写给我们这些浮躁的程序员
雷军:我十年的程序员生涯
内容来源:转自链接:http://blog.sina.com.cn/s/blog_4b0e23c90100b2qf.html 阅读字数:2691 | 7分钟阅读 前言 最近,和UCWEB同事讨论,怎么才能把我们的UCWEB做到极致。我说,“手机上的平台非常多,如果想做好,需要足够多、足够优秀的程序员。优秀的程序员如何定义呢?首先必须热爱写程序,其次必须是一个完美主义者。只有这样的人,才能把事情做得极致。” 说着说着,我怀念起我过去写程序的日子,从1987年到1996年,那是一段阳光灿烂的日子。几年前我无
IT大咖说
2018/06/04
4600
程序员,别了校园入了江湖
http://blog.csdn.net/mindfloating/article/details/52434631
bear_fish
2018/09/19
6760
程序员,别了校园入了江湖
程序员必备的8个编程工具
正好最近看到一位国外程序员分享自己同时拥有好几个程序员喜欢的东西是什么体验,结合平时和技术大佬、程序员下属的交流,给大家列几个我觉得不错的东西。
程序员云课堂
2021/11/23
5920
精通数据结构的程序员可以拿到多少工资?
程序员能够拿多少工资不仅仅是数据结构起到的作用,本质上讲是工资的高低还是和创造的价值是直接挂钩,在国内程序员工资相比别的职业稍微高些,主要有以下几个原因
程序员互动联盟
2018/12/07
6590
精通数据结构的程序员可以拿到多少工资?
科研汪4k搞定适合生信分析的笔记本电脑购买攻略~
这个价钱是当时站长能接受的最高价格。就以这个为起点来划分四个档供大家参考。再次注意!不是说设备越好,做分析发文章越厉害!理性消费,从我做起!另外,郑重声明:站长,不是带货的,与以下出现的商家没有任何合作。图片只为了展现样子和型号,买家是否靠谱,建议多平台货比三家,不希望误导大家。
Chris生命科学小站
2023/02/28
5K0
科研汪4k搞定适合生信分析的笔记本电脑购买攻略~
推荐阅读
相关推荐
为什么程序员都想拥有一台Mac电脑?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验