【深入学习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

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

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

相关文章

【环境踩坑系列】centos7安装python3.10.X

前言 虽然centOS8已经发布了相当一段时间了&#xff0c;但是基于稳定性、成熟的社区等原因&#xff0c;大家在选择centOS作为服务器操作系统的时候仍然会选择centOS7作为首选。但是centOS7自带的是python2.7.5&#xff0c;当前大量的python程序要用到的又是python3&#xff0c…

基于SSM的“银发在线教育云平台”的设计与实现(源码+数据库+文档)

基于SSM的“银发在线教育云平台”的设计与实现&#xff08;源码数据库文档) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SSM 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 首页页面图 健身养生详情页面 在线课堂界面 …

RocketMQ实战与集群架构详解

目录 一、MQ简介 MQ的作用主要有以下三个方面 二、RocketMQ产品特点 1、RocketMQ介绍 2、RocketMQ特点 三、RocketMQ实战 1、快速搭建RocketMQ服务 2、快速实现消息收发 1. 命令行快速实现消息收发 2. 搭建Maven客户端项目 3、搭建RocketMQ可视化管理服务 4、升级分…

ubuntu安装libtorch

Ubuntu20.04安装libtorch 〇、前期准备1、查看NVIDIA显卡算力和CUDA版本支持的算力2、查看CUDA与显卡驱动的版本对应 一、NVIDIA显卡驱动安装1、下载显卡驱动2、安装驱动A. 安装依赖B. 禁用nouveau驱动C. 显卡驱动安装 3、参考 二、CUDA安装1、下载安装CUDA2、测试CUDA是否安装…

大语言模型-教育方向数据集

大语言模型-教育方向数据集 编号论文数据集1Bitew S K, Hadifar A, Sterckx L, et al. Learning to Reuse Distractors to Support Multiple-Choice Question Generation in Education[J]. IEEE Transactions on Learning Technologies, 2022, 17: 375-390.Televic, NL, https…

双向链表的基本结构及功能实现

1.基本结构: 双向链表是一种链表数据结构&#xff0c;它由一系列节点组成&#xff0c;每个节点包含三个部分&#xff1a; (1).数据域&#xff1a;存储节点的数据 (2).前驱指针:指向前一个节点 (3).后驱指针:指向下一个节点 2.基本特性&#xff1a; 双向链接: 与单向链表…

连锁多门店收银系统源码

近年来&#xff0c;越来越多的零售行业从业者意识到&#xff0c;线下线上全渠道整合将成为国内消费市场的大趋势&#xff0c;其中&#xff0c;线下门店能够赋予品牌发展的价值依然不可小觑。 1. 线下连锁门店发展方向&#xff0c;多种经营模式 新零售时代&#xff0c;基于品牌…

excel导出图片---HSSFWorkbook--SXSSFWorkbook

1 概述 平时在工作中&#xff0c;excel导出图片经常会用到&#xff0c;但奈何HSSFWorkbook导出数据数量有限制问题&#xff0c;所以企业里大多都用SXSSFWorkbook格式&#xff0c;很少用HSSFWorkbook。所以今天以这两种格式分别记录下&#xff0c;图片的导出过程。 2 HSSFWork…

Reddit账号太多?一文教你轻松管理

想要在Reddit上扩大品牌影响力&#xff0c;但不知道如何管理多个账号&#xff1f;面对复杂的社区规则&#xff0c;你是否在担心账号安全&#xff1f;渴望提升参与度&#xff0c;却对内容策略一筹莫展&#xff1f;本文将为你揭秘如何高效管理你的Reddit账号&#xff0c;让你在这…

PR快速片段分割教程

方法一&#xff1a; 方法二yyds&#xff1a; ctrla全选&#xff0c;拽过来ME导出即可。

周文强:我感受到了海口经济学院创新创业的热情

日前&#xff0c;由中国志愿服务基金会、中国志愿服务基金会汇成百年专项基金以及共青团海口市委员会主办&#xff0c;共青团海口经济学院委员会承办的“2024 首届青领杯大学生创新创业大赛”海口站线下培训在海口经济学院开展。汇成百年专项基金发起人周文强作为本次大赛的创业…

ReadWriteLock读写锁

读写锁基本概念 ReadWriteLock是Java并发包中的一个接口&#xff0c;它定义了两种锁&#xff1a;读锁&#xff08;Read Lock&#xff09;和写锁&#xff08;Write Lock&#xff09;&#xff0c;真正的实现类是ReentrantReadWriteLock。读锁允许多个线程同时读取共享资源&#…

基于单片机的家用安防报警系统设计

本设计基于STM32F103单片机作为主控&#xff0c;通过DS18B20温度传感器和MQ烟雾传感器对家庭环境的温度和烟雾浓度进行检测实现火灾预警的设计要求&#xff0c;当检测数据异常时激发报警提示。系统采用红外传感器对家庭环境中是否有盗贼进入实现检测&#xff0c;当出现异常情况…

机器学习的应用领域

机器学习在许多领域有广泛的应用&#xff0c;下面列出了一些主要的应用领域及其典型应用&#xff1a; 1. 图像识别 人脸识别&#xff1a;用于解锁手机、自动标记照片、监控安全系统。物体识别&#xff1a;应用于自动驾驶汽车、机器人、医疗影像分析中&#xff0c;帮助机器理解…

面试经典 150 题:力扣88. 合并两个有序数组

每周一道算法题启动 题目 【题目链接】 【解法一】合并后排序 排序后的数组自动省略0的数字&#xff0c;又学到了 class Solution { public:void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {//合并两个数组后排序for(int i0; i<…

计算机网络详解:发展史、TCP/IP协议、网络通信与应用开发全流程

文章目录 1. 计算机网络的发展史1.1 初期阶段&#xff1a;网络的萌芽&#xff08;1960年代&#xff09;1.2 第二阶段&#xff1a;TCP/IP协议的引入&#xff08;1970-1980年代&#xff09;1.3 第三阶段&#xff1a;互联网的普及与商业化&#xff08;1990年代&#xff09;1.4 现代…

线性跟踪微分器TD详细测试(Simulink 算法框图+CODESYS ST+博途SCL完整源代码)

1、ADRC线性跟踪微分器 ADRC线性跟踪微分器(ST+SCL语言)_adrc算法在博途编程中scl语言-CSDN博客文章浏览阅读784次。本文介绍了ADRC线性跟踪微分器的算法和源代码,包括在SMART PLC和H5U平台上的实现。文章提供了ST和SCL语言的详细代码,并讨论了跟踪微分器在自动控制中的作用…

基于python+django+vue的电影数据分析及可视化系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

【一句话点破】【C++重要题目】基类与派生类的成员变量值被对象调用的结果(二)

【一句话点破】基类/派生类的成员变量由哪个对象初始化的&#xff0c;哪个对象调用该成员变量时就用由它初始化的值 [尤其找准是基类对象or派生类对象的值] 【重要例题】15浙工大卷二读程序5题 可运行代码如下 #include "bits/stdc.h" #include<iostream> u…

DataGemma:谷歌大模型

诸神缄默不语-个人CSDN博文目录 DataGemma是谷歌出的大模型&#xff0c;是gemma 2的升级版&#xff0c;主要亮点是基于检索解决幻觉问题。 在huggingface和kaggle上均可下载模型权重。 检索数据源是Google’s Data Commons知识图谱。 官方博客&#xff1a;https://blog.googl…