首页 / REDIS / redis之哨兵模式
redis之哨兵模式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了redis之哨兵模式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3229字,纯文字阅读大概需要5分钟。
内容图文
![redis之哨兵模式](/upload/InfoBanner/zyjiaocheng/869/813ac8bd14ee4aab960cc89ac94ade39.jpg)
一、简介
哨兵(sentinel)是一个分布式系统,用于主从结构中的每台服务器进行监控,当出现故障时通过投票机制重新选择新的master并将所有的salve连接到新的master
二、哨兵的作用
监控 | 不断的检查master和slave运行状态 |
---|---|
通知 | 当监控的服务器出现问题,立即向其他的服务器发送通知 |
故障转移 | 断开故障的master和slave的联系,重新选取一个salve作为master,将其他slave连接到新的master |
三、启动哨兵模式
- 首先进入当期的工作目录(过滤查看当前的信息)
#过滤带有#的字段,以及空行
Cat sentinel.conf |grep “#” |grep “^$”
- 复制为sentinel-26379.conf文件
Cat sentinel.conf |grep “#” |grep “^$” > sentinel-26379.conf
- 为了方便管理,将其移动到conf文件中
mv sentinel-26379.conf conf
- 进入conf文件,继续批量操作,接着生成不同端口号的文件
sed 's/26379/26380/g' sentinel-26379.conf > sentinel-26380.conf
sed 's/26380/26381/g' sentinel-26380.conf > sentinel-26381.conf
- 启动哨兵
- 先启动服务器
6379服务器
redis-server conf/redis-6379.conf
6380服务器
redis-server conf/redis-6380.conf
6381服务器
redis-server conf/redis-6381.conf
2. 启动哨兵
redis-sentinel conf/sentinel-26379.conf
redis-sentinel conf/sentinel-26380.conf
redis-sentinel conf/sentinel-26381.conf
三、测试
- 连接哨兵客户端
redis-cli -p 26379
- 查看连接信息
info
-
从图中我们可以看出master端口为6380
端口号6379和6381为slave不能插入数据
这时我们需要对6380进行宕机测试 -
这时,其余两个端口的服务器做出了反应
-
哨兵机制进行投票,选举新的master
-
6379重新被选为master
注意事项: -
哨兵的配置数量需定为单数
-
哨兵也是服务器,不提供服务
四、哨兵工作原理
分为三个阶段:
-
第一阶段:(监控阶段)
获取各个哨兵的状态值(检测是否在线)
获取master装态(master属性,各个slave的详细信息)
获取各个salve的状态信息
-
第二阶段(通知阶段)
为了维护长期的信息响应,第一时间获取master和salve的状态信息,由sentinel1号发出消息去验证
再将信息共享于其他的哨兵
-
第三阶段(故障转移阶段)
哨兵收到master宕机的消息,自身先判定master已经宕机,同时将信息共享给其他sentinel,让其进行判定,经过其他sentinel的依次连接测试,确认其信息的真实性,一致同意让其下线
主观下线(Subjectively Down 简称SDOWN)
指的是单个Sentinel实例对服务器做出的下线判断,即单个sentinel认为某个服务下线(有可能是接收不到订阅,之间的网络不通等等原因)
- 哨兵机制进行投票,选举新的sentinel
选举领头sentinel遵循以下规则:
1)所有的sentinel都有公平被选举成领头的资格。
2)所有的sentinel都有且只有一次将某个sentinel选举成领头的机会(在一轮选举中),一旦选举某个sentinel为领头,不能更改。
3)sentinel设置领头sentinel是先到先得,一旦当前sentinel设置了领头sentinel,以后要求设置sentinel为领头请求都会被拒绝。
4)每个发现服务客观下线的sentinel,都会要求其他sentinel将自己设置成领头。
5)当一个sentinel(源sentinel)向另一个sentinel(目sentinel)发送is-master-down-by-addr
ip port current_epoch
runid命令的时候,runid参数不是*,而是sentinel运行id,就表示源sentinel要求目标sentinel选举其为领头。
6)源sentinel会检查目标sentinel对其要求设置成领头的回复,如果回复的leader_runid和leader_epoch为源sentinel,表示目标sentinel同意将源sentinel设置成领头。
7)如果某个sentinel被半数以上的sentinel设置成领头,那么该sentinel既为领头。
8)如果在限定时间内,没有选举出领头sentinel,暂定一段时间,再选举。
- 由选举出的领头sentinel进行选举新的master
筛选规则:- 在线的
- 响应慢的
- 与原master断开时间久的
- 优先原则 (优先级,offset,runid)
- 发送指令(sentinel)
- 向新的master发送slaveof no one
- 向其他slave发送slaveof新masterIP端口
内容总结
以上是互联网集市为您收集整理的redis之哨兵模式全部内容,希望文章能够帮你解决redis之哨兵模式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。