Redis 09章——哨兵(sentinel)

一、是什么

  1. 吹哨人巡查监控后台master主机是否故障,如果故障了根据$\textcolor{red}{投票数}$自动将某一个从库转换为新主库,继续对外服务
  2. 作用:俗称无人值守运维
  3. 官网理论:High availability with Redis Sentinel | Docs

二、能干嘛

  1. 主从监控:监控主从redis库运行是否正常
  2. 消息通知:哨兵可以将故障转移的结果发送给客户端
  3. 故障转移:如果master异常,则会进行主从切换,将其中一个slave作为新master
  4. 配置中心:客户端通过连接哨兵来获得当前Redis服务的主节点地址

三、怎么玩(案例演示实战步骤)

(1)Redis Sentinel架构,前提说明

  1. 3个哨兵:自动监控和维护集群,不存放数据,只是吹哨人
  2. 1主2从:用于数据读取和存放

(2)案例步骤

3.3.1/myredis目录下新建或者拷贝sentinel.conf文件,名字绝对不能错

3.3.2先看看/opt/redis-7.0.0目录下默认的sentinel.conf文件的内容

3.3.3重要参数项说明

  1. bind:服务监听地址,用于客户端连接,默认本机地址
  2. daemonize:是否以后台daemon方式运行
  3. protected-model:安全保护模式
  4. port:端口
  5. logfile:日志文件路径
  6. pidfile:pid文件路径
  7. dir:工作目录
  8. 重点
  9. 其它

3.3.4本次案例哨兵sentinel文件通用配置

  1. 由于机器硬件的关系,我们的3个哨兵都同时配置到192.168.200.130同一台机器
  2. sentinel26379.conf
    bind 0.0.0.0
    daemonize yes
    protected-mode no
    port 26379
    logfile "sentinel26379.log"
    pidfile /var/run/redis-sentinel26379.pid
    dir ./
    sentinel monitor mymaster 192.168.200.130 6379 2  #这个2代表只要两个哨兵同意
    sentinel auth-pass mymaster 111111
  3. sentinel26380.conf
    bind 0.0.0.0
    daemonize yes
    protected-mode no
    port 26380
    logfile "sentinel26380.log"
    pidfile /var/run/redis-sentinel26380.pid
    dir ./
    sentinel monitor mymaster 192.168.200.130 6379 2
    sentinel auth-pass mymaster 111111
  4. sentinel26381.conf
    bind 0.0.0.0
    daemonize yes
    protected-mode no
    port 26381
    logfile "sentinel26381.log"
    pidfile /var/run/redis-sentinel26381.pid
    dir ./
    sentinel monitor mymaster 192.168.200.130 6379 2
    sentinel auth-pass mymaster 111111
  5. 注意:上述的logfile和dir都要根据自己的实际情况决定,因为我们的配置文件现在就在/opt/redis-7.0.0/myredis里,所以我这么填写
  6. master主机配置文件的说明

3.3.5先启动一主二从3个redis实例,测试正常的主从复制

  1. 注意:现在也要给主机设置masterauth了(具体的ip根据自己实际情况确定)
  2. 请看一眼redis6379.conf、redis6380.conf、redis6381.conf我们自己填写的主从复制相关内容
  3. 3台不同的虚拟机实例,启动三台真实机器实例并连接

3.3.6再启动三个哨兵,完成监控

  1. redis-server sentinel26379.conf --sentinel
  2. redis-server sentinel26380.conf --sentinel
  3. redis-server sentinel26381.conf --sentinel

3.3.7启动三个哨兵监控后再测试一次主从复制

3.3.8原有的master挂了

(1)我们自己手动关闭6379服务器,模拟master挂了
(2)问题思考
  1. 两台从机数据是否OK(要等一会儿,因为内部会重新选举)
  2. 是否会从剩下的两台机器上选出新的master?可以看到此时第一台从机被选举成了新的master,第二台从机成为了它的slave(可以看第一台机器的日志文件)
  3. 之前宕机的master重启回来,谁将会是新老大?会不会双master冲突。答:老大还是主机宕机后,新选出来的那个master。主机就算重启,它也不会变回master了,它只会成为新的master的slave
(3)揭晓答案
  1. 数据OK
    1. 两个小问题                                                                                                                        
    2. 了解Broken Pipe
  2. 投票新选
    1. sentinel26379.log,从该日志中可以看到这个哨兵的id
    2. sentinel26380.log,从该日志中可以看到这个哨兵的id
    3. sentinel26381.log,从该日志中可以看到这个哨兵的id
  3. 谁是master,仅限本次案例
    1. 6380被选为新master,上位成功
    2. 以前的6379被降级变成了slave
    3. 6381还是slave,只不过换了个新老大6380(6379变6380)

3.3.9对比配置文件

  1. 老master,vim redis6379.conf
  2. 新master,vim redis6380.conf
  3. 结论:(1)文件的内容,在运行期间会被sentinel动态进行更改(2)Mater-Slave切换后,master的conf,slave的conf,sentinel的conf内容都会发生改变,及master的conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换

(3)其它备注

  1. 生产上都是不同机房不同服务器,很少出现3个哨兵全部挂掉的情况
  2. 可以同时金童监控master,一行一个

四、哨兵运行流程和选举原理

(1)介绍

当一个主从配置中master失效后,sentinel可以选举出一个新的master用于自动接替原master的工作,主从配置中的其他redis服务器自动指向新的master同步数据,一般建议sentinel采取奇数台,防止某一台sentinel无法连接到master导致误切换

(2)运行流程,故障切换

4.2.1三个哨兵监控一主二从,正常运行中......

4.2.2SDown主观下线(Subjectively Down)

  1. SDOWN(主观不可用)是单个sentinel自己主观上检测到的关于master的状态,从sentinel的角度来看,如果发送了PING心跳后,在一定时间内没有收到合法的回复,就达到了SDOWN的条件
  2. sentinel配置文件中的down-after-milliseconds设置了判断主观下线的时间长度
  3. 说明:

4.2.3ODown客观下线(Objectively Down)

  1. ODOWN需要一定数量的sentinel,多个哨兵达成一致意见才能认为一个master客观上已经宕机
  2. 说明:

4.2.4选举出领导者哨兵(哨兵中选出兵王)

  1. 当主节点被判断客观下线后,各个哨兵节点会进行协商,先选举出一个领导者哨兵节点(兵王)并由该领导者也即被选举出的兵王进行failover(故障转移)
  2. 三哨兵日志文件2次解读分析(举例,这个不是从我自己的三个哨兵的log文件里截取的)
    1. sentinel26379.log
    2. sentinel26380.log
    3. sentinel26381.log
  3. 哨兵领导者,兵王如何选出来的?Raft算法

4.2.5由兵王开始推动故障切换流程并选出新的master

(1)3步骤
一、新主登基
  1. 某个Salve被选中成为新的Master
  2. 选出新master的规则,剩余slave节点健康的前提下
    1. redis.conf文件中,优先级slave-priority或者replica-priority最高的从节点(数字越小优先级越高)
    2. 复制偏移位置offset最大的从节点(也就是在master还没有宕机时,复制到数据比其他Slave要多)
    3. 最小Run ID的从节点,字典顺序,ASCII码
二、群臣俯首

三、旧主拜服
(2)小总结

上述的failover操作均由sentinel自己独自完成,完全不需要人工干预

五、哨兵使用建议

  1. 哨兵节点的数量应为多个,哨兵本身应该集群,保证高可用
  2. 哨兵节点的数量应该是奇数
  3. 各个哨兵节点的配置应一致
  4. 如果哨兵节点部署在Docker等容器里面,尤其要注意端口的正确映射
  5. 哨兵集群+主从复制,并不能保证数据零丢失(引出集群)

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

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

相关文章

WEB入门

1.了解什么是WEB 2.了解什么是WEB前端 3.学习和掌握开发环境的搭建 4.网页开发基础 1.什么是WEB 1946年,有一个发明了人类史上第一台完整体系的计算机 时间进展到1989年,实验室有一个研发人员 TimBernersLee(提姆博纳斯李)开…

【若依免登录】登录状态已过期,您可以继续留在该页面,或者重新登录

【问题】 【问题背景】 在实现若依的免登录出现的问题。前面已经做的操作 前端 第一步:views目录下面存在需要免登录的页面 第二步:在ruoyi-ui\src\router 的 index.js 的 constantRoutes (公共路由方)中 配置需要免登录的页面位…

JUC并发-4.wait和notify以及Atomic原理

大纲 1.wait()与notify()实现一个简易的内存队列 2.wait()与notify()的底层原理 3.分布式存储系统NameNode机制介绍 4.分布式存储系统的edits log机制介绍 5.分布式存储系统的NameNode实现 6.分布式存储系统的创建目录功能的实现 7.edits log的全局txid机制和双缓冲机制…

Jasper AI技术浅析(二):语言模型

Jasper AI 的核心语言模型是基于 OpenAI 的 GPT-4(Generative Pre-trained Transformer 4)构建的。GPT-4 是一种生成式预训练语言模型,利用深度学习技术,特别是 Transformer 架构,来理解和生成自然语言。 1. GPT-4 的基本原理 1.1 Transformer 架构 GPT-4 基于 Transfo…

(arxiv2411) CARE Transformer

作者提出了两个问题,问题 1:堆叠是充分利用局部归纳偏差和长距离信息优势的最佳方法吗? 问题 2:是否有可能同时提高线性视觉 Transformer 的效率和准确性? 为了解决这两个问题,作者提出了一种 deCoupled du…

RISC-V平台编译 state-thread x264 ffmpeg zlog

1.state-threads 源码下来之后 直接 make linux-debug 目录下生成了对应的.a 和 .h文件 gcc test.c -o test -l st -L . #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <sys/socket.h&g…

DeepSeek笔记(二):DeepSeek局域网访问

如果有多台电脑&#xff0c;可以通过远程访问&#xff0c;实现在局域网环境下多台电脑共享使用DeepSeek模型。在本笔记中&#xff0c;首先介绍设置局域网多台电脑访问DeepSeek-R1模型。 一、启动Ollama局域网访问 1.配置环境变量 此处本人的操作系统是Windows11&#xff0c;…

2025年二级建造师报名流程图解

2025年二级建造师报名时间&#xff01;附报名流程&#xff01; ⏰️已公布25年二建考试时间的省份如下&#xff1a; ️4月19日、20日考试的城市有&#xff1a;贵州 ️5月10日、11日考试的城市有&#xff1a;湖北、陕西、宁夏、甘肃、福建、浙江、江西、黑龙江、河南、湖南、…

Android的Activity生命周期知识点总结,详情

一. Activity生命周期 1.1 返回栈知识点 二. Activity状态 2.1 启动状态 2.2 运行状态 2.3 暂停状态 2.4 停止状态 2.5 销毁状态 三. Activity生存期 3.1 回调方法 3.2 生存期 四. 体验Activity的生命周期 五. Activity被回收办法 引言&#xff1a; 掌握Acti…

frp-tool,客户端frp命令行工具

在日常开发和运维过程中&#xff0c;端口转发和配置管理是常见的需求。 如果有自己一台服务器&#xff0c;并且已经开放好端口&#xff0c;配置好token后&#xff0c;这个工具一定能帮到你。 今天给大家推荐一款非常好用的frpc命令行工具&#xff0c;它是一个用Python编写的命令…

netcore https配置

一、生成证书 1. 安装 OpenSSL 如果尚未安装 OpenSSL&#xff0c;可以通过以下命令安装&#xff1a;Ubuntu/Debian:sudo apt update sudo apt install openssl CentOS/RHEL:sudo yum install openssl 2. 生成私钥 使用以下命令生成私钥文件&#xff08;private.key&#xff09…

解锁ApplicationContext vs BeanFactory: 谁更具选择性?

目录 一、聚焦源码回顾 &#xff08;一&#xff09;源码分析和理解 &#xff08;二&#xff09;简短的回顾对比建议 二、ApplicationContext vs BeanFactory特性对比 &#xff08;一&#xff09;主要特性总结 &#xff08;二&#xff09;直接建议 三、案例简单说明 &am…

【大模型】DeepSeek 高级提示词技巧使用详解

目录 一、前言 二、DeepSeek 通用提示词技巧 2.1 DeepSeek 通用提示词技巧总结 三、DeepSeek 进阶使用技巧 3.1 DeepSeek一个特定角色的人设 3.1.1 为DeepSeek设置角色操作案例一 3.1.2 为DeepSeek设置角色操作案例二 3.2 DeepSeek开放人设升级 3.2.1 特殊的人设&#…

1-2 gitee创建远程仓库

如何创建远程仓库&#xff1f; 第一步点击加号&#xff0c;创建仓库 点击创建仓库给新创建的仓库命名即可 仓库创建成功即可

浏览器打开Axure RP模型

1&#xff0c;直接使用chrome打开&#xff0c;提示下载插件 2&#xff0c;需要做一些操作 打开原型文件&#xff0c;找到resources\chrome\axure-chrome-extension.crx文件&#xff0c;这就是我们需要的Chrome插件。 将axure-chrome-extension.crx文件后缀名改为axure-chrome…

Linux环境下安装mkcert

官网&#xff1a;https://github.com/FiloSottile/mkcert 选择对应的处理器的型号去下载对应的版本 ./mkcert-v1.4.4-linux-amd64 -key-file key.pem -cert-file cert.pem localhost 127.0.0.1 ::1命令解析 -key-file key.pem&#xff1a;指定输出的私钥文件名为key.pem。私钥…

【动态路由】系统web url整合系列【springcloud-gateway实现】【不改hosts文件版】组件一:多个Eureka路由过滤器

需求 实现URL web资源整合&#xff0c;实现使用一个web地址访问多个web资源 方案 本方案使用SpringCloud Gateway实现&#xff0c;不需要在hosts文件加添加域名映射&#xff08;也不需要定义一系列域名&#xff09;&#xff0c;通过url路径来将请求转发到不同的Web资源 如&…

【ubuntu24.04】 强制重启导致大模型的磁盘挂载出错

挂载NTFS文件系统出错 各种模型放在了这个机械硬盘上&#xff0c;虽然速度慢&#xff0c;但是好在容量大。大模型在工作&#xff0c;但是程序看起来有问题&#xff0c;导致系统卡死了&#xff0c;然后我重启了&#xff0c;然后报错&#xff1a;wrong fs type bad option &…

细说STM32F407单片机RTC入侵检测和时间戳的原理及使用方法

目录 一、入侵检测的功能 二、示例功能 三、项目设置 1、晶振、DEBUG、CodeGenerator、USART6、KEYLED 2、RTC &#xff08;1&#xff09;设置RTC的模式。 &#xff08;2&#xff09;General、Time、Date\Wake Up分组 &#xff08;3&#xff09;Tamper分组 1&#xff…

教程:使用 Vue 3 和 arco 实现表格合并

1. 功能概述 本教程将介绍如何使用 Vue 3 和 arco 组件库实现表格合并功能。具体来说&#xff0c;我们会根据表格数据中的某个字段&#xff08;如 type&#xff09;对表格的某一列&#xff08;如入库类型列&#xff09;进行合并&#xff0c;同时将质检说明列合并为一列。 2. …