Redis学习之哨兵二

一、API

1.sentinel masters:展示被监控的主节点状态及相关的统计信息

2.sentinel master <master name>:展示指定的主节点的状态以及相关的统计信息

3.sentinel slaves <master name>:展示指定主节点的从节点状态以及相关的统计信息

4.sentinel sentinels <master name>:展示指定主节点的sentinel节点集合

5.sentinel get-master-addr-by-name<master name>:返回指定主节点的ip地址和端口

6.sentinel reset<pattern>:对符合pattern的主节点的配置进行重置

7.sentinel failover<master name>:对指定的主节点进行强制的故障转移,没有和其他sentinel节点进行协商,当故障转移完成后,其他sentinel节点按照故障转移的结果更新自身配置

8.sentinel flushconfig:将sentinel节点的配置强制刷到磁盘上

9.sentinel remove<master name>:取消当前sentinel节点对于指定的主节点进行监控

10.sentinel monitor <master name><ip><port><quorum>:向sentinel中添加对主节点的监控

11.sentinel set<master name>:动态修改sentinel节点的配置项

12.sentinel is-master-down-by-addr:sentinel节点之间用来交换对节点是否下线的判断,还可以根据参数的不同作为sentinel领导者的选举的通信方式

二、客户端连接

1.实现redis sentinel客户端的步骤:

Ⅰ、遍历sentinel节点集合获取一个可用的sentinel节点

Ⅱ、通过sentinel get-master-addr-by-name master-name 获取对应的主节点的信息

Ⅲ、验证当前获取的主节点是真正的主节点,防止故障转移期间主节点的变化

Ⅳ、保持和sentinel节点集合的联系,时刻获取关于主节点的相关信息

2.java操作redis sentinel

jedis需要有master-name和sentinel两个参数来连接redis sentinel

三、redis sentinel实现原理

1.其基本实现原理包含:三个定时任务、主观下线和客观下线、sentinel领导者选举以及故障转移。

2.三个定时任务:

Ⅰ、每隔10s,每个sentinel节点会向主节点和从节点发送info命令获取最新的拓扑

这个定时任务的作用表现

通过向主节点执行info命令获取从节点的信息,这个好处是sentinel节点不需要显示配置监控从节点

当有新的从节点加入时可以立刻感知出来

节点不可达或者故障转移后可以通过info命令实时更新节点拓扑信息

Ⅱ、每隔2s,每个sentinel节点会向redis数据节点发送该sentinel节点对于主节点的判断以及当前sentinel节点的信息同时其他sentinel节点也可以得知它们对于主节点的判断

Ⅲ、每隔1s,每个sentinel节点会向主节点、从节点、其余sentinel节点发送一条ping命令做一次心跳检测来确定这些节点是否可达

3.主观下线和客观下线

主观下线:每个sentinel节点会隔1s对其他节点做心跳检测,当这些节点超过down-after-milliseconds没有进行有效的回复,sentinel节点会对该节点做失败判定,这个行为是主观下线,这个行为存在误判的可能。

客观下线:当sentinel主观下线 的节点是主节点,该sentinel节点会通过sentinel is-master-down-by-addr命令向其他sentinel节点询问对主节点的判断,当超过<quorum>个数就认为主节点有问题,则这个sentinel就会做出客观下线的决定

4.领导者sentinel节点选举

领导者sentinel选取的意义:进行故障转移

领导者选举的思路

Ⅰ、首先每个在线的sentinel节点都有资格都有资格成为领导者,当其确认主节点主观下线时会向其他sentinel节点发送sentinel is-master-down-by-addr命令要求将自己设置为领导者

Ⅱ、收到命令的sentinel节点如果没有同意其他sentinel节点的命令将会同意这个请求否则是拒绝

Ⅲ、如果该sentinel节点发现自己的票数已经大于max(quorum,num(sentinel)/2+1),那么就会成为领导者

Ⅳ、如果这个过程没有选举出领导者将会进入下一次选举

5.故障转移

在节点列表中选出一个节点作为新的主节点

Ⅰ、过滤掉不健康(主观下线)、5s内没有回复ping命令

Ⅱ、选择slave-priority(从节点优先级)最高的从节点列表,如果存在则返回

Ⅲ、选择复制偏移量最大的从节点,如果存在则返回'

Ⅳ、选择runid最小的从节点

对上一步选出来的从节点执行slaveof no one命令让其成为主节点

sentinel领导者向剩余的从节点发送命令,让它们成为新主节点的从节点

sentinel集合将原来的住系欸但更新为从节点并保持对旧的主节点的关注,当旧的主节点恢复时命令它去复制新的主节点的信息。

相关推荐
炬火初现几秒前
SQL语句——高级字符串函数 / 正则表达式 / 子句
数据库·sql
TTGGGFF15 分钟前
云端服务器使用指南:利用Python操作mysql数据库
服务器·数据库·python
编程充电站pro35 分钟前
SQL 性能优化:为什么少用函数在 WHERE 条件中?
数据库·sql
丶Darling.1 小时前
26考研 | 王道 | 计算机组成原理 | 二、数据的表示和运算
笔记·学习·计算机组成原理
无敌最俊朗@1 小时前
通过Ubuntu和i.MX 6ULL开发板实现网络共享
服务器·数据库·ubuntu
丰锋ff1 小时前
2009 年真题配套词汇单词笔记(考研真相)
笔记·学习·考研
TDengine (老段)1 小时前
TDengine 时序函数 DERIVATIVE 用户手册
大数据·数据库·sql·物联网·时序数据库·iot·tdengine
TDengine (老段)1 小时前
TDengine 时序函数 STATEDURATION 用户手册
大数据·数据库·sql·物联网·时序数据库·iot·tdengine
凯子坚持 c1 小时前
2025年大模型服务性能深度解析:从清华评测报告看蓝耘元生代MaaS平台的综合实力
大数据·数据库·人工智能
长安城没有风2 小时前
从入门到精通【Redis】理解Redis事务
数据库·redis·缓存