Redis哨兵模式详解

news2024/11/23 11:52:16

文章目录

  • 一、概念
  • 二、原理
  • 三、多哨兵模式的工作过程
  • 四、客户端的工作过程
  • 五、应用
    • 1、配置sentinel哨兵(单个)
    • 2、启动哨兵
    • 3、模拟主服务器意外宕机情况

一、概念

在 Redis 主从复制模式中,因为系统不具备自动恢复的功能,所以当主服务器(master)宕机后,需要手动把一台从服务器(slave)切换为主服务器。在这个过程中,不仅需要人为干预,而且还会造成一段时间内服务器不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式。Redis从2.8开始正式提供了Sentinel (哨兵)架构来解决这个问题。

Sentinel 通过监控的方式查看主机是否故障,当主机发生故障时, Sentinel 会自动进行 Failover(即故障转移),并且根据投票数自动将从库转换为主库。

二、原理

哨兵模式是一种特殊的模式,Redis 为其提供了专属的哨兵命令,它是一个独立的进程,能够独立运行。其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例

基本结构图如下所示:

在这里插入图片描述

在上图中,哨兵主要有两个重要作用:

  • 哨兵节点会以每秒一次的频率对每个Redis节点发送 ping 命令,并通过Redis节点的回复来判断其运行状态。
  • 当哨兵监测到主服务器发生故障时,会自动在从节点中选择一台从服务器,并将其提升为主服务器,然后使用PubSub发布订阅模式,通知其他的从节点,修改配置文件,跟随新的主服务器。

但是,在实际生产情况中,Redis 哨兵模式是集群高可用的保障,为避免意外,它一般是由3-5个节点组成,这样就算挂了个别节点,该集群仍然可以正常运转。其结构图如下所示:

在这里插入图片描述

上图所示,多个哨兵之间也存在互相监控,这就形成了多哨兵模式。

三、多哨兵模式的工作过程

主观下线、客观下线、投票选举

主观下线:比如 Sentinel1 向主服务发送了PING命令,在规定时间内没收到主服务器PONG回复,则 Sentinel1 判定主服务器为“主观下线”。

客观下线:Sentinel1 发现主服务器出现了故障,它会通过相应的命令,询问其它 Sentinel 节点对主服务器的状态判断。如果数量达到一定值时, Sentinel 节点认为主服务器 down 掉,则 Sentinel1 节点判定主服务为“客观下线”。

投票选举:所有 Sentinel 节点会通过投票机制,按照谁发现谁去处理的原则,选举 Sentinel1 为领头节点去做 Failover(故障转移)操作。Sentinel1 节点则按照一定的规则在所有从节点中选择一个最优的作为主服务器,然后通过发布订阅模式通知其余的从节点(slave)更改配置文件,跟随新上任的主服务器(master)。至此就完成了主从切换的操作。

四、客户端的工作过程

哨兵负责监控主从节点的“健康”状态。当主节点挂掉时,自动选择一个最优的从节点切换为主节点。

客户端来连接Redis集群时,会首先连接哨兵,通过哨兵来查询主节点的地址,然后再去连接主节点进行数据交互。当主节点发生故障时,客户端会重新向哨兵要地址,哨兵会将最新的主节点地址告诉客户端。因此应用程序无需重启即可自动完成主从节点的切换。

五、应用

目前状态:一主二从!

1、配置sentinel哨兵(单个)

首先新建 sentinel.conf 文件,并对其进行配置,如下所示:

port 26379
Sentinel monitor myredis 127.0.0.1 6379 1

在这里插入图片描述

如果有多个哨兵,就配置多个sentinel.conf 文件(port,monitor)。

哨兵的配置文件

在这里插入图片描述

# Example sentinel.conf
 
 
# 哨兵sentinel 实例运行的端口 默认26379
port 26379
 
# 哨兵 sentinel 的工作目录(默认)
dir /tmp
 
# 哨兵sentinel监控的redis主节点 host port
# master-name :可以自己命名的主节点的名字,只能由字母,数字,“._-”组成 
# quorum : 配置多少个sentinel哨兵统一认为master 主节点失联,那么这个时候就客观的认为失联了
# sentinel monitor master-name host port quorum
sentinel monitor myredis 127.0.0.1 6379 2
 
 
# 在Redis实例中开启了密码,这时,所有连接Redis的客户端都需要密码
# 设置了哨兵sentinel 连接上主从的密码,注意必须设置一样的验证码
# sentinel auth-pass master-name password
sentinel auth-pass myredis 123456
 
 
# 指定多少毫秒后 主节点没有回答哨兵sentinel 此时 哨兵主观上认为主节点离线  默认30秒
# sentinel down-after-milliseconds <master-name> <milliseconds>
sentinel down-after-milliseconds myredis 30000
 
# 这个配置指定了在发生failover 主备切换时最多可以由多少个slave同时对新的master进行同步
    - 这个数字越小,完成failover 所需的时间越长
    - 这个数字越大,就意味着越多的slave 因为repkication 而不可用
    - 可以通过将这个值设为 1 来保证每次只有一个slave 处于不能处理命令请求的状态
#    sentinel parallel-syncs <master-name> <numreplicas>
sentinel parallel-syncs myredis 1
 
# 故障转移的时间 failover-timeout 可以用一下这些方面
   同一个sentinel 对同一个master 两次failover  之间的间隔时间
   当想要取消一个正在进行的fai1over所需要的时间,直到slave 被纠正为向正确的master那里同步数据时
    当进行fai1over时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时,s1aves依然会被正确配置为指向 master,但是就不按para11e1-syncs所配置的规则来了
# sentinel failover-timeout <master-name> <milliseconds> 默认三分钟
sentinel failover-timeout myredis 180000
 
# 8、配置当某一个事件发生时需要执行的脚本,可以通过脚本来通知管理员,例如当系统运行不正常时,发送
    邮件通知相关人员
    - 对于脚本的运行结果有以下规则:
        1.若脚本执行后返回1,那么该脚本稍后会重新执行,重复次数默认为10
        2.若脚本执行后返回2,或者是比2更高的返回值,脚本将不会执行
        3.若脚本在执行过程中由于收到系统中断信号被终止了,则同返回值1的时候的相同
        4.一个脚本执行的最大时间为60s,如果超过这个时间,脚本将会被一个SIGKILL信号终止,重新执行
    - 通知型脚本:当sentine1有任何警告级别的事件发生时(比如说re dis实例的主观失效和客观失效等等),将会去调用这个脚本,这时这个脚本应该通过邮件,SMS等方式去通知系统管理员关于系统不正常运行行的信息。调用该脚本时,将传给脚本两个参数,一个是事件的类型,一个是事件的描述。如果sentine1.conf配置文件中配置了这个脚本路路径,那么必须保证这个脚本存在于这个路径,并且是可执行的,否则 sentine1无法正常启动成功。
#     sentinel notification-script <master-name> <script-path>
sentinel notification-script myredis /var/redis/notify.sh
 
# 客户端重新配置主节点参数脚本
    - 当一个master 发生改变时,这个脚本就会被调用,通知相关的客户端关于 master 地址已经发生改变
    - 一下参数将会在调用脚本的时候传给脚本
        1. <master-name> <role> <state> <from-ip><from-port><to-ip><to-port>
        2. 目前<state>总是"failover”
        3. <ro1e>是"leader"或者"observer”中的一个。
        4. 参数from-ip,from-port,to-ip,to-port是用来和旧的master和新的master(即旧的s1ave)通信的
        5. 这个脚本应该是通用的,能被多次调用,不是针对性的
#    sentinel client-reconfig-script <master-name> <script-path>
sentinel client-reconfig-script myredis /var/redis/reconfig.sh

2、启动哨兵

[root@VM-0-4-centos bin]# redis-sentinel zmconfig/sentinel.conf

在这里插入图片描述

3、模拟主服务器意外宕机情况

首先直接将主服务器的 Redis 服务终止:
在这里插入图片描述

然后查看从服务器是否被提升为了主服务器(等待哨兵是否有响应,有响应再查看):

在这里插入图片描述
在这里插入图片描述
这时候80就变为了主服务器!

哨兵日志

在这里插入图片描述
如果原先的主机重新连接,那么他会变为从机:
在这里插入图片描述

遇到的问题

在主机宕机后,在从机操作,出现如下问题:
在这里插入图片描述
解决办法:
将redis服务器配置文件中的 protected-mode 设置为no

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

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

相关文章

传奇战盟GOM引擎登录器配置教程

战盟GOM引擎配置器教程&#xff0c;先到战盟官方网站下载登录器配置器&#xff0c;下载好后按下面说明使用。战盟GOM登录器教程大分类目录引导说明 一、解压配置器文件包后&#xff0c;打开KEY文件夹然后选择KEY 二、复制你选择好的 Key.Lic 复制到 战盟GOM配置器 相同路径文件…

外汇天眼:乐天证券扩大了交易工具!进入数字资产市场!

根据一份商业声明&#xff0c;这些从今天开始可以访问的新成员包括在纽约证券交易所、纳斯达克和上海证券交易所上市的公司。 随着客户对接触受监管市场的需求不断增长&#xff0c;该经纪商将其产品范围扩大到涵盖货币、商品、股票和指数。新股票的加入不仅有助于提高其客户的交…

网络面试-0x11 TCP为什么需要三次握手和四次挥手?

网络面试-0x11 TCP为什么需要三次握手和四次挥手&#xff1f; 一、三次握手 三次握手[three-way-handshake]&#xff1a;客户端和服务器总共发送3个包&#xff0c;以建立TCP连接。 什么是连接了&#xff1f;主要作用是什么&#xff1f; 连接&#xff1a; 主要作用&#xff1a;为…

基于Redis实现特殊的消息队列

特殊场景的消息队列 消息队列使用比较多的产品kafka&#xff0c;在各个领域都发挥了很大的作用&#xff0c;但是在以下的几种场景是无法满足需求。 场景 消息重复概率比较高时&#xff0c;需要对重复消息进行合并处理避免浪费有限的资源&#xff0c;减少延迟需要根据业务自定…

正大国际期货:投资外盘期货如何用布林线判断走势?

外盘期货的投资者越来越多&#xff0c;每个投资者判断大盘走势的方式也不尽相同&#xff0c;那么今天正大IxxxuanI就来简单的和大家说说外盘期货投资如何用布林线判断走势吧。 1、当布林线多条轨道向上或是向下运行时&#xff0c;这能非常有效的说明走势强劲程度。投资者应牢牢…

接触非线性分析不收敛? 写给ABAQUS初学者的N个经验

接触&#xff0c;在仿真分析中&#xff0c;绝对是个看似青铜实则王者级别的难题。一些通用的解决办法&#xff0c;在帮助文件的Interaction → Contact Difficulties and Diagnostics中找到&#xff0c;例如初始接触状况、穿透、突然分离造成的局部不稳定等等。 但是确实没有一…

slam定位学习笔记(七)-g2o学习

主要学习的是这篇文章&#xff0c;但大佬并没有在文章里面仔细的讲g2o&#xff0c;所以我在网上找了这几篇介绍g2o的文章&#xff0c;讲的十分详细&#xff0c;对入门十分友好&#xff1a;文章一、文章二、文章三&#xff0c;这三篇都是一个作者写的&#xff0c;主要是针对编程…

第五届“强网”拟态防御国际精英挑战赛——特邀战队篇

第五届“强网”拟态防御国际精英挑战赛即将在南京隆重开赛&#xff01;本届大赛面向全球顶尖CTF战队&#xff0c;在创新应用场景与技术的基础上&#xff0c;拓展升级赛道&#xff0c;全面覆盖典型网络设备。大赛汇集国内外60支精英战队&#xff0c;参赛阵容、数量再创新高。 本…

35岁了,月薪还不足2W,辞职又怕找不到工作,该何去何从?

今天看到网上有人在吐槽&#xff1a;“马上就35岁了&#xff0c;月薪还不到2W&#xff0c;公司发展缓慢&#xff0c;想离职又怕找不到工作&#xff0c;不知道怎么办&#xff1f;” 单看月薪两万&#xff0c;好像也不少&#xff0c;不过收入跟行业和地域也有很大关系。薪资&…

JWT详解

1、什么是token&#xff0c;解决了什么问题&#xff1f; token 就是常说的 “令牌”&#xff0c;本质上是全局唯一的字符串&#xff0c;用来唯一识别一个客户端&#xff0c;解决了session依赖单个web服务器的问题。单体应用时&#xff0c;用户的会话信息保存在session中&#…

如何在视频中加水印?分享这些实用的加水印方法给你

视频要怎么添加水印呢&#xff1f;在我们的日常生活中&#xff0c;短视频已经离不开我们的视野了&#xff0c;我们经常通过短视频来放松、查找资料或者是丰富知识。同样的&#xff0c;我们也可以通过自己的剪辑并发布一些视频到各个平台上获取流量。那么在这个过程中&#xff0…

web前端-javascript-基本数据类型和引用数据类型(对象和基本数据类型保存到栈内存,对象保存在堆内存,比较两个基本数据类型或引用数据类型)

基本数据类型和引用数据类型 var a 123; var b a; a;/* console.log("a "a); console.log("b "b); */var obj new Object(); obj.new "孙悟空";var obj2 obj;//修改obj的name属性 obj.name "猪八戒";/* console.log(obj.name…

京东低代码平台:浅谈水滴拖拽画布的设计与实现

水滴低代码平台简介 京东水滴平台面向企业内部后台管理系统场景&#xff0c;提供可视化搭建等低代码配置、构建及部署能力。 水滴画布作为水滴低代码的核心能力之一&#xff0c;具备灵活、易用的特点&#xff0c;用户可以通过简单拖拉拽的方式&#xff0c;在不需要具备前端知…

【应用回归分析】CH4 假设检验与预测1——一般线性假设

目录 前言 引例 1.【例1】 2.【例2】 一、假设检验的基本思想 二、定理【4.1.1】 1.定理内容 2.定理证明 前言 在上一章&#xff0c;我们讨论了回归参数的几种估计方法&#xff0c;依据这些方法得到回归系数的估计&#xff0c;就可以建立经验回归方程。但是&#xff0c;…

python+django汽车租赁系统pycharm项目

目录 1 绪论 1 1.1课题背景 1 1.2课题研究现状 1 1.3初步设计方法与实施方案 2 1.4本文研究内容 2 4 2.3 B/S结构简介 4 2.4MySQL数据库 5 3 系统分析 6 3.1系统可行性分析 6 3.1.1经济可行性 6 3.1.2技术可行性 6 3.1.3运行可行性 6 3.2系统现状分析 6 3.3功能需求分析 7 …

Transformer for CV

文章目录Transformer 的基础结构NLP StructureVITSWINDERTTransformer 常用terms分块的batch-size自动计算Batch normLayer normMultihead Self AttentionGELU/ELU/RELUTransformer Vs CNN每个模型的详细笔记Vit图片分割自己的思考计算过程Segmenter运行 TrainTrain 里的结构DE…

命名空间提示“http://schemas.microsoft.com/xaml/behaviors”不存在Interation的解决办法

以下面的部分wpf程序为例&#xff1a; <Button Grid.Column"3" Margin"5" Content"<" FontSize"18" Background"Transparent" Foreground"LightGray"><b:Interaction.Triggers><b:EventTrigge…

static应用知识:单例设计模式

1、什么是设计模式&#xff08;Design pattern&#xff09; 开发中经常遇到一些问题&#xff0c;一个问题通常有n种解法的&#xff0c;但其中肯定有一种解法是最优的&#xff0c;这个最优的解法被人总结出来了&#xff0c;称之为设计模式。 设计模式有20多种&#xff0c;对应2…

轻松上手 | 使用国内资源安装 K3s 全攻略

作者&#xff1a; 王海龙&#xff0c;SUSE Rancher 中国社区技术经理&#xff0c;Linux Foundation APAC Evangelist&#xff0c;负责 Rancher 中国技术社区的维护和运营。拥有 8 年的云计算领域经验&#xff0c;经历了 OpenStack 到 Kubernetes 的技术变革&#xff0c;无论底层…

3D帧间匹配-----剔除动态障碍物

0. 简介 作为SLAMer在建图时最怕的就是大量的动态障碍物存在&#xff0c;这会导致建图的不精确&#xff0c;而本文主要围绕着如何剔除动态障碍物开始讲起&#xff0c;并提供一种快速的过滤障碍物的方法。 1. 主要方法 在调研的过程中主要存在有两种方法&#xff0c;第一种如…