【Redis从头学-13】Redis哨兵模式解析以及搭建指南
🧑💻作者名称:DaenCode
🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。
😎人生感悟:尝尽人生百味,方知世间冷暖。
📖所属专栏:Redis从头学

文章目录
- 🌟前言
- 🌟概述
- 🌟搭建过程
- 前情提要
- 配置文件创建
- 启动哨兵
- 🌟场景测试
- 🌟写在最后
🌟前言
在上一篇文章中介绍了主从分离+读写分离以及其搭建的多种方式。如果其中的主节点宕机,需要我们手工去重新设置主节点,那么有没有一种方式可以自动设置主节点呢?那就是Redis中的哨兵机制,本文就介绍哨兵机制的原理以及其搭建方式。
🌟概述
哨兵模式:通过发送命令给多个节点来监控Redis的master以及slave的运行状态,并在master服务宕机后,自动将slave节点转为master服务。
哨兵模式的三大工作任务
- 监控:监控master以及其slave节点的运行状态。
- 提醒:将检测的节点信息,通过API向客户端发送相关信息。
- 自动故障转移:当master服务不能正常运行时,内部将从slave节点中选举出最新的master服务,并通知其他的slave节点更新主节点配置信息。
多哨兵模式下的下线名称
- 主观下线:监控的Redis节点没有在规定的时间down-after-milliseconds内作出回应,则为主观下线。适用于所有节点。
- 客观下线:监控的主节点发生故障时,哨兵与哨兵之间通过is-master-down-by-addr命令互相交流,并进行投票,若票数满足要求则判断为下线。只适用于主节点。
- 仲裁:简单来说就是过个哨兵根据相关配置,进行投票选举出最新的主节点。
注意:实际应用中配置一个哨兵往往不能保证主节点一直能正常运行,往往需要配置多个哨兵,哨兵与哨兵之间还会互相监控。
🌟搭建过程
此文的哨兵模式基于【Redis从头学-12】Redis主从复制和读写分离的多种部署方式解析(普通方式、Docker搭建方式、Docker-Compose搭建方式)进行搭建,前置环境可前往这篇文章查看。
前情提要
- 开放相应的哨兵模式端口26379、26380、26381。默认端口为26379。
- 启动时,先启动主节点,再启动从节点,最后启动三个哨兵。
配置文件创建
配置项一览表
| 配置项 | 描述 |
|---|---|
port | 指定哨兵的监听端口,默认为26379。 |
bind | 指定哨兵绑定的IP地址。 |
dir | 指定哨兵的工作目录,用于存储持久化数据和日志文件。 |
sentinel monitor <master-name> <ip> <port> <quorum> | 定义要监控的主节点。<master-name>:主节点的名称。<ip> 和 <port>:主节点的地址和端口号。<quorum>:需要同意故障转移的最少票数。 |
sentinel down-after-milliseconds <master-name> <milliseconds> | 定义哨兵将主节点标记为下线的时间阈值。 |
sentinel parallel-syncs <master-name> <num> | 定义同时进行故障转移的最大并行同步数量。 |
sentinel failover-timeout <master-name> <milliseconds> | 定义故障转移操作的超时时间。 |
sentinel auth-pass <master-name> <password> | 如果主节点需要密码验证,使用此配置项提供密码。 |
sentinel deny-scripts-reconfig <master-name> | 禁止从节点执行配置修改操作。 |
sentinel leader-epoch <master-name> <epoch> | 指定当前哨兵的领导者纪元。 |
1.在data/路径下创建sentinel文件夹以及在sentinel文件夹下创建三个文件sentinel1.conf、sentinel2.conf、sentinel3.conf。
mkdir -p /data/sentinel--创建文件夹
cd /data/sentinel--进入到sentinel目录
touch sentinel1.conf sentinel2.conf sentinel3.conf---创建存放哨兵模式的配置文件
mkdir log--存放日志。
2.sentinel1.conf配置文件。
port 26379
bind 0.0.0.0
daemonize yes
pidfile "/var/run/sentinel1.pid"
logfile "/data/sentine/log/sentinel_26379.log"
dir "/tmp"
sentinel monitor mymaster 48.233.48.98 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel auth-pass mymaster daencode@top
sentinel failover-timeout mymaster 30000
3.sentinel2.conf配置文件。
port 26380
bind 0.0.0.0
daemonize yes
pidfile "/var/run/sentinel2.pid"
logfile "/data/sentinel/log/sentinel_26380.log"
dir "/tmp"
sentinel monitor mymaster 48.233.48.98 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel auth-pass mymaster daencode@top
sentinel failover-timeout mymaster 30000
4.sentinel3.conf配置文件。
port 26381
bind 0.0.0.0
daemonize yes
pidfile "/var/run/sentinel3.pid"
logfile "/data/sentinel/log/sentinel_26381.log"
dir "/tmp"
sentinel monitor mymaster 48.233.48.98 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel auth-pass mymaster daencode@top
sentinel failover-timeout mymaster 30000
启动哨兵
1.进入到redis安装目录中的bin目录。
cd /usr/local/redis/bin
2.依次启动三个哨兵。这里注意要先启动主从节点。
./redis-server /data/sentinel/sentinel1.conf --sentinel
./redis-server /data/sentinel/sentinel2.conf --sentinel
./redis-server /data/sentinel/sentinel3.conf --sentinel
3.验证是否启动成功。

4.进入到26379哨兵,查看节点信息。从下图红框部分可以看出为一主(name为mymaster),2从,3哨兵。
注意:如果红框内status状态为sdown,则代表没有配置成功。要去检查一下主从复制的配置文件以及哨兵配置文件中的IP地址是否有误、密码是否有误以及要注意关闭防火墙的配置。我这里找了半天,发现是自己的ip地址配错了,配置文件一定要细心编写,关键点在于ip地址、密码、路径
./redis-cli -h 49.233.48.98 -p 26379
#查看节点信息
info sentinel

🌟场景测试
这里对master主节点6379进行shutdown,之后查看哨兵节点的日志信息。
1.下线主节点master-6379。

2.查看其中一个哨兵的日志信息。

日志解读:
+sdown master mymaster 49.233.48.98 6379:表示主服务器(mymaster)在IP地址为49.233.48.98,端口为6379的节点上被判定为下线(sdown)。这可能是因为主服务器出现了故障或无法正常工作。+new-epoch 1:表示一个新的选举轮次(epoch)开始,这是哨兵在选举新的主服务器时使用的计数器。此处的"1"表示当前轮次的编号。+vote-for-leader 9ddfd87d9127f7f7f2eb7aba24bd422a7782f121 1:表示哨兵节点已经投票给ID为9ddfd87d9127f7f7f2eb7aba24bd422a7782f121的实例来成为新的主服务器。"1"表示该节点的投票数。+odown master mymaster 49.233.48.98 6379 #quorum 3/2:表示主服务器(mymaster)正在执行故障转移操作,并且需要获得至少3个哨兵节点的投票(quorum)以确保操作的可靠性。"3/2"表示当前获得的投票数。Next failover delay: I will not start a failover before Mon Aug 28 02:26:03 2023:表示下一次故障转移操作的启动时间将在指定时间之后。在这种情况下,在2023年8月28日02:26:03之前不会执行故障转移操作。+config-update-from sentinel 9ddfd87d9127f7f7f2eb7aba24bd422a7782f121 10.0.16.11 26381 @ mymaster 49.233.48.98 6379:表示哨兵节点从ID为9ddfd87d9127f7f7f2eb7aba24bd422a7782f121的实例获取到新的配置更新,并且该实例的IP地址为10.0.16.11,端口为26381。+switch-master mymaster 49.233.48.98 6379 49.233.48.98 6380:表示成功将主服务器切换到IP地址为49.233.48.98,端口从6379切换为6380。+slave slave 49.233.48.98:6381 49.233.48.98 6381 @ mymaster 49.233.48.98 6380:表示一个新的从属服务器(slave)成功连接到主服务器(mymaster),从属服务器的IP地址为49.233.48.98,端口为6381。+sdown slave 49.233.48.98:6379 49.233.48.98 6379 @ mymaster 49.233.48.98 6380:表示从属服务器(位于IP地址为49.233.48.98,端口为6379的节点上)被判定为下线。
3.登录之前的6380从节点,查看节点信息是否已经成为主节点。 可以看到已经成为新的master。

🌟写在最后
有关于一文带你搞懂Redis哨兵机制以及其搭建方式到此就结束了。在搭建时,编写的配置文件一定要详细检查、细心编写,还要注意防火墙的关闭或者端口号的开发。感谢大家的阅读,希望大家在评论区对此部分内容散发讨论,便于学到更多的知识。

相关文章:
【Redis从头学-13】Redis哨兵模式解析以及搭建指南
🧑💻作者名称:DaenCode 🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。 😎人生感悟:尝尽人生百味,方知世间冷暖。 📖所属专栏:Re…...
【个人笔记js的原型理解】
在 JavaScript 中,最常见的新建一个对象的方式就是使用花括号的方式。然后使用’ . 的方式往里面添加属性和方法。可见以下代码: let animal {}; animal.name Leo; animal.energe 10;animal.eat function (amount) {console.log(${this.name} is ea…...
Liunx系统编程:信号量
一. 信号量概述 1.1 信号量的概念 在多线程场景下,我们经常会提到临界区和临界资源的概念,如果临界区资源同时有多个执行流进入,那么在多线程下就容易引发线程安全问题。 为了保证线程安全,互斥被引入,互斥可以保证…...
大集合按照指定长度进行分割成多个小集合,用于批量多次处理数据
📚目录 拆分案例拆分的核心代码 通常我们对集合的更新或者保存都需要用集合来承载通过插入的效率,但是这个会遇到一个问题就是你不知道那天那个集合的数量可能就超了,虽然我们连接数据库进行批量提交会在配置上配置allowMultiQueriestrue,但是…...
ELK日志收集系统集群实验(5.5.0版)
目录 前言 一、概述 二、组件介绍 1、elasticsearch 2、logstash 3、kibana 三、架构类型 四、ELK日志收集集群实验 1、实验拓扑 2、在node1和node2节点安装elasticsearch 3、启动elasticsearch服务 4、在node1安装elasticsearch-head插件 5、测试输入 6、node1服…...
基于java swing和mysql实现的电影票购票管理系统(源码+数据库+运行指导视频)
一、项目简介 本项目是一套基于java swing和mysql实现的电影票购票管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、项目文档、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都…...
数据结构--6.0最短路径
目录 一、迪杰斯特拉算法(Dijkstra) 二、弗洛伊德算法(Floyd) 在网图和非网图中,最短路径的含义是不同的。 ——网图是两顶点经过的边上的权值之和最少的路径。 …...
Docker进阶:mysql 主从复制、redis集群3主3从【扩缩容案例】
Docker进阶:mysql 主从复制、redis集群3主3从【扩缩容案例】 一、Docker常规软件安装1.1 docker 安装 tomcat(默认最新版)1.2 docker 指定安装 tomcat8.01.3 docker 安装 mysql 5.7(数据卷配置)1.4 演示--删除mysql容器…...
遗传算法决策变量降维的matlab实现
1.案例背景 1.1遗传算法概述 遗传算法是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。它最初由美国Michigan大学的J. Holland教授提出,1967年, Holland 教授的学生 Bagley在其博士论文中首次提出了“遗传…...
基于Open3D和PyTorch3D读取三维数据格式OBJ
本节将讨论另一种广泛使用的3D数据文件格式,即OBJ文件格式。OBJ文件格式最初由Wavefront Technologies Inc.开发。与PLY文件格式类似,OBJ格式也有ASCII版本和二进制版本。二进制版本是专有的且未记录文档。本章主要讨论ASCII版本。 与之前类似,将通过示例来学习文件格式。第…...
带纽扣电池产品出口澳洲安全标准,纽扣电池IEC 60086认证
澳大利亚政府公布了《消费品(纽扣/硬币电池)安全标准》和《消费品(纽扣/硬币电池)信息标准》。届时出口纽扣/硬币电池以及含有纽扣/硬币电池产品到澳大利亚的供应商,必须遵守这些标准中的要求。 一、 安全标准及信息标…...
spring高级源码50讲-37-42(springBoot)
Boot 37) Boot 骨架项目 如果是 linux 环境,用以下命令即可获取 spring boot 的骨架 pom.xml curl -G https://start.spring.io/pom.xml -d dependenciesweb,mysql,mybatis -o pom.xml也可以使用 Postman 等工具实现 若想获取更多用法,请参考 curl …...
腾讯云、阿里云、华为云便宜云服务器活动整理汇总
云服务器的选择是一个很重要的事情,避免产生不必要的麻烦,建议选择互联网大厂提供的云计算服务,腾讯云、阿里云、华为云就是一个很不错的选择,云服务器稳定性、安全性以及售后各方面都更受用户认可,下面小编给大家整理…...
L1-055 谁是赢家(Python实现) 测试点全过
前言: {\color{Blue}前言:} 前言: 本系列题使用的是,“PTA中的团体程序设计天梯赛——练习集”的题库,难度有L1、L2、L3三个等级,分别对应团体程序设计天梯赛的三个难度。更新取决于题目的难度,…...
开发一个npm包
1 注册一个npm账号 npm https://www.npmjs.com/ 2 初始化一个npm 项目 npm init -y3编写一段代码 function fn(){return 12 }exports.hellofn;4发布到全局node_module npm install . -g5测试代码 创建一个text文件 npm link heath_apisnode index.js6登录(我默认的 https…...
介绍几种使用工具
FileWatch,观测文件变化,源码地址:https://github.com/ThomasMonkman/filewatch nlohmann::json,json封装解析,源码地址:https://github.com/nlohmann/json optionparser,解析选项,源…...
Vue:关于声明式导航中的 跳转、高亮、以及两个类名的定制
声明式导航-导航链接 文章目录 声明式导航-导航链接router-link的两大特点(能跳转、能高亮)声明式导航-两个类名定制两个高亮类名 实现导航高亮,实现方式其实,css,JavaScript , Vue ,都可以实现。其实关于路由导航&…...
Sharding-JDBC分库分表-自动配置与分片规则加载原理-3
Sharding JDBC自动配置的原理 与所有starter一样,shardingsphere-jdbc-core-spring-boot-starter也是通过SPI自动配置的原理实现分库分表配置加载,spring.factories文件中的自动配置类shardingsphere-jdbc-core-spring-boot-starter功不可没,…...
E8267D 是德科技矢量信号发生器
描述 最先进的微波信号发生器 安捷伦E8267D PSG矢量信号发生器是业界首款集成式微波矢量信号发生器,I/Q调制最高可达44 GHz,典型输出功率为23 dBm,最高可达20 GHz,对于10 GHz信号,10 kHz偏移时的相位噪声为-120 dBc/…...
Git git fetch 和 git pull 区别
git pull和git fetch的作用都是用于从远程仓库获取最新代码,但它们之间有一些区别。 git pull会自动执行两个操作:git fetch和git merge。它从远程仓库获取最新代码,并将其合并到当前分支中。 示例:运行git pull origin master会从…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...
Vue3中的computer和watch
computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...
CSS3相关知识点
CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...
