范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Redis高可用故障转移RedisSentinel哨兵模式从配置到编码一气呵成

  满怀忧思,不如先干再说!
  主从复制出现的问题
  上篇文章《Redis主从复制》中我们说到可以对Redis单节点数据进行备份实现Redis高可用,但是如果master节点宕机并不会自动做故障切换等,导致项目中更可能需要接入多数据源,编写代码实现故障切换非常麻烦,Redis考虑到这个问题提供了哨兵模式 ,也就是Redis Sentinel !
  Redis Sentinel基本架构
  看图我们说一下Redis Sentinel架构,首先我们需要加入Sentinel节点,Sentinel节点去监控Redis中Master和Slave的运行状态,判断是否可用,当然Sentinel节点也是有多个的,实现Sentinel节点的高可用和多节点判断Redis节点是否可用不会出现误判情况
  客户端不再直接操作Redis的Master或者Slave节点,而是去访问Sentinel节点!所以我们的客户端会记录Redis Sentinel的地址!我们的客户端不关心谁是Master而是Sentinel告诉客户端谁是Master,后台Master切换了,客户端也不会受到影响!
  当多个sentinel发现并确认master出现问题,会选举出一个sentinel作为领导,选举出一个slave为新的master,通知其余的slave有新的master产生,通知客户端master发生变化,等待老的master复活成为新的master的slave!
  一套sentinel可以同时监控多套master和slave!节省资源!每套master/slave会有一个master-name作为标识以示区别
  安装和配置
  集群规划
  配置开启主从节点,一个master 端口号为7000 ,两个slave 节点分别问7001 和7002; 配置开启sentinel监控主节点。(sentinel是特殊的redis节点,不存储数据),三个sentinel分别为26379,26380,26381 ;
  配置描述
  master
  port 7000 daemonize yes pidfile /var/run/redis/redis-7000.pid logfile "7000.log" dir "/usr/local/redis-5.0.5/data/"
  slave-7001
  命令:sed "s/7000/7001/g" redis-7000.conf > redis-7001.conf
  将7000替换为7001
  命令:echo "slaveof stt101 7000" >> redis-7001.conf
  重定向slaveof stt101 7000 到redis-7001.conf 文件末尾
  port 7001 daemonize yes pidfile /var/run/redis/redis-7001.pid logfile "7001.log" dir "/usr/local/redis-5.0.5/data/" slaveof stt101 7000
  slave-7002
  port 7002 daemonize yes pidfile /var/run/redis/redis-7002.pid logfile "7002.log" dir "/usr/local/redis-5.0.5/data/" slaveof stt101 7000
  配置完之后启动三个节点查看主从关系:
  redis-cli -p 7000 info replication
  sentinel主要配置
  #三台sentinel使用端口区别 port ${port} dir "/usr/local/redis-5.0.5/data/" logfile "${port}.log" #监控主节点名字为mymaster,ip,端口,2台sentinel认为master有问题就会故障转移 sentinel monitor mymaster ip port 2 #30000毫秒ping不通认为出现问题 sentinel down-after-milliseconds mymaster 30000 #选择了新的master之后老的slave会对新的slave进行复制,1代表每次只有一个slave进行复制,减轻master压力 sentinel parallel-syncs mymaster 1 #故障转移时间 sentinel failover-timeout mymaster 180000
  注意: 在redis的安装目录下有一个sentinel.conf文件就是sentinel的配置文件,我们将这个文件拷贝到conf目录下,去除注释等。给出一个26739的配置,其余的两台大家只需修改端口号了pid文件即可
  第一台的配置 port 26379 daemonize yes pidfile "/var/run/redis/redis-sentinel-26379.pid" logfile "26379.log" dir "/usr/local/redis-5.0.5/data" #stt101为ip映射 sentinel monitor mymaster stt101 7000 2 sentinel down-after-milliseconds mymaster 30000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 180000 protected-mode no  #通过该命令将sentinel.conf文件去掉注释和换行将内容放到redis-sentinel-26739.conf文件中 cat sentinel.conf | grep -v "#" | grep -v "^#34; > redis-sentinel-26739.conf #启动 redis-sentinel redis-sentinel-26739.conf  #配置其他两台,三台配置是一样的,修改端口和日志文件,pid文件即可 sed "s/26379/26380/g" redis-sentinel-26379.conf > redis-sentinel-26380.conf sed "s/26379/26381/g" redis-sentinel-26379.conf > redis-sentinel-26381.conf
  启动
  # 使用redis-sentinel命令读取配置文件分别启动三台sentinel节点 # 记得修改文件名哦 redis-sentinel redis-sentinel-26739.conf  # 分别启动三台Redis节点 redis-server redis-6379.conf  # 通过客户端连接上sentinel节点 redis-cli -h 192.168.109.101 -p 26379
  这里大家注意一下:有些可能有疑问,上边端口不是7000吗下边咋变成6379了,搞咩啊,之前在写的时候,这里有一点小瑕疵,我直接重写了,端口号上下没有对应起来,这里声明一下,之前的7000,7001,7002分别对应下文的6379,6380,6381,如果没有发现问题,是不没认真看啊!
  启动之后查看状态
  大家看下边动图,名字为6379, 6380, 6381的为redis节点,名字为26379的为sentinel节点,演示节点状态和故障转移
  首先在redis sentinel下查看address是6381,说明其为主节点之后将6381kill掉,等待一段时间,这里时间大概在30S左右,这段时间我暂停了之后再查看info信息,发现address变为6380
  SpringBoot集成Redis Sentinel演示
  这个思路也很简单,我们循环添加或者查询数据,将主节点手动宕机,查看日志打印是否成功切换继续读写数据即可,我们只需要修改application.yml 配置文件即可
  配置文件
  spring:   redis:     #host: 192.168.109.101  #这是之前单机时的ip配置     #port: 6379              # 这个是单机时的端口配置,现在都不用写了     sentinel:       # 写sentinel节点的ip:port       nodes: 192.168.109.101:26379,192.168.109.102:26380,192.168.109.103:26381       # 写sentinel节点的名字,因为sentinel可以有很多组,每一组使用名字区分       master: mymaster     timeout: 2s       #连接池最大连接数(使用负值表示没有限制)     max-active: 2000       #连接池最大阻塞等待时间(使用负值表示没有限制)     max-wait: -1ms       #连接池中的最大空闲连接     max-idle: 1024       #连接池中的最小空闲连接     min-idle: 100
  代码
  /** 添加数据 */ @Test public void test7(){    //循环,添加数据    for (int i = 0; i < 200; i++) {      String key = "key-" + i; 	 String value = "value-" + i; 	 try { 		redisTemplate.opsForValue().set(key,value); 		//慢一点 		Thread.sleep(500); 		System.out.println("当前插入:" + key + "===>" + value);      } catch (InterruptedException e) { 		e.printStackTrace(); 	 }catch (Exception e){ 		e.printStackTrace(); 	 }    }    System.out.println("数据插入完成"); }  /** 查询数据 */ @Test public void test8(){    //编写循环,添加数据    for (int i = 0; i < 200; i++) {         String key = "key-" + i;         try {             Object o = redisTemplate.opsForValue().get(key);             //慢一点             Thread.sleep(500);             System.out.println("当前获取:" + o );         } catch (InterruptedException e) {             e.printStackTrace();         }catch (Exception e){             e.printStackTrace();         }     } }
  演示
  这里我又将刚刚关闭的6381节点启动,三个节点提供服务,进行演示,一样的动图送给大家,这里只贴出插入数据的动图了,查询的类似,大家动手做一做试一下!
  基本原理
  由三个定时任务实现的切换
  每10S一个info
  每10秒每个sentinel节点会对master和slave发送一个info命令,一是为了发现slave节点,二是为了确认主从关系
  每2秒交换信息
  每2秒每个sentinel通过master节点的channel交换信息(pub/sub),相当于一个sentinel的交互平台,交互对master/slave状态的监听情况和自身的信息。通过一个名为__sentinel__:hello的频道交互,每个sentinel节点都会订阅这个频道
  每秒1ping
  每一秒每个sentinel节点对其他sentinel和redis执行一次ping,这一步基于第一步sentinel掌握redis的master和slave节点的状况,基于第二步sentinel节点知道其他的sentinel节点,对他们进行心跳检测,判断是否在正常工作
  收藏等于学会!别忘了点赞,关注哦,高频推出技术文章,有问题记得评论或者私信!

新学期马上就要开始了,有娃的家庭特别适合读这个!大有学问大家复工快乐当然,复工应该很难快乐,闲散舒适的假期不要走啊!今年寒假,算是近几年我休息最爽的一个假期了!新冠康复后全家人集体去做了大体检,放下了心,然后就开始借着新冠狠狠休做好服务,把生育的权利还给女人做好服务,然后把生育的权利交给女人文叶雨秋孩子是无辜的,他带着憧憬和希冀来到世界上他是上帝赐予人间最好的礼物,是人类繁衍和快乐的源泉,是人类幸福的起点,也是幸福的终点,是人生一切意苏州55条新政拿出真金白银帮企业轻装上阵干货政策包激发内生创新动力前日,苏州市印发关于推动经济运行率先整体好转的若干政策措施,推出12个方面55条含金量十足的最新政策。记者从市发改委了解到,与江苏省42条政策措施相比,苏州市55条新政在政策举措方财政部2023年积极财政政策重点把握这五个方面据了解,今年积极财政政策重点把握税费政策支出强度支出结构等五个方面。针对税费政策,将综合考虑财政承受能力和助企纾困需要,根据实际情况进一步完善减税降费措施,突出对中小微企业个体工商冠心病亦称缺血性心脏病,中医的按摩锻炼心脏,促进血液循环冠心病冠心病是冠状动脉粥样硬化性心脏病的简称,亦称缺血性心脏病,属中医胸痹的范畴。一般来说,人到中年之后,体质逐渐下降,五脏渐衰,脏腑功能失调,加上身体阳气不足或受寒暑等邪气侵袭,有哪些适合30岁40岁左右的人的高性价比护肤品?2月份过的生日,感觉三十岁的自己,有了点钱,但也没那么有钱皮肤开始衰老,但也没那么老!总得来说就是得买点贵妇级护肤品,但也得考虑性价比!从上大学开始,这么多年买来试试的护肤品真用了漫画解析我爱了你整整10年,而嫁给别人却只用了10天很多情侣是从学生时期相爱相知,互相陪伴了十来年之久。但是时间流逝,如果感情没有用心维系,即便在漫长的时间,也都是没有用的数字。不是不爱了,而是没办法再爱下去了。谈再久的恋爱,如果没赵睿与亲弟弟罕见同框!兄弟二人皮肤偏黑很相似,年龄差距超20岁近日,赵睿的父亲赵庆波更新了社交平台,晒出了赵睿与弟弟的新年合影,在篮球训练场中央赵睿抱着弟弟露出了很阳光的笑容,而弟弟也非常开心地摆出了动画人物奥特曼的标志性动作。值得一提的是,一位艺术家使用AI技术来创作不同的国家作为女性会是什么样子最近,一位名叫Alexa的20岁艺术家使用AI技术将不同的国家想象成女性。Alexa想AI测试,看看它是否不仅能捕捉到世界各地不同人的特征,还能捕捉到文化它做到了(即被想象为美国女我在日本卖肉夹馍月入10万,谈物质女友,她妈妈更开口就要1000W这是我们讲述的第1511位真人故事我是王大拿你的拿拿找对象,90后,辽宁抚顺人,来日本10年了。我的人生可谓一路奇葩,小时候压抑得要死,上高中突然语言天赋爆发,成了社交牛逼症上大学宝宝尿布疹时,可能是护理习惯引起,别不当回事文余明仁小宝宝的皮肤是比较娇嫩的,在新生期的时候很多宝宝都会出现皮肤疹,最常见的就是宝宝的湿疹,小宝宝湿疹的情况也有很多,跟宝宝皮肤过敏有关系,也跟不卫生等因素有关系,那么在新生期
比亚迪海鸥将于4月上市微型代步小车添新品当前国内汽车市场中国产新能源汽车已经逐渐占据了主导地位,越来越多的消费者在买新能源汽车时都会选择国产车型,因此,各大国产车企也都加快了推出新能源新车的步伐。而比亚迪汽车作为国产品牌115万跑分!一加Ace2曝光搭载满血版骁龙8芯片,配备16G大内存文手机技巧库春节刚收假回来,数码圈就开始变得热闹了起来,许多厂商都开始预热手机新品。而在最近,安兔兔在后台数据库就曝光了一款名为PHK110的机型,根据现有资料猜测,这款新机很可能假如你的小伙伴是个机器人?过去机器人伺候人类一般只出现在科幻小说的描述中,但现在随着科技的发展,让这种机器人陪伴人类吃喝拉撒的愿景成为现实。美国相关机构最近的一项调查中,其询问了3292名参与者,调查他们对微信无法接收消息,消息延迟?原来是这3个地方没设置,涨知识了大家好,我是小俊,一个专注于知识分享的博主!微信是我们经常使用的聊天工具之一,那大家在使用微信聊天的时候啊,经常会发现这样一个问题,好友给我们发送了一条消息,但是这条消息,不仅不能形势严峻!美国断供安卓和骁龙,国产手机还能坚持多久?近年来,说到咱们的国产手机厂商,许多国人都不禁为之骄傲,认为我国的手机厂商终于站起来了。放眼全球比较知名的几家手机品牌,来自我国的不少,以华为OPPO几家为主。不过,要是对我们的国现代物理学未解之谜有一个传说,1900年英国物理学家开尔文勋爵说现在物理学没有什么新鲜事了。剩下的只是为了进行更多更准确的测量。三十年后,量子力学和爱因斯坦的相对论彻底改变了物理学。今天,没有物理学直降300元!华为Mate50大降价还送快充套装只有四天手机中国新闻华为Mate50自发布以来,受到了很多用户的广泛认可,但由于价格较高,有些人还在持币观望。1月29日20002月2日,华为Mate50在京东平台开启特惠,限时优惠300即将来袭?荣耀Magic5或携新折叠屏于下月发布在去年3月,荣耀正式发布了Magic4系列手机,其强劲的性能惊艳了不少用户。荣耀Magic4所搭载的骁龙旗舰级移动平台大底影像传感器高素质曲面OLED屏幕等一系列优秀配置把性能拉满什么叫公平?什么叫公平?DAY178感谢您的关注和陪伴,我们一起学习成长。随着年龄的增长,对于到底什么叫公平越来越模糊了。大家理解的公平往往是幼儿园小朋友分苹果的公平,你分了5个,我也得要有5试管婴儿应该是一种更积极的生活方式年轻未经世事的时候,总以为恋爱结婚生子,是生活中一件天经地义的事情。然而,等真正经历后才发现,这条路上的每一步,似乎都隐藏着各种激流险滩。好不容易组建了幸福的家庭,有些人却因为各种iPhone新机9月份登场,上半年换机看这3款安卓旗舰,体验都不差说起换手机,iPhone是个始终都绕不过的话题,甚至是很多人的购机首选。但什么事都讲究个时间点,比如现在买iPhone的话就很尴尬,买iPhone14不甘心,可iPhone15还要