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

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节点,对他们进行心跳检测,判断是否在正常工作
  收藏等于学会!别忘了点赞,关注哦,高频推出技术文章,有问题记得评论或者私信!

AC米兰主场被逼平,从欧冠回归后强度下降文羊城晚报全媒体记者刘毅意甲第26轮最后一场比赛3月14日爆出冷门,卫冕冠军AC米兰主场以1比1被萨勒尼塔纳逼平,为后者送上争取保级的关键1分。上周中在欧冠18决赛次回合比赛中,两西山国家森林公园发布早春赏花攻略北京日报客户端记者朱松梅春始西山。距北京城区最近的国家级森林公园西山,发布了2023年早春赏花攻略,迎春山桃山杏梅花等都已含苞迎客。1,迎春迎春是春日到来的信号,不仅花色端庄秀丽,湖北武汉樱花绽放醉游人3月14日,游客在东湖樱园拍照。近日,湖北武汉东湖樱园的樱花竞相绽放,吸引众多游客前来踏青赏花,乐享春光。新华社记者伍志尊摄影报道3月14日拍摄的东湖樱园。3月14日,游客在东湖樱鄂股动态丨湖北宜化2022年营收首破200亿元加码新能源赛道推进产业升级21世纪经济报道记者王雪实习生龙恒旭武汉报道3月12日晚,国内氮肥第一股湖北宜化(000422。SZ)正式发布了2022年业绩快报。报告期内,公司营业总收入约为208亿元,同比增长西安春日影诗集莫负杏花香又是一年春好时莫负杏花香杏花娇嫩粉白牵动春意,摇曳生姿是烂漫和自由的象征亦是许多文人墨客的心头好春日游,杏花吹满头粉白色的花海随风飘落时,细如微雨明媚了阳春三月的风染醉了长安多彩的湖北枣阳鹿头镇构建蔬菜特色产业多元化发展新格局中新网湖北新闻3月15日电(郭振兴骆俊锋)有你们专业人员作为技术支撑,我有能力也有信心将甜玉米产业做得更大更好。3月13日,枣阳市鹿头镇食得农有机种养专业合作社负责人董超望着大棚里3月15日深夜!浙江大老虎林毅落马,长得一表人才,太可惜了!写在最前贪腐,是国家不能容忍的,是人民不能允许的。有人说,是因为如今时代进步,经济强盛,导致的贪腐,但是在新中国刚刚成立时,也出现过大贪腐,所以归根结底,还是因为官员思想滑坡,自甘落实二次全会部署在行动丨湖北武汉畅通监督渠道聚焦群众关切纠治作风顽疾近日,多名群众在武汉评议平台对湖北省武汉市某区税务局一名窗口工作人员评价不满意,反映其存在服务态度差等作风问题。该区纪委监委按程序对群众反映的问题进行调查核实,很快,有关负责人和涉12月全国住宅销售额同比增长3。5多个楼市指标明显改善3月15日,国家统计局公布了2023年12月份房地产开发投资与销售数据,其中供应端的房地产开发投资新开工面积等指标降幅明显收窄,需求端的商品房销售面积和销售额指标也呈现加速改善态势得了流感不用怕!打开身上这4个祛病开关,症状消失快得了流感之后,除了发烧咽干鼻塞咳嗽之外,最明显的症状就是各种疼痛,如全身酸痛头痛咽痛等。除了常规使用解热镇痛药之外,中医特色疗法在缓解疼痛上也有独特优势。01咽痛按压三间穴三间穴位靳三针疗法尿失禁(五)尿失禁定义尿失禁是清醒状态下小便不能控制而自行流出的一种疾病,属中医小便不禁范畴。病因病机本病多由劳伤忧思疲劳病后气虚老年肾亏等,使下元不固膀胱失约而致。其他如湿热或瘀血积于
老人说6070年代鱼有的是,都是取之不尽的,能是真的吗?老人说,60年代70年代,田里河里小溪里的鱼多的是,似乎是取之不尽,这件事的确还是真的。在70年代未的时候,我应该是在上小学了,那时候是没有公交甚至没有自行车的,靠的都是双腿走路。我是一楼住户,从不坐电梯,物业非要交1000元电梯费合理吗?2021年新规即使一楼业主不使用电梯,照样需要交纳电梯费!2021年1月1日民法典正式实施,其中第二百七十三条明确规定业主对建筑物专有部分以外的共有部分,享有权利,承担义务不得以放你那里买一套房需要多少钱,平均房价又是多少呢?南京,最新房屋均价35353元平,一套上班族能勉强住的通勤时间在40分钟左右的刚需房,两房小三房,老房子200万,新房250300万。基本上只要年轻人肯努力工作,两人不懒惰的话,工80后现在基本上一个月多少工资?坐标大武汉,男,88年的,工作单位国有银行的大堂经理。工资每个月1300015000之间,扣完五险一金后,每个月只剩下70009000。然后老婆全职在家带孩子,这每个月的工资,要养公司负债百万,老板抵押房产作为公司现金流,推迟发放工资,这样的老板值得追随吗?这主要看老板的为人,是否值得跟随,其次你要慧眼识人,这个老板能力如何,看是否能够东山再起,这就相当于一次赌注,赌赢了你就是功臣,赌输了,只不过是推迟几个月发工资,当然你也要考虑到几为什么电子厂车间总喜欢赶人走?一些电子厂每天都在招工,但总招不够,我也一直想不明白,直到去年过年时去表姐家拜年,表姐才为我解释了这里面的内幕。表姐是一间电子厂车间的组长,她和我说电子厂车间总喜欢赶人走,所以每天一个农村家庭为了供三位大学生上学变得一贫如洗,是否值得?这个问题很有感触,因为我就是供三个大学生的妈妈,一个婆家侄子,俩个儿子。侄子第一个高考624分,进了重庆大学。在拿到通知书的那天,我激动的掉下了眼泪,做了一桌子菜,全家高兴的为他庆为什么感觉农村的小偷越来越少了?青石雄狮失而复得渭北有个地方叫档驾桥,距离它以北六里地有一座插花寺它是唐太宗李世民的长孙娘娘为记念娘家嫂嫂而建。随着岁月的变迁,寺院早就没了香火,夕日里的繁荣不复在在。唯有残垣断臂翟志刚是我家乡的名人!晒一晒你家乡的名人吧?我的家乡的名人就是于佑仁。于右任,男,原名伯循,字诱人,尔后以诱人谐音右任为名,汉族,1879年4月11日出生,陕西三原人,祖籍泾阳斗口于村,中国近现代政治家教育家书法家。晚年自号小时候有没有遇到过比较诡异,现在想起来依旧后怕的事?有!从童年至今,经历的灵异事件多了!现在我已经见怪不怪,习以为常,置之不理了!初中时我是个小组长轮到我们组值日,我拿着班级钥匙提前去开门打扫卫生,早晨600多骑自行车上学路过医院停社保究竟应该什么时候开始买?青青认为,提这个问题的朋友大概率是以个人身份缴纳社保的灵活就业人员,是年轻人,并且有一定的缴费压力,这样的情况,更容易涉及到你个人对什么时候开始参保缴费的权衡和选择。青青的忠告是千