【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搭建方式)进行搭建,前置环境可前往这篇文章查看。


前情提要

  1. 开放相应的哨兵模式端口26379、26380、26381。默认端口为26379。
  2. 启动时,先启动主节点,再启动从节点,最后启动三个哨兵。

配置文件创建

配置项一览表

配置项描述
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.查看其中一个哨兵的日志信息。
在这里插入图片描述
日志解读:

  1. +sdown master mymaster 49.233.48.98 6379:表示主服务器(mymaster)在IP地址为49.233.48.98,端口为6379的节点上被判定为下线(sdown)。这可能是因为主服务器出现了故障或无法正常工作。
  2. +new-epoch 1:表示一个新的选举轮次(epoch)开始,这是哨兵在选举新的主服务器时使用的计数器。此处的"1"表示当前轮次的编号。
  3. +vote-for-leader 9ddfd87d9127f7f7f2eb7aba24bd422a7782f121 1:表示哨兵节点已经投票给ID为9ddfd87d9127f7f7f2eb7aba24bd422a7782f121的实例来成为新的主服务器。"1"表示该节点的投票数。
  4. +odown master mymaster 49.233.48.98 6379 #quorum 3/2:表示主服务器(mymaster)正在执行故障转移操作,并且需要获得至少3个哨兵节点的投票(quorum)以确保操作的可靠性。"3/2"表示当前获得的投票数。
  5. Next failover delay: I will not start a failover before Mon Aug 28 02:26:03 2023:表示下一次故障转移操作的启动时间将在指定时间之后。在这种情况下,在2023年8月28日02:26:03之前不会执行故障转移操作。
  6. +config-update-from sentinel 9ddfd87d9127f7f7f2eb7aba24bd422a7782f121 10.0.16.11 26381 @ mymaster 49.233.48.98 6379:表示哨兵节点从ID为9ddfd87d9127f7f7f2eb7aba24bd422a7782f121的实例获取到新的配置更新,并且该实例的IP地址为10.0.16.11,端口为26381。
  7. +switch-master mymaster 49.233.48.98 6379 49.233.48.98 6380:表示成功将主服务器切换到IP地址为49.233.48.98,端口从6379切换为6380。
  8. +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。
  9. +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哨兵机制以及其搭建方式到此就结束了。在搭建时,编写的配置文件一定要详细检查、细心编写,还要注意防火墙的关闭或者端口号的开发。感谢大家的阅读,希望大家在评论区对此部分内容散发讨论,便于学到更多的知识。


请添加图片描述

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

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

相关文章

8.7.tensorRT高级(3)封装系列-调试方法、思想讨论

目录 前言1. 模型调试技巧总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#xff0c;顺便记记笔记。 本次课程学习 tensorRT 高级-调试方法、思想讨论 课程大纲可看…

渗透测试漏洞原理之---【XSS 跨站脚本攻击】

文章目录 1、跨站 脚本攻击1.1、漏洞描述1.2、漏洞原理1.3、漏洞危害1.4、漏洞验证1.5、漏洞分类1.5.1、反射性XSS1.5.2、存储型XSS1.5.3、DOM型XSS 2、XSS攻防2.1、XSS构造2.1.1、利用<>2.1.2、JavaScript伪协议2.1.3、时间响应 2.2、XSS变形方式2.2.1、大小写转换2.2.2…

开源与专有软件:比较与对比

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

框架分析(6)-Ruby on Rails

框架分析&#xff08;6&#xff09;-Ruby on Rails 专栏介绍Ruby on Rails核心概念以及组件讲解MVC架构模式约定优于配置强大的ORM支持自动化测试丰富的插件生态系统RESTful路由安全性总结 优缺点优点快速开发简单易学MVC架构强大的ORM支持大量的插件和Gem支持 缺点性能问题学习…

【ubuntu】 DNS 设置工具 resolvectl

什么是 resolvectl “resolvectl” 是一个用于管理系统 DNS 解析配置的命令行工具。它是 systemd-resolved 服务的一部分&#xff0c;该服务是在许多基于 Systemd 的 Linux 发行版中用于管理网络配置和 DNS 解析的系统服务。 通过 resolvectl 命令&#xff0c;可以查看当前系…

SpringAOP详解(上)

当需要在方法前后做一些操作就需要借助动态代理来实现 一、动态代理实现方法 1、jdk自带实现方式 jdk实现代理是被代理类实现接口的方式 public interface UserInterface {void test(); }public class UserService implements UserInterface {public void test() {System.o…

spring boot集成redis

第一步&#xff1a;添加maven依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency> 第二步&#xff1a;配置applicaiton.properties文件 #redis的ip地址…

PHP聚合支付网站源码/对接十多个支付接口 第三方/第四方支付/系统源码

PHP聚合支付网站源码/对接十多个支付接口 第三方/第四方支付/系统源码 内附数十个支付接口代码文件。 下载地址&#xff1a;https://bbs.csdn.net/topics/616764485

vue+file-saver+xlsx+htmlToPdf+jspdf实现本地导出PDF和Excel

页面效果如下&#xff08;echarts图表按需添加&#xff0c;以下代码中没有&#xff09; 1、安装插件 npm install xlsx --save npm install file-saver --save npm install html2canvas --save npm install jspdf --save2、main.js引入html2canvas import htmlToPdf from …

快速学会创建uni-app项目并了解pages.json文件

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 前言 创建 uni-app 项目 通过 HBuilderX 创建 pages.json pages style globalStyle tabBar 前言…

AI时代,程序员需要焦虑吗?

原文来自 微信公众号"互联网技术人进阶之路". 目录 前言一、程序员会被 AI 取代么&#xff1f;二、服务端开发尚难被 AI 取代三、服务端开发何去何从&#xff1f;四、业界首部体系化、全景式解读服务端开发的著作第一部分&#xff1a;服务端开发的技术和方法第二部分…

tomcat更改端口号和隐藏端口号

因为默认端口:8080不会自动隐藏&#xff0c;因此为了更显格调需要将其改为:80 进入tomcat的server文件 将其改为80&#xff0c;之后将tomcat重新启动即可 tomcat启动流程 [rootshang ~]# cd /usr/local/tomcat/apache-tomcat-8.5.92 [rootshang apache-tomcat-8.5.92]# cd b…

C++学习笔记总结练习:new和delete使用及讲解

C中的new、operator new与placement new 参考文献 https://www.cnblogs.com/luxiaoxun/archive/2012/08/10/2631812.htmlhttps://blog.csdn.net/linuxheik/article/details/80449059 new operator/delete operator就是new和delete操作符。而operator new/operator delete是全局…

使用Jetpack Compose构建可折叠Card

使用Jetpack Compose构建可折叠Card 为何在Android应用开发中使用扩展卡片 扩展卡片在Android应用开发中广受欢迎&#xff0c;它们可以让开发者打造干净紧凑的用户界面&#xff0c;同时可以轻松展开&#xff0c;显示额外的内容。 通过巧妙地使用扩展卡片&#xff0c;开发者可…

彩纸屋开源定制少儿编程培训管理系统源码/在线培训系统源码精准化营销

彩纸屋是全国首家提供scratch开源定制和少儿编程培训管理系统源代码的服务商&#xff0c;彩纸屋提供的scratch培训管理系统可开源定制&#xff0c;方便用户二次开发&#xff0c;公司服务客户遍布全国各地&#xff0c;旗下方格侠系统可进行在线演示操作。 少儿编程源码特点&…

情感书单视频做怎么制作?几个步骤轻松生成

在当今数字化的时代&#xff0c;制作情感书单视频已经成为了一种流行的方式来分享个人阅读心得。然而&#xff0c;制作这样的视频并不是一件简单的事情。本文将介绍制作情感书单视频的步骤&#xff0c;并讨论需要注意的事项。 准备工作 在制作情感书单视频之前&#xff0c;最好…

剑指Offer62.圆圈中最后剩下的数字 C++

1、题目描述 0,1,,n-1这n个数字排成一个圆圈&#xff0c;从数字0开始&#xff0c;每次从这个圆圈里删除第m个数字&#xff08;删除后从下一个数字开始计数&#xff09;。求出这个圆圈里剩下的最后一个数字。 例如&#xff0c;0、1、2、3、4这5个数字组成一个圆圈&#xff0c;从…

使用信号处理算法过滤加速度数据并将其转换为速度和位移研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

ARTS挑战第二周-T:PHP数组相关操作

array_combine() 函数 合并两个数组 array_combine()传入2个参数&#xff0c;使用方法如下 array_combine(array $keys, array $values): array 返回一个 array&#xff0c;用来自 keys 数组的值作为键名&#xff0c;来自 values 数组的值作为相应的值。 array_key_exists() 函…

网工笔记整理:IP地址常见配置错误

我们在做实验配置IP地址的时候&#xff0c;经常会碰到各种各样的问题导致配置不成功。下面&#xff0c;整理了一些关于在接口下配置IP地址不成功的可能原因。 故障分析&#xff1a;接口下配置IP地址过程中出现错误&#xff0c;导致IP地址配置不成功。 错误提示信息及对应的故…