哨兵机制Sentinel

news2024/11/26 4:53:29

哨兵机制Sentinel

主从复制:读写分离,多读少写,单点故障(主机宕机,从机不能自动切换),负载压力(客户端请求,并发),数据集中存储(主从数据是完全一致

哨兵机制:主从故障转移,从切换为主,数据集中存储(主从数据是完全一致

1 哨兵机制

哨兵机制的出现是为了解决主从复制的缺点,不能自动实现故障转移

哨兵模式是Redis的高可用解决方案之一,它旨在提供自动故障转移和故障检测的功能。在传统的Redis部署中,单个Redis节点可能成为单点故障,一旦该节点宕机,整个系统将不可用。为了解决这个问题,哨兵模式引入了多个Redis节点,其中一个节点被选为主节点,其他节点作为从节点。

2 哨兵机制作用

  • 监控

    • 不断的检查 master 和 slave 是否正常运行。

    • master 存活检测、master与slave运行情况检测。

  • 通知(提醒)

    • 当被监控的服务器出现问题时,向其他(哨兵间,客户端)发送通知。

  • 自动故障转移

    • 断开 master 与 slave 连接,选取一个 slave 作为 master,将其他 slave 连接到新的 master,并告知客户端新的服务器地址。

3 哨兵模式场景应用

  • 高可用性要求较高的场景:通过自动故障转移,确保服务的持续可用。

  • 数据备份和容灾恢复:在主从复制的基础上,提供自动故障转移功能。

哨兵模式在主从复制模式的基础上实现了自动故障转移,提高了系统的高可用性。然而,它仍然无法实现数据分片。如果需要实现数据分片和负载均衡,可以考虑使用Cluster模式。

4 sentinel高可用

原理:当主节点出现故障时,由Redis Sentinel自动完成故障发现和转移,并通知应用方,实现高可用性。

其实整个过程只需要一个哨兵节点来完成,首先使用Raft算法(选举算法)实现选举机制,选出一个哨兵节点来完成转移和通知

4.1 哨兵的定时监控任务

任务1:

每个哨兵节点每10秒会向主节点和从节点发送info命令获取最新拓扑结构图,哨兵配置时只要配置对主节点的监控即可,通过向主节点发送info,获取从节点的信息,并当有新的从节点加入时可以马上感知到

任务2:

每个哨兵节点每隔2秒会向redis数据节点的指定频道(主节点)上发送该哨兵节点对于主节点的判断以及当前哨兵节点的信息,同时每个哨兵节点也会订阅该频道,来了解其它哨兵节点的信息及对主节点的判断,其实就是通过消息publish和subscribe来完成的

任务3:

每隔1秒每个哨兵会向主节点、从节点及其余哨兵节点发送一次ping命令做一次心跳检测,这个也是哨兵用来判断节点是否正常的重要依据

主观下线和客观下线

主观下线是指一个哨兵节点认为主节点不可用,但它并不确定其他哨兵节点是否也认为主节点不可用。当一个哨兵节点在一定时间(配置参数:down-after-milliseconds)内无法与主节点通信(比如发送PING命令没有收到响应),它会认为主节点下线。但在这个阶段,其他哨兵节点并不知道这个节点的状态,仅有一个哨兵主观地认为主节点宕机。

客观下线是指一个主节点被多数哨兵节点认定为不可用。当一个哨兵节点认为主节点宕机后,它会向其他哨兵节点询问对主节点的状态,并请求其他哨兵进行确认。当超过quorum(选举)个数(大多数至少需要半数加1)的哨兵节点都认为主节点不可用,那么主节点就会被判定为客观下线。客观下线意味着主节点的状态在整个哨兵集群中得到了确认。

主观下线和客观下线的引入是为了避免误判。如果只有一个哨兵节点认为主节点下线,那么很可能是网络抖动等原因导致的,此时并不应该进行故障转移。只有多数的哨兵节点都确认主节点下线,才能确保故障转移的正确性,保证整个集群的稳定性。

哨兵模式使用主观下线和客观下线状态的组合来实现可靠的主节点故障检测和故障转移,从而确保Redis集群的高可用性。

4.2 领导者哨兵选举流程

在多Sentinel模式下,各节点会相互监控主从节点的健康状态。当主节点发生故障时,首先由Sentinel节点之间基于Raft算法进行投票选举,按照谁发现主节点故障谁去处理的原则,选举出一个领头Sentinel节点(Leader Sentinel)。这个领头Sentinel节点负责进行故障转移操作。

  • 每个在线的哨兵节点都可以成为领导者,当它确认(比如哨兵3)主节点下线时,会向其它哨兵发is-master-down-by-addr命令,征求判断并要求将自己设置为领导者,由领导者处理故障转移;

  • 当其它哨兵收到此命令时,可以同意或者拒绝它成为领导者;

  • 如果哨兵3发现自己在选举的票数大于等于num(sentinels)/2+1时,将成为领导者,如果没有超过,继续选举…………

4.3 故障转移机制

故障转移过程中,领头Sentinel节点会根据一定的规则在所有从节点中选择一个最优的从节点作为新的主节点(Master)。一般会选择复制偏移量最大且优先级较高的从节点作为新的主节点。然后,领头Sentinel节点通过发布订阅功能,通知其他从节点更改配置文件,将它们的连接从原来的主节点转移到新的主节点上。

  1. 由Sentinel节点定期监控发现主节点是否出现了故障

sentinel会向master发送心跳PING来确认master是否存活,如果master在“一定时间范围”内不回应PONG 或者是回复了一个错误消息,那么这个sentinel会主观地(单方面地)认为这个master已经不可用了

  1. 当主节点出现故障,此时3个Sentinel节点共同选举了Sentinel3节点为领导,负载处理主节点的故障转移

  1. 故障转移详细流程-确认主节点

    • 过滤掉不健康的(下线或断线),没有回复过哨兵ping响应的从节点

    • 选择salve-priority从节点优先级最高(redis.conf)的

    • 选择复制偏移量最大,指复制最完整的从节点

  2. 由Sentinel3领导者节点执行故障转移,但是自动执行

    • 将slave-1脱离原从节点,升级主节点

    • 将从节点slave-2指向新的主节点

    • 通知客户端主节点已更换

    • 将原主节点(oldMaster)变成从节点,指向新的主节点

  1. 故障转移后的redis sentinel的拓扑结构图

5 部署哨兵

以3个Sentinel节点、2个从节点、1个主节点为例进行安装部署

5.1 准备

先搭好一主两从redis的主从复制

5.2 配置文件

配置多个哨兵节点sentinel.conf,三个配置除端口外,其它一样。

复制解压目录下的sentinel.conf到安装目录下,修改sentinel.conf配置文件,几个哨兵,几个配置文件:

保留一个哨兵不做后端启动

# 端口号
port 26379
​
# 后端启动
daemonize no
​
# 不受保护
protected-mode no 
​
pidfile "/var/run/redis-26379.pid"
​
logfile "/opt/redislog/26379.log"
​
# 监控主节点的IP地址端口,sentinel监控的master的名字叫做mymaster,2代表,当集群中有2个sentinel认为master死了时,才能真正认为该master已经不可用了
sentinel monitor mymaster 192.168.190.128 6370 2
​
# 主机认证密码
sentinel auth-pass mymaster 123
​
# 故障转移时最多可以有2从节点同时对新主节点进行数据同步
sentinel config-epoch mymaster 2 
​
sentinel leader-epoch mymaster 2
​
# 故障转移超时时间180s
# a.如果转移超时失败,下次转移时时间为之前的2倍;
# b.从节点变主节点时,从节点执行slaveof no one命令一直失败的话,当时间超过180S时,则故障转移失败
# c.从节点复制新主节点时间超过180S转移失败
sentinel failover-timeout mymasterA 3000
​
# sentinel节点定期向主节点ping命令,当超过了300S时间后没有回复,可能就认定为此主节点出现故障
sentinel down-after-milliseconds mymasterA 3000
​
# 故障转移后,1代表每个从节点按顺序排队一个一个复制主节点数据,如果为3,指3个从节点同时并发复制主节点数据,不会影响阻塞,但存在网络和IO开销
sentinel parallel-syncs mymasterA 1 

5.3 启动redis服务

启动主从服务,先启动主再启动从

# 主机
./redis-server conf/6370.conf 
​
# 从机
./redis-server conf/6380.conf 
./redis-server conf/6390.conf     

5.4 启动哨兵节点

启动哨兵节点,多个都启动

./redis-sentinel conf/26370.conf
./redis-sentinel conf/26380.conf
./redis-sentinel conf/26390.conf

到此服务全部启动完毕

5.5 测试哨兵机制

连接到6370的redis的服务,可看到6370就是主节点,他有6380和6390两个从节点

杀掉6370的redis服务

kill -9 6370pid值

可以看到杀掉6370以后6390变为了主节点,6380变为了6390的从节点

重新启动6370以后变为6380的从节点

6 部署建议

  • sentinel节点应部署在多台物理机(线上环境)

  • 至少三个且奇数个sentinel节点

  • 3个sentinel可同时监控一个主节点或多个主节点

  • 监听N个主节点较多时,如果sentinel出现异常,会对多个主节点有影响,同时还会造成sentinel节点产生过多的网络连接,一般线上还是, 3个sentinel监听一个主节点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2128851.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

k8s 容忍和污点

文章目录 Taint作用在节点上,能够使节点排斥一类特定的Pod,也就是不能“兼容”该节点的污点的Pod。对应的Toleration作用在Pod上,意为容忍,也就是可以兼容某类污点。 给节点增加一个Taint也很简单,直接使用kubectl ta…

Day23_0.1基础学习MATLAB学习小技巧总结(23)——句柄图形

利用空闲时间把碎片化的MATLAB知识重新系统的学习一遍,为了在这个过程中加深印象,也为了能够有所足迹,我会把自己的学习总结发在专栏中,以便学习交流。 参考书目:《MATLAB基础教程 (第三版) (薛山)》 之前的章节都是…

【区块链通用服务平台及组件】信息数据流转验真技术研究项目 | FISCO BCOS应用案例

在日常工作中,相关系统每天会产生大量数据,系统之间有多种模式数据交互方式,数据监管工作量巨大,急需 数据追溯定位工具来辅助监管;数据在生产过程中经常会出现采集、提交、修改、删除等操作,需要对数据变更…

【软件】Rhythmbox播放器调节音量

Rhythmbox播放器调节音量 零、起因 最近换了Ubuntu系统,在写代码时想听歌,故使用Rhythmbox播放器播放一些mp3文件,但同时又要看教程,希望音乐声音小一点,但是找来找去都没有发现Rhythmbox有调音量的地方,…

Linux 之 Nginx 下载/安装

下载 下载地址 nginx: download 安装 在线安装 配置新的yum源 # 切换到yum源目录 cd /etc/yum.repos.d/# 创建yum源文件 touch nginx.repo# 配置nginx.repo文件内容 vim nginx.reponginx.repo 文件内容 namenginx repo baseurlhttp://nginx.org/packages/centos/$releas…

Kubernetes从零到精通(08-工作负载-DaemonSet)

DaemonSet示例 DaemonSet是Kubernetes中的一种工作负载类型,专门用来确保集群中的每个(或指定的)节点上都运行一个Pod实例。它非常适用于需要在集群所有节点上提供服务的场景,比如日志收集、监控代理、或者网络插件。 以下是Daemo…

MS5612M_ 2.7V 到 5.5V、 12Bit、两通道数模转换器

产品简述 MS5612M 是一款 12bit 两通道输出的电压型 DAC ,接口采用 三线串口模式,可以兼容 TMS320 、 SPI 、 QSPI 和 Microwire 串 口。 MS5612M 数据有 16bit ,包括控制字节,和 12bitDAC 数据。 MS5612M 电源范围是 2.7V 到…

NIDS——suricata(一)

一、基于流量的入侵检测系统 1、基于主机的入侵检测系统——HIDS (1)功能 ①通过监控和分析系统日志、应用程序日志和安全日志来识别异常活动和潜在威胁。 ②通过跟踪分析系统上的命令执行和系统调用来检查是否存在恶意命令执行或不正常的系统操作。…

两个pdf合并成一个pdf,这些pdf合并小技巧了解下

在日常工作和学习中,我们经常会遇到需要将多个PDF文件合并成一个文件的情况。这不仅可以提高文件管理的效率,还能让信息展示更加集中和便捷。今天就来给大家分享几种非常简单便捷的PDF合并小技巧,一起来学习下吧。 方法一:WPS WP…

装杯 之 Linux 指令1

hello,欢迎来到linux世界,在害没有学习linux时,看到别人操作,网课,真高级,感觉好厉害,就是说白了,看起来牛逼。ok,接下来,请大佬们进入linux之旅。 1.ls指令…

Linux: network: esp:收到了重复的包?

最近遇到一个问题,是说收到了dup的ESP包,这是表象上的两个相同的ESP,那是因为在wireshark的首选项里IPv4,没有选择重组分片包,导致wireshark先做了ESP的解析,如果选择IPv4协议里的重组分片包,会看到下面说有三个分片,而且其中一个有overlap。 所以,这个目前还是未解的…

Debian项目实战——环境搭建篇

Debian系统安装 准备工作 1、系统镜像:根据自己的需要选择合适的版本格式:x86 / arm 架构 | 最好下载离线安装版本 | 清华镜像源 2、制作工具:balenaEtcher 3、系统媒介:16G以上U盘最佳 烧录镜像 打开balenaEtcher进行烧录&am…

无人机视角-道路目标检测数据集 航拍 8600张 voc yolo

数据集名称: 无人机视角-道路目标检测数据集 数据集规模: 图像数量:8600张拍摄方式:航拍(使用无人机拍摄)标注格式:支持VOC和YOLO格式 数据集内容: 该数据集由无人机从空中拍摄的…

HTML+CSS实现光影划过效果

HTMLCSS实现光影划过效果&#xff0c;效果如下方小小图 废话不多说直接上代码 <div class"logo_link">Hello Word!!</div> <style>.logo_link{ width: 200px; font-size:30px; }.logo_link::before {content: "";position: absolute;le…

git一个项目关联多个远程仓库

一行代码就行&#xff1a; git remote set-url origin [想要关联的远程仓库地址]想要关联哪个就切换哪个 或者不用每次切换&#xff0c;集中管理&#xff1a; Git->Manage Remotes 点击“”&#xff0c;填入Name和想要关联的远程库地址 每次push时执行命令 git push [为…

灌区信息化面临的挑战分析

灌区信息化作为现代农业发展的重要支撑&#xff0c;旨在通过信息技术的深度融合与应用&#xff0c;实现水资源的高效管理、精准灌溉以及灌区运行的智能化。然而&#xff0c;在推进灌区信息化的过程中&#xff0c;一系列挑战也随之浮现&#xff0c;这些挑战不仅涉及技术层面&…

众望所归!业内三大刊之首,终于荣升1区TOP,预测明年IF稳涨

【SciencePub学术】本期&#xff0c;小编给大家推荐一下几本控制领域认可度极高的SCI。下文有对它们的详细介绍&#xff01; 01 IEEE Transactions on Automatic Control 控制领域顶级期刊&#xff0c;基本上能中一篇的话算是在控制领域有头有脸的人物了&#xff0c;对理论…

搭建Windows下的Rust开发环境

【图书介绍】《Rust编程与项目实战》-CSDN博客 《Rust编程与项目实战》(朱文伟&#xff0c;李建英)【摘要 书评 试读】- 京东图书 (jd.com) Rust编程与项目实战_夏天又到了的博客-CSDN博客 2.1.1 安装vs_buildtools 在Windows系列操作系统中&#xff0c;Rust开发环境需要依…

【Linux】网络层协议——IP

一、IP协议 在前面&#xff0c;我们学习了应用层和传输层&#xff0c;接下来&#xff0c;我们来学习网络层&#xff0c;网络层的主要功能是在复杂的网络环境中确定一个合适的路由。 1.1 IP协议的基本概念 主机&#xff1a;配有IP地址&#xff0c;有可以进行路由控制的设备路由…

韶音开放式耳机好用吗?南卡、韶音、Oladance、Cleer热门开放式耳机一周横评

​最近开放式耳机真的是很热门的一类蓝牙耳机了&#xff0c;很多博主以及达人现在都戴上了开放式耳机&#xff0c;那么作为一名从业三年的数码博主&#xff0c;我也不能落下了&#xff01;今天就买了四款目前市面上很热门的开放式耳机&#xff0c;今天深度测评一下这些开放式耳…