【深入学习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.xdnf.cn/news/1542216.html

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

相关文章

vue3扩展echart封装为组件库-快速复用

ECharts ECharts&#xff0c;全称Enterprise Charts&#xff0c;是一款由百度团队开发并开源&#xff0c;后捐赠给Apache基金会的纯JavaScript图表库。它提供了直观、生动、可交互、可个性化定制的数据可视化图表&#xff0c;广泛应用于数据分析、商业智能、网页开发等领域。以…

在已安装的openresty上添加安装upstream模块报错的解决以及使用Consul服务发现时定时变更nginx的upstream的shell脚本

一、在已经安装好的openresty环境上添加安装upstream模块报错&#xff1a; 在已经安装好的openresty环境上添加安装upstream模块报错&#xff1a;http upstream check module can not find any check server, make sure you ve added the check 的问题解决。 服务器上已经安装好…

JavaWeb+Web服务器简介

一、Java Web 1.1 简介 Web&#xff0c;在英语中web即表示网页的意思&#xff0c;它用于表示Internet主机上供外界访问的资源。 Java Web指的是使用Java技术开发的Web应用程序。Java在Web开发中有着广泛的应用&#xff0c;主要得益于其跨平台性、安全性和丰富的开发工具与框…

鼻咽癌中三级淋巴结构的单细胞与空间转录组分析|文献精析·24-09-22

小罗碎碎念 研究团队通过单细胞和空间转录组分析&#xff0c;揭示了与鼻咽癌进展和免疫治疗反应相关的三级淋巴结构。 作者角色作者姓名单位&#xff08;中文&#xff09;第一作者Yang Liu/通讯作者Jin-Xin Bei国家癌症中心南方肿瘤学重点实验室&#xff0c;鼻咽癌诊断治疗广东…

TryHackMe 第3天 | Pre Security (二)

该学习路径讲解了网络安全入门的必备技术知识&#xff0c;比如计算机网络、网络协议、Linux命令、Windows设置等内容。上一篇中简短介绍了计算机网络相关的知识&#xff0c;本篇博客将记录 网络协议 部分。 How the web works? DNS in detail DNS (Domain name system&…

『功能项目』QFrameWork更新道具图片UGUI【71】

我们打开上一篇70QFrameWork物品交换UGUI的项目&#xff0c; 在资源商店免费下载图片 创建Image重命名为Icon并且隐藏Name 给Icon一张随意道具图片Icon 重新绑定对象 接下来创建IItem.cs接口 与 ItemConfig.cs道具配置类 创建Config文件夹 创建脚本&#xff1a;ItemConfig.cs 编…

【416】【举报垃圾信息】

这题倒挺简单的 注意一下映射关系&#xff0c;再使用字典即可。 class Solution:def reportSpam(self, message: List[str], bannedWords: List[str]) -> bool:nlen(message)if n1:return Falsedictdefaultdict(int)num0for a in message:dict[a]1for b in bannedWords:if…

构建高效心理辅导平台:Spring Boot实践

1绪 论 1.1研究背景 随着计算机和网络技术的不断发展&#xff0c;计算机网络已经逐渐深入人们的生活&#xff0c;网络已经能够覆盖我们生活的每一个角落&#xff0c;给用户的网上交流和学习提供了巨大的方便。 当今社会处在一个高速发展的信息时代&#xff0c;计算机网络的发展…

安装黑群晖,并使用NAS公网助手实现DDNS动态域名解析

很多人都会安装安装一个黑群晖进行练手&#xff0c;黑群晖有很多玩法和NAS套件&#xff0c;而且黑群晖安装比较简单&#xff0c;没有复杂的步骤&#xff0c;这也是很多人玩黑裙的理由&#xff0c;这里教大家如何安装黑群晖&#xff0c;并且安装神卓互联NAS公网助手实现DDNS动态…

【STM32】 TCP/IP通信协议(1)

一、前言 TCP/IP是干啥的&#xff1f;它跟SPI、IIC、CAN有什么区别&#xff1f;它如何实现stm32的通讯&#xff1f;如何去配置&#xff1f;为了搞懂这些问题&#xff0c;查询资料可解决如下疑问&#xff1a; 1.为什么要用以太网通信? 以太网(Ethernet) 是指遵守 IEEE 802.3 …

VisionPro - 基础 - 模板匹配技术和在VP中的使用 - PMAlign - PatMax (5)- 非线性模板变形匹配

前言&#xff1a; 本机继续对VP的PatMax 算子进行说明&#xff1a;本节讲非线性变形的模板匹配。 Non-Linear Pattern Deformation By default, PatMax requires that each boundary point in the instance of a pattern found in a run-time image closely correspond to a b…

Java 使用递归方法遍历B站下载文件并解析重命名

目录 背景 操作方法 声明 背景 出于学习和日常使用方便的目的&#xff0c;且考虑到有的资源过一段时间会失效&#xff0c;所以有时会下载B站的音频&#xff0c;视频&#xff0c;进行存放保留&#xff0c;下面介绍下载和下载之后解析文件的方法&#xff0c;仅供学习…

C++20中头文件compare的使用

<compare>是C20中新增加的头文件&#xff0c;此头文件是language support库的一部分。它包括&#xff1a;concepts、classes、customization point objects、functions。 1.concepts&#xff1a;三向比较运算符<>&#xff0c;目的是简化比对对象的过程&#xff0c;…

【编程实践】利用高德地图开放平台制作简易地图规定半径范围

需求分析 [little demo] 使用高德地图API创建一个显示特定半径范围的简易地图。 注册高德开放平台账号&#xff0c;获取API Key。&#xff08;精度要求不高可不需要&#xff09; 创建HTML页面&#xff0c;引入高德地图API。 设置地图中心点和初始缩放级别。 编写代码绘制指定半…

本地电脑基于nginx的https单向认证和双向认证(自制证书+nginx配置)保姆级

目录 1、背景 2、运行环境 3、工具下载 3.1、OpenSSL下载 3.2、nginx下载 4、制作https证书&#xff1a; 4.1、CA与自签名&#xff1a; 4.2、制作CA根证书&#xff08;公钥&#xff09; 4.3、制作服务端证书&#xff1a; 4.4、制作客户端证书&#xff1a; 4.5、制作…

初识ZYNQ——FPGA学习笔记15

一、ZYNQ简介 ZYNQ&#xff1a;Zynq-7000 All Programmable SoC&#xff08;APSoC&#xff09;&#xff0c;赛灵思公司&#xff08;AMD Xilinx&#xff09;推出的新一代全可编程片上系统 PS&#xff1a;Processing System&#xff0c;处理系统 PL&#xff1a;Program Logic&…

828华为云征文 | 构建高效搜索解决方案,Elasticsearch Kibana的完美结合

前言 构建高效搜索解决方案&#xff0c;FlexusX服务器与Elasticsearch & Kibana的完美结合&#xff0c;为企业带来云端搜索新体验。FlexusX实例以其卓越性能与灵活扩展性&#xff0c;确保高并发搜索的流畅运行。部署Elasticsearch&#xff0c;享受分布式搜索的精准与快速&a…

MySQL:SQL语句执行过程

本篇文章会分析下一个 SQL 语句在 MySQL 中的执行流程&#xff0c;包括 SQL 的查询在 MySQL 内部会怎么流转&#xff0c;SQL 语句的更新是怎么完成的。 在分析之前我会先带着你看看 MySQL 的基础架构&#xff0c;知道了 MySQL 由那些组件组成以及这些组件的作用是什么&#xf…

9.22今日错题解析(软考)

前言 这是用来记录我每天备考软考设计师的错题的&#xff0c;大部分错题摘自希赛中的题目&#xff0c;但相关解析是原创&#xff0c;有自己的思考&#xff0c;为了复习&#xff1a;&#xff09;&#xff0c;最后希望各位报考软考的小伙伴都能上岸&#xff01;&#xff01;&…

掌上高考爬虫逆向分析

目标网站 aHR0cHM6Ly93d3cuZ2Fva2FvLmNuL3NjaG9vbC9zZWFyY2g/cmVjb21zY2hwcm9wPSVFNSU4QyVCQiVFOCU4RCVBRg 一、抓包分析 二、逆向分析 搜索定位加密参数 本地生成代码 var CryptoJS require(crypto-js) var crypto require(crypto);f "D23ABC#56"function v(t…