标签:slave Redis 模式 哨兵 故障 master conf sentinel
当我们搭建一个主从复制时,master宕机之后我们需要选取一个新的master,用于解决这个问题的策略就是哨兵模式
哨兵模式简介:
哨兵(sentinel)是一个分布式文件系统,用于对主从结构中的每一台服务器进行监控,当出现故障时通过投票机制选出新的master并将所有slave连接到新的master
哨兵的作用:
1.监控:①不断的检查master和slave是否正常运行
2.通知:当被监控的服务器出现了问题,向其它的哨兵和客户端发送通知
3.自动故障转移:断开slave和master的连接,投票选出一个新的master并将所有slave连接新的master,告知客户端新的服务器地址
注意:①哨兵在redis中也是一台服务器,只是不提供数据
②通常哨兵配置单数
启用哨兵模式:
1.配置一个1托2的主从结构
在从节点的配置文件中配置master的ip和port,并以配置文件的形式启动从节点服务器
2. 配置3个哨兵服务器的配置文件,除了端口号不同其它配置项一致(此配置文件在redis解压目录中存在即sentinel.conf,将其复制不修改源文件)
①查看一下setinel.conf中的配置项
setinel monitor <master名称(自定义)> host port 2 :配置master的服务名称、ip和端口号、2是指:哨兵的数量,当超过一般的哨兵认为master已经不能正常工作了就让它下线,这也是为什么哨兵数量一般设置为奇数的原因,偶数的话很容易投票打平。
setinel down-after-milliseconds <master名称(要与monitor的名称一致)> 30000:单位是毫秒,这里默认设置是30秒,用于判断master挂掉的默认时间周期,也是主从切换启动的条件之一
parrallel-syncs <master名称> 1:指定同时进行主从复制slave数量
failover-timeout <master名称> 180000:默认时间单位是毫秒,这里默认设置是3分钟,指定故障出现时故障切换的超大超时时间,超过这个时间就认定故障切换失败
②配置哨兵配置文件并且清空data中的文件
③启动哨兵服务
redis-sentinel conf/sentinel-6379.conf
redis-sentinel conf/sentinel-6380.conf
redis-sentinel conf/sentinel-6381.conf
从日志中可以看出,本身我们是设置6379为master但是由于网络或者其它原因,在规定时间内没有应答,就让它下线了并且推选出新的master为6381
可以看出确实是这样
哨兵的工作原理:
三个阶段:①监控②通知③故障转移
阶段一:监控阶段
·用于同步各个节点的状态信息
·获取各个sentinel的状态
·获取master的信息
·master的属性
·runid
·role:master
·各个slave的详细信息
·获取所有slave的状态(根据master中的slave信息)
·slave属性
·runid
·role:slave
·master_host、mast_port
·offset
·......
阶段二:通知阶段
阶段三:故障转移阶段
1.发现故障
2.推选负责人(投票)
假如sentinel1和sentinel5要竞选故障处理的负责人,它两就同时向sentinel2发送选我的消息,谁的消息先到sentinel就投谁,其它以此类推,假如投票结果一样就比较竞选次数,假如竞选次数也一样就比较runid
3.优选新master
·服务器列表中挑选master
·在线的
·响应慢的
·与原master断开时间久的
·优先原则
·优先级
·offset
·runid
·发送指令(sentinel)
·向新的master发送slaveof no one
·向其他slave发送slaveof 新master的ip port
·原master故障恢复后作为slave连接master
标签:slave,Redis,模式,哨兵,故障,master,conf,sentinel 来源: https://blog.csdn.net/weixin_56674682/article/details/121588489
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。