Redis-Sentinel哨兵

Redis Sentinel可以通过心跳检测的方式监视多个主服务器以及它们属下的所有从服务器,并在某个主服务器下线时自动对其实施故障转移。

1 启动Sentinel

一个Sentinel配置文件至少需要包含以下选项,用于指定Sentinel要监视的主服务器:

复制代码
        sentinel monitor <master-name> <ip> <port> <quorum>

选项中的master-name参数用于指定主服务器的名字,这个名字在执行各种Sentinel操作的时候会经常用到;ip参数和port参数用于指定主服务器的IP地址和端口号;而quorum参数则用于指定判断这个主服务器下线所需的Sentinel数量。

Sentinel开始监视一个主服务器之后,就会去获取被监视主服务器的从服务器名单,并根据名单对各个从服务器实施监视,整个过程是完全自动的,所以用户只需要输入待监视主服务器的地址就可以了,并不需要输入从服务器的地址。除此之外,Sentinel还会对每个被监视的主从服务器实施心跳检测,并记录各个服务器的在线状态、响应速度等信息,当Sentinel发现被监视的主服务器进入下线状态时,它就会开始对下线的主服务器实施故障转移。

1.1 处理重新上线的旧主服务器

**Sentinel可以同时监视多个主服务器;**Sentinel在对下线的主服务器实施故障转移之后,仍然会继续对它进行心跳检测,当这个服务器重新上线的时候,Sentinel将把它转换为当前主服务器的从服务器。

1.2 设置从服务器优先级

用户可以通过replica-priority配置选项来设置各个从服务器的优先级,优先级较高的从服务器在Sentinel选择新主服务器的时候会优先被选择。replica-priority的默认值为100,这个值越小,从服务器的优先级就越高。举个例子,如果现在有3个从服务器,它们的优先级分别为100、50和10,那么Sentinel将优先选用优先级为10的从服务器作为新的主服务器。replica-priority值为0的从服务器永远不会被选为主服务器,用户可以通过这一设置将不适合用作主服务器的从服务器排除在新主服务器的候选名单之外。

1.3 新主服务器的挑选规则

当Sentinel需要在多个从服务器中选择一个作为新的主服务器时,首先会根据以下规则从候选名单中剔除不符合条件的从服务器:1)否决所有已经下线以及长时间没有回复心跳检测的疑似已下线从服务器。2)否决所有长时间没有与主服务器通信,数据状态过时的从服务器。3)否决所有优先级为0的从服务器。

然后根据以下规则,在剩余的候选从服务器中选出新的主服务器:1)优先级最高的从服务器获胜。2)如果优先级最高的从服务器有两个或以上,那么复制偏移量最大的那个从服务器获胜。3)如果符合上述两个条件的从服务器有两个或以上,那么选出它们当中运行ID(运行ID是服务器启动时自动生成的随机ID,这条规则可以确保条件完全相同的多个从服务器最终得到一个有序的比较结果)最小的那一个。

2 Sentinel网络

只使用单个Sentinel监视主服务器和它属下的从服务器,容易造成单点故障。为了避免单点故障,可以使用多个Sentinel组建一个分布式Sentinel网络。对主服务器的状态进行投票,决定是否进行故障转移,因此至少需要使用3个Sentinel才能构建一个可信的Sentinel网络。

2.1 组建Sentinel网络

需要启动多个Sentinel,并使用sentinel monitor配置选项指定Sentinel要监视的主服务器,那些监视相同主服务器的Sentinel就会自动发现对方,并组成相应的Sentinel网络。

将Sentinel和被监视的Redis服务器放到不同的机器上运行,并且各个Sentinel也应该放到不同的机器上运行,这样Sentinel网络才能够更准确、有效地判断出服务器的实际状态。

3 Sentinel管理命令

3.1 SENTINEL masters:获取所有被监视主服务器的信息

向Sentinel发送以下命令

复制代码
        SENTINEL masters

3.2 SENTINEL master:获取指定被监视主服务器的信息

复制代码
        SENTINEL master <master-name>

3.3 SENTINEL slaves:获取被监视主服务器的从服务器信息

复制代码
SENTINEL slaves <master-name>

3.4 SENTINEL sentinels:获取其他Sentinel的相关信息

复制代码
        SENTINEL sentinels <master-name>

3.5 SENTINEL get-master-addr-by-name:获取给定主服务器的IP地址和端口号

复制代码
        SENTINEL get-master-addr-by-name <master-name>

3.6 SENTINEL reset:重置主服务器状态

复制代码
        SENTINEL reset <pattern>
        //重置名称为website_db的主服务器
        SENTINEL reset website_db
       //重置名称为website_为前缀的主服务器
        SENTINEL reset website_*

SENTINEL reset命令可以让Sentinel忘掉主服务器之前的记录,并重新开始对主服务器进行监视,所以它通常只会在Sentinel网络或者被监视主从服务器的结构出现重大变化时使用。

3.7 SENTINEL failover:强制执行故障转移

复制代码
        SENTINEL failover <master-name>

3.8 SENTINEL ckquorum:检查可用Sentinel的数量

检查Sentinel网络当前可用的Sentinel数量是否达到了判断主服务器客观下线并实施故障转移所需的数量:

复制代码
        SENTINEL ckquorum <master-name>

SENTINEL ckquorum命令一般用于检查Sentinel网络的部署是否成功。

3.9 SENTINEL flushconfig:强制写入配置文件

通过向Sentinel发送以下命令,让Sentinel将它的配置文件重新写入硬盘中:

复制代码
        SENTINEL flushconfig

Sentinel在被监视服务器的状态发生变化时就会自动重写配置文件,所以这个命令的作用就是在配置文件基于某些原因或错误而丢失时,立即生成一个新的配置文件。此外,当Sentinel的配置选项发生变化时,Sentinel内部也会使用这个命令创建新的配置文件来替换原有的配置文件。

4 在线配置Sentinel

4.1 SENTINEL monitor:监视给定主服务器

通过执行以下命令,用户可以让Sentinel开始监视一个新的主服务器:

复制代码
        SENTINEL monitor <master-name> <ip> <port> <quorum>

4.2 SENTINEL remove:取消对给定主服务器的监视

当用户想要在线取消Sentinel对某个主服务器的监视时,可以使用以下命令:

复制代码
        SENTINEL remove <masters-name>

4.3 SENTINEL set:修改Sentinel配置选项的值

通过使用以下命令,用户可以在线修改Sentinel配置文件中与主服务器相关的配置选项值:

复制代码
        SENTINEL set <master-name> <option> <value>
        //修改投票个数
        SENTINEL set website_db quorum 3
相关推荐
yangchanghua1111 小时前
pgsql 如何查询今天范围内的数据(当天0点0分0秒 - 当天23点59分59秒....)
数据库·pgsql
larance1 小时前
SQLAlchemy 的异步操作来批量保存对象列表
数据库·python
python_chai1 小时前
从数据汇总到高级分析,SQL 查询进阶实战(下篇)—— 分组、子查询与窗口函数全攻略
数据库·sql·mysql
在努力的前端小白1 小时前
Spring Boot 敏感词过滤组件实现:基于DFA算法的高效敏感词检测与替换
java·数据库·spring boot·文本处理·敏感词过滤·dfa算法·组件开发
未来之窗软件服务1 小时前
自建知识库,向量数据库 (九)之 量化前奏分词服务——仙盟创梦IDE
数据库·仙盟创梦ide·东方仙盟·自建ai·ai分词
冒泡的肥皂5 小时前
MVCC初学demo(一
数据库·后端·mysql
.Shu.6 小时前
Redis Reactor 模型详解【基本架构、事件循环机制、结合源码详细追踪读写请求从客户端连接到命令执行的完整流程】
数据库·redis·架构
薛晓刚8 小时前
当MySQL的int不够用了
数据库
SelectDB技术团队9 小时前
Apache Doris 在菜鸟的大规模湖仓业务场景落地实践
数据库·数据仓库·数据分析·apache doris·菜鸟技术
星空下的曙光9 小时前
mysql 命令语法操作篇 数据库约束有哪些 怎么使用
数据库·mysql