【深入学习Redis丨第六篇】Redis哨兵模式与操作详解
〇、前言
哨兵是一个分布式系统,你可以在一个架构中运行多个哨兵进程,这些进程使用流言协议来接收关于Master主服务器是否下线的信息,并使用投票协议来决定是否执行自动故障迁移,以及选择哪个Slave作为新的Master。

文章目录
- 〇、前言
- 一、哨兵模式概述
- 1.1、为什么要启动哨兵模式
- 1.2、什么是哨兵模式
- 1.3、哨兵工作原理
- 1.4、哨兵功能
- 1.5、配置说明
- 二、单哨兵模式
- 2.1、设置哨兵
- 2.2、启动哨兵
- 2.3、从机宕机
- 2.4、主机宕机
- 三、多哨兵模式
- 3.1、设置哨兵
- 3.2、启动哨兵
- 3.3、从机宕机
- 3.4、主机宕机
一、哨兵模式概述
1.1、为什么要启动哨兵模式
当我们的主服务器宕机后,要手动的去切换主从模式,这样的人工干预,费事费力,还会造成一段时间我们的服务不能使用。所有我们要使用哨兵模式来解决这一问题。
1.2、什么是哨兵模式
哨兵是对Redis的系统的运行情况的监控,它是一个独立进程,功能有二个:
监控主机Redis和从机Redis是否运行正常;
主机Redis出现故障后自动将从机转化为主机;
1.3、哨兵工作原理
单个哨兵的工作原理:

单个哨兵,只需要监控主Redis,就可能得到从Redis。
多个哨兵的工作原理:

多个哨兵,不仅同时监控主从Redis,而且哨兵之间互为监控。
多个哨兵,防止哨兵单点故障。
1.4、哨兵功能
集群监控:负责监控主从集群中的Master和Slave进程是否正常工作。
故障转移(failover):如果Master宕机,会自动从Slave中选举出新的Master,进行主从自动切换。
配置中心:如果发生了故障转移,Sentinel负责通知客户端新的Master的地址。
消息通知:如果某个redis节点有故障,那么Sentsinel会发送报警消息给系统管理员。
1.5、配置说明
protected-mode no
#关闭保护模式,使外网能访问。
port 26379
#修改端口。三份文件分别不同。
daemonize no
#修改为后台运行。
pidfile /var/run/redis-sentinel.pid
#指定不同pid文件,注意文件夹不存在自己要新建。
logfile ""
#配置哨兵日志文件。
dir "/tmp"
#配置哨兵工作路径。
sentinel monitor mymaster 192.167.1.123 6379 2
#配置哨兵需要监控的主节点ip和端口,2表示哨兵数(quorum)
sentinel auth-pass mymaster ibethfy
#配置哨兵连接主节点的认证密码。(主节点配置的requirepass)。
sentinel down-after-milliseconds mymaster 5000
#配置多少毫秒后没收到主节点的反馈,则主观认为主节点down了。
sentinel failover-timeout mymaster 30000
#表示如果30秒后,mysater仍没活过来,则启动failover,从剩下的slave中选一个升级为master
sentinel parallel-syncs mymaster 1
#parallel-syncs 指定了在执行故障转移时, 最多可以有多少个slave同时对新的master进行同步, 这个数字越小, 完成故障转移所需的时间就越长
注意:
majority表示大多数哨兵
quorum表示哨兵数
如果quorum < majority,比如5个哨兵,majority就是3,quorum设置为2,那么就3个哨兵授权就可以执行切换。
但是如果quorum >= majority,那么必须quorum数量的哨兵都授权,比如5个哨兵,quorum是5,那么必须5个哨兵都同意授权,才能执行切换。
二、单哨兵模式
在一主多从的环境中,125为主机,123、124为从机
哨兵主机121
2.1、设置哨兵
修改配置文件/usr/local/redis/sentinel.conf
[root@zutuanxue redis]# vim sentinel.conf#修改配置
sentinel monitor mymaster 192.168.1.123 6379 1
注意:
mymaster:监控主数据的名称,命名时可以使用大小写字母和“.-_”符号
192.168.1.123 6379:主机的IP和端口号
2.2、启动哨兵
[root@zutuanxue redis]# ./src/redis-sentinel ./sentinel.conf
或
[root@zutuanxue redis]# ./src/redis-server ./sentinel.conf --sentinel

看出:
125为主机,123、124为从机
2.3、从机宕机
杀死124从机进程,30秒后观察哨兵日志
[root@zutuanxue redis]# ps -ef|grep redis
root 18752 12399 0 06:35 pts/1 00:00:00 ./src/redis-cli
root 22163 1 0 12:18 ? 00:00:02 ./src/redis-server 0.0.0.0:6379
root 22392 22002 0 12:44 pts/2 00:00:00 grep --color=auto redis
[root@zutuanxue redis]# kill -s 9 22163

启动124从机,观察哨兵日志
[root@zutuanxue redis]# ./src/redis-server ./redis.conf

2.4、主机宕机
杀死125主机进程,30秒后观察哨兵日志
[root@zutuanxue redis]# ps -ef|grep redis
root 14988 1 0 06:20 ? 00:01:15 ./src/redis-server 0.0.0.0:6379
root 15144 8874 0 06:35 pts/0 00:00:00 ./src/redis-cli
root 18527 18104 0 12:50 pts/1 00:00:00 grep --color=auto redis
[root@zutuanxue redis]# kill -s 9 14988

日志状态说明:
+reset-master:
#主服务器已被重置。
+slave:
#一个新的从服务器已经被 Sentinel 识别并关联。
+failover-state-reconf-slaves:
#故障转移状态切换到了 reconf-slaves 状态。
+failover-detected:
#另一个 Sentinel 开始了一次故障转移操作,或者一个从服务器转换成了主服务器。
+slave-reconf-sent:
#领头(leader)的 Sentinel 向实例发送了 [SLAVEOF](/commands/slaveof.html) 命令,为实例设置新的主服务器。
+slave-reconf-inprog:
#实例正在将自己设置为指定主服务器的从服务器,但相应的同步过程仍未完成。
+slave-reconf-done:
#从服务器已经成功完成对新主服务器的同步。
-dup-sentinel:
#对给定主服务器进行监视的一个或多个 Sentinel 已经因为重复出现而被移除 —— 当 Sentinel 实例重启的时候,就会出现这种情况。
+sentinel:
#一个监视给定主服务器的新 Sentinel 已经被识别并添加。
+sdown:
#给定的实例现在处于主观下线状态。
-sdown:
#给定的实例已经不再处于主观下线状态。
+odown:
#给定的实例现在处于客观下线状态。
-odown:
#给定的实例已经不再处于客观下线状态。
+new-epoch:
#当前的纪元(epoch)已经被更新。
+try-failover:
#一个新的故障迁移操作正在执行中,等待被大多数 Sentinel 选中(waiting to be elected by the majority)。
+elected-leader:
#赢得指定纪元的选举,可以进行故障迁移操作了。
+failover-state-select-slave:
#故障转移操作现在处于 select-slave 状态 —— Sentinel 正在寻找可以升级为主服务器的从服务器。
no-good-slave:
#Sentinel 操作未能找到适合进行升级的从服务器。Sentinel 会在一段时间之后再次尝试寻找合适的从服务器来进行升级,又或者直接放弃执行故障转移操作。
selected-slave:
#Sentinel 顺利找到适合进行升级的从服务器。
failover-state-send-slaveof-noone:
#Sentinel 正在将指定的从服务器升级为主服务器,等待升级功能完成。
failover-end-for-timeout:
#故障转移因为超时而中止,不过最终所有从服务器都会开始复制新的主服务器(slaves will eventually be configured to replicate with the new master anyway)。
failover-end:
#故障转移操作顺利完成。所有从服务器都开始复制新的主服务器了。
+switch-master
#配置变更,主服务器的 IP 和地址已经改变。 这是绝大多数外部用户都关心的信息。
+tilt:
#进入 tilt 模式。
-tilt:
#退出 tilt 模式
启动125主机,观察哨兵日志
[root@zutuanxue redis]# ./src/redis-server ./redis.conf

三、多哨兵模式
在一主多从的环境中,123为主机,124、125为从机
121中设置三个哨兵sentinel-1.conf、sentinel-2.conf、sentinel-3.conf
3.1、设置哨兵
将哨兵文件sentinel.conf,复制三份sentinel-1.conf、sentinel-2.conf、sentinel-3.conf
[root@zutuanxue redis]# cp sentinel.conf sentinel-1.conf
[root@zutuanxue redis]# cp sentinel.conf sentinel-2.conf
[root@zutuanxue redis]# cp sentinel.conf sentinel-3.conf
修改配置文件/usr/local/redis/sentinel-1.conf
[root@zutuanxue redis]# vim sentine-l.conf#修改配置
protected-mode no
port 27001
daemonize yes
pidfile "/var/run/redis-sentinel-27001.pid"
logfile "/usr/local/redis/log/27001.log"
sentinel monitor m1 192.168.1.123 6379 1
#sentinel myid c299ec06a9dde77dcbc086082e9d7e30a29615b7
修改配置文件/usr/local/redis/sentinel-2.conf
[root@zutuanxue redis]# vim sentine-2.conf#修改配置
protected-mode no
port 27002
daemonize yes
pidfile "/var/run/redis-sentinel-27002.pid"
logfile "/usr/local/redis/log/27002.log"
sentinel monitor m2 192.168.1.123 6379 1
#sentinel myid c299ec06a9dde77dcbc086082e9d7e30a29615b7
修改配置文件/usr/local/redis/sentinel-3.conf
[root@zutuanxue redis]# vim sentine-3.conf#修改配置
protected-mode no
port 27003
daemonize yes
pidfile "/var/run/redis-sentinel-27003.pid"
logfile "/usr/local/redis/log/27003.log"
sentinel monitor m3 192.168.1.123 6379 1
#sentinel myid c299ec06a9dde77dcbc086082e9d7e30a29615b7
3.2、启动哨兵
[root@zutuanxue redis]# ./src/redis-sentinel ./sentinel-1.conf
[root@zutuanxue redis]# ./src/redis-sentinel ./sentinel-2.conf
[root@zutuanxue redis]# ./src/redis-sentinel ./sentinel-3.conf
3.3、从机宕机
杀死125从机进程
[root@zutuanxue redis]# ps -ef|grep redis
root 20733 1 0 11:55 ? 00:00:00 ./src/redis-server 0.0.0.0:6379
root 20775 20646 0 11:59 pts/0 00:00:00 grep --color=auto redis
[root@zutuanxue redis]# kill -s 9 20733
启动125从机
[root@zutuanxue redis]# ./src/redis-server ./redis.conf
3.4、主机宕机
杀死123主机进程,30秒后观察哨兵日志
[root@zutuanxue redis]# ps -ef|grep redis
root 27555 1 0 11:55 ? 00:00:01 ./src/redis-server 0.0.0.0:6379
root 27693 27393 0 12:08 pts/0 00:00:00 grep --color=auto redis
[root@zutuanxue redis]# kill -s 9 27555
启动123主机
[root@zutuanxue redis]# ./src/redis-server ./redis.conf
相关文章:
【深入学习Redis丨第六篇】Redis哨兵模式与操作详解
〇、前言 哨兵是一个分布式系统,你可以在一个架构中运行多个哨兵进程,这些进程使用流言协议来接收关于Master主服务器是否下线的信息,并使用投票协议来决定是否执行自动故障迁移,以及选择哪个Slave作为新的Master。 文章目录 〇、…...
开源项目 GAN 漫画风格化 UGATIT
开源项目:DataBall / UGATIT GitCode * 数据集 * [该项目制作的训练集的数据集下载地址(百度网盘 Password: gxl1 )](https://pan.baidu.com/s/1683TRcv3r3o7jSitq3VyYA) * 预训练模型 * [预训练模型下载地址(百度网盘 Password: khbg )](https://pan.ba…...
SegFormer网络结构的学习和重构
因为太多的博客并没有深入理解,本文是自己学习后加入自己深入理解的总结记录,方便自己以后查看。 segformer中encoder、decoder的详解。 学习前言 一起来学习Segformer的原理,如果有用的话,请记得点赞关注哦。 一、Segformer的网络结构图 网络结构&…...
ubuntu个人实用配置问题
记录两年前试图用Ubuntu作为自己的日常系统的实际情况 记录时间2022年8月26日 中间连输入法都安装不上。。哈哈又被自己笑到啦! ubuntu 安装 使用市面上的各种 U 盘启动盘制作工具,下载 iso 文件之后将清空指定的 U 盘并制作为启动 U 盘,…...
Xk8s证书续期
Master节点 备份文件 cp -r /etc/kubernetes/ /etc/kubernetes-20211021-bak tar -cvzf kubernetes-20211021-bak.tar.gz /etc/kubernetes-20211021-bak/cp -r ~/.kube/ ~/.kube-20211021-bak tar -cvzf kube-20211021-bak.tar.gz ~/.kube-20211021-bakcp -r /var/lib/kube…...
仓颉编程入门2,启动HTTP服务
上一篇配置了仓颉sdk编译和运行环境,读取一个配置文件,并把配置文件简单解析了一下。 前面读取配置文件,使用File.readFrom(),这个直接把文件全部读取出来,返回一个字节数组。然后又创建一个字节流,给文件…...
Linux驱动开发初识
Linux驱动开发初识 文章目录 Linux驱动开发初识一、驱动的概念1.1 什么是驱动:1.2 驱动的分类: 二、设备的概念2.1 主设备号&次设备号:2.2 设备号的作用: 三、设备驱动整体调用过程3.1 上层用户操控设备的流程:3.2…...
前端面试题(三)
11. Web API 面试题 如何使用 fetch 发起网络请求? fetch 是现代浏览器中用于发起网络请求的原生 API。它返回一个 Promise,默认情况下使用 GET 请求:fetch(https://api.example.com/data).then(response > response.json()).then(data &g…...
骨传导耳机哪个牌子最好用?实测五大实用型骨传导耳机分析!
在快节奏的现代生活中,耳机已成为我们不可或缺的伴侣。无论是在通勤路上、运动时,还是在安静的图书馆,耳机都能为我们提供一片属于自己的音乐天地。然而,长时间使用传统耳机可能会对听力造成损害,尤其是在高音量下。因…...
18.1 k8s服务组件之4大黄金指标讲解
本节重点介绍 : 监控4大黄金指标 Latency:延时Utilization:使用率Saturation:饱和度Errors:错误数或错误率 apiserver指标 400、500错误qps访问延迟队列深度 etcd指标kube-scheduler和kube-controller-manager 监控4大黄金指标 …...
MacOS Catalina 从源码构建Qt6.2开发库之02: 配置QtCreator
安装Qt-creator-5.0.2 在option命令中配置Qt Versions指向 /usr/local/bin/qmake6 Kits选入CLang...
某建筑市场爬虫数据采集逆向分析
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 目标网站 aHR0cHM6Ly9qenNjLm1vaHVyZC5nb3YuY24vZGF0YS9jb21wYW55P2NvbXBsZXhuYW1lPSVFNiVCMCVCNA 提示:以下是本篇文章正文内容,下面…...
降低存量房贷利率的主要原因和影响
降低存量房贷利率的主要原因和影响可以从以下几个方面来分析: 原因 刺激消费与内需:降低房贷利率可以减少贷款人的月供负担,增加家庭的可支配收入,理论上能刺激消费,促进经济的内循环。在经济面临压力时,这…...
远程桌面连接工具Microsoft Remote Desktop Beta for Mac
Microsoft Remote Desktop Beta for Mac 是一款功能强大的远程桌面连接工具,具有以下功能特点: 软件下载地址 跨平台连接: 允许 Mac 用户轻松连接到运行 Windows 操作系统的计算机,打破了操作系统的界限,无论这些 Wi…...
Linux 之 logrotate 【日志分割】
简介 logrotate 是一个用于管理日志文件的工具。它可以自动对日志文件进行轮转、压缩、删除等操作,以防止日志文件无限增长占用过多磁盘空间。logrotate 通常作为一个守护进程定期运行,也可以通过 cron 任务来调度执行 工作原理 按照配置文件中的规则…...
Canvas简历编辑器-Monorepo+Rspack工程实践
Canvas简历编辑器-MonorepoRspack工程实践 在之前我们围绕Canvas聊了很多代码设计层面的东西,在这里我们聊一下工程实践。在之前的文中我也提到过,因为是本着学习的态度以及对技术的好奇心来做的,所以除了一些工具类的库例如 ArcoDesign、Re…...
uni-app - - - - -vue3使用i18n配置国际化语言
uni-app - - - - -使用i18n配置国际化语言 1. 安装vue-i18n2. 配置文件2.1 创建如下文件2.2 文件配置2.3 main文件导入i18n 3. 页面内使用3.1 template内直接使用3.2 变量接收使用 1. 安装vue-i18n npm install vue-i18n --save2. 配置文件 2.1 创建如下文件 locales文件夹里…...
VSCode好用的插件推荐
1. Chinese 将vscode翻译成简体中文 如果安装了依然是英文,请参考如下方法: ctrlshfitp 2. ESLint 自动检查规范 3. Prettier - Code formatter 可以自动调整代码的缩进、换行和空格,确保代码风格统一。通过配置,Prettier可…...
Linux:八种重定向详解(万字长文警告)
相关阅读Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 本文将讨论Linux中的重定向相关问题,在阅读本文前,强烈建议先学习文件描述符的相关内容Linux:文件描述符详解。 重定向分为两类&#x…...
set和map系列容器
前言 学习完二叉搜索树本来是应该直接深化,讲平衡二叉搜索树的。但是在学习它的底层逻辑之前呢,我们先来学学它的应用场面。 set和map的底层不是平衡二叉搜索树而是红黑树,实际上的难度比平衡搜索二叉树大。所以它的底层逻辑会比平衡二叉树更…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践
前言:本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中,跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南,你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案,并结合内网…...
一些实用的chrome扩展0x01
简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序,无论是测试应用程序、搜寻漏洞还是收集情报,它们都能提升工作流程。 FoxyProxy 代理管理工具,此扩展简化了使用代理(如 Burp…...
