Redis-哨兵监控(sentinel)
是什么
Docs
吹哨人巡查监控后台master主机是否故障,如果故障了根据投票数自动将某一个从库转换为新主库,继续对外服务
作用:无人值守运维

能干嘛

1.主从监控
监控主从redis的库是否运行正常
2.消息通知
哨兵可以将故障转移的结果发送给客户端
3.故障转移
如果Master异常,则会进行主从切换将其中一个Slave作为新Master
4.配置中心
客户端通过连接哨兵来获得当前Redis服务的主节点地址
案例演示(实战步骤)
1.Redis sentinel架构,前提说明


2.案例步骤
1./myredis目录下新建或者拷贝sentinel.conf文件,名字绝不能错
把/opt/redis-版本号下的最原始的sentinel.conf文件拷贝进/myredis下

2.conf配置文件的重点参数说明
1.bind
服务监听地址,用于客户端连接,默认本机地址
2.daemonize
是否以后台daemon方式运行
3.protected-mode
安全保护模式
4.port
端口
5.logfile
日志文件路径
6.pidfile
pid文件路径
7.dir
工作目录
8.sentinel monitor <master-name> <ip> <redis-port> <quorum>
设置要监控的master服务器
quorum:表示最少有几个哨兵认可客观下线,同意故障迁移的法定票数。
为什么用quorum:
我们知道,网络是不可靠的,有时候一个sentinel会因为网络堵塞而误以为一个master redis已经死掉了,在sentinel集群环境下需要多个sentinel互相沟通来确认某个master是否真的死了,quorum这个参数是进行客观下线的一个依据,意思是至少有quorum个sentinel认为这个master有故障,才会对这个master进行下线以及故障转移。因为有的时候,某个sentinel节点可能因为自身网络原因,导致无法连接master,而此时master并没有出现故障,所以,这就需要多个sentinel都一致认为该master有问题,才可以进行下一步操作,这就保证了公平性和高可用。
9.sentiel auth-pass <master-name> <password>
master设置了密码,连接master服务的密码
10.其他

3.本次案例哨兵sentinel.conf的通用配置
由于机器硬件关系,我们的3个哨兵都同时配置进192.168.111.169同一台机器

在/myredis下配置:
sentinel26379:


4.先启动一主二从3个redis实例,测试正常的主从复制
1.架构说明

2.配置redis一主二从的conf文件
6379:(也要配置6379的masterauth,因为当6379从主机下位后成为从机,要连接新主机)

3.3台不同的虚拟机实例,启动三部真实机器实例并连接

5.启动三个哨兵,完成监控

6.启动三个哨兵后再测试一次主从复制

7.原有的master挂了
1.我们自己手动关闭6379服务器,模拟master挂了

2.问题思考
两台从机上的数据是否ok-->ok的,但是因为要内部选举,所以会error一段时间
是否会从剩下的两台从机上选出新的master-->会
之前down的主机重新启动回来,谁将是新老大,会不会双master冲突-->不会,通过日志,我们发现6379会彻底变成slave
查看sentinel26379.log文件

3.答案揭晓
数据是ok的,但是两个小问题,一种是连接断开,一种是broken pipe

8.对比配置文件

6379的配置文件;

结论:
sentinel会修改redis数据库的conf文件

3.其他备注
哨兵只是监控,没有业务压力
生产都是不同机房不同服务器,很少出现3个哨兵全挂掉的情况
哨兵可以同时监控多个master,一行一个

哨兵运行流程和选举原理
当一个主从配置中的master失效之后,sentinel可以选举出一个新的master用于自动接替原master的工作,主从配置中的其他redis服务器自动指向新的master同步数据。一般建议sentinel采取奇数台,防止某一台sentinel无法连接到master导致误切换
运行流程,故障切换
三个哨兵监控一主二从,正常运行中

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

ODown客观下线
ODOWN需要一定数量的sentinel,多个哨兵达成一致意见才能认为一个master客观上已经宕掉
quorum

选举出领导者哨兵(哨兵中选出兵王)leader
投票完以后,三个哨兵选出一个leader.由leader来执行接下来的更换master等操作
当主节点被判断客观下线以后,各个哨兵节点会进行协商先选举出一个领导者哨兵节点(兵王)并由该领导者节点也即被选举出的兵王进行failover(故障迁移)
看日志可以看到选取leader的过程

兵王如何选举出来的?Raft算法
判断主观下线的哨兵节点向其他哨兵节点发送master宕机,如果超过半数的哨兵节点判断master节点进入客观下线的状态,那么率先判断进入主观下线的哨兵将成为领头sentinel

由兵王开始推动故障切换流程并选举出一个新的master(新master选举的算法)
三步骤
新王登基
某个slave被选中成为新master
选出新master的规则(在slave节点健康的前提下):


群臣俯首

首先被选为新master的执行slaveof no one命令让自己从原来的从节点变为主节点,然后再通过slaveof 命令让其他节点成为从节点
旧主拜服

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

哨兵使用建议

并不能保证数据零丢失,引出集群
相关文章:
Redis-哨兵监控(sentinel)
是什么 Docs 吹哨人巡查监控后台master主机是否故障,如果故障了根据投票数自动将某一个从库转换为新主库,继续对外服务 作用:无人值守运维 能干嘛 1.主从监控 监控主从redis的库是否运行正常 2.消息通知 哨兵可以将故障转移的结果发送给客户端 3.…...
RISC-V反汇编调试记录分享
RISC-V反汇编调试记录分享 本文记录一次使用反汇编进行调试分析。 最近在 rtthread 下适配 MilkV Duo 的硬件定时器驱动时遇到了一些问题,demo 运行时报以下错误: Unhandled Exception 2:Illegal Instruction scause:0x0x0000000000000002,stval:0x0x…...
python上下文管理器 with的使用
python上下文管理器 with是从Python一个语法糖,它是一种上下文管理协议,目的在于把我们之前常见一个开发 try,except 和finally 关键字和一些文件开关闭合资源分配释放等问题都简化。 总结起来使用python 提供的with主要的作用是: 实现自动…...
24/8/8算法笔记 决策树构建鸢尾花
决策树是一种由算法自动设计的模型。在机器学习中,构建决策树的过程通常遵循以下步骤: 特征选择:算法会评估每个特征,并选择一个特征作为节点分裂的依据。这个选择基于某种准则,如信息增益(ID3算法…...
数据库扩展新篇章:主流分库分表中间件全解析
摘要: 随着企业数据量的激增,传统的单体数据库架构已经无法满足日益增长的性能需求和数据管理复杂性。分库分表技术作为解决这一问题的有效手段,通过将数据水平或垂直地分散到多个数据库中,提高了系统的扩展性和处理能力。本文将详…...
python看图片猜价格游戏,frame 和PhotoImage的使用
import tkinter.messagebox import tkinter import randomwindow tkinter.Tk()window.geometry(800x400)window.title(猜数字游戏)good_price random.randint(10, 100) input_price random.randint(1, 100)def sumit():global good_priceif entry.get() "" or en…...
未来展望:等保测评在网络安全领域的持续创新与发展
在数字化浪潮席卷全球的今天,网络安全已成为维护国家安全、社会稳定和经济发展的关键基石。作为网络安全保障体系的核心组成部分,等级保护测评(简称“等保测评”)在应对日益复杂多变的网络威胁中发挥着不可替代的作用。展望未来&a…...
构建深度学习驱动的多目标检测系统:YOLO模型及应用
随着计算机视觉技术的飞速发展,多目标检测在各种实际应用中发挥着越来越重要的作用。本文将j简单介绍如何构建一个基于深度学习的多目标检测系统,包括数据准备、模型训练、UI界面开发和部署的完整流程。如有部署的想法,想要(UI界面…...
算法刷题笔记 染色法判定二分图(染色法例题 C++实现)
文章目录 题目描述二分图介绍和基本思路实现代码(C) 题目描述 给定一个n个点m条边的无向图,图中可能存在重边和自环。请你判断这个图是否是二分图。 输入格式 第一行包含两个整数n和m。接下来m行,每行包含两个整数u和v…...
在Ubuntu上安装OpenBLAS和Eigen
安装 openblas 直接使用 apt-get 命令即可安装: sudo apt-get install libopenblas-dev检查是否安装成功,可以用下面的示例代码 example.cpp: #include <stdio.h> #include <stdlib.h> #include "cblas.h"int main(…...
Vue前端面试基础(一)
Vue面试题目详解可以涵盖多个方面,从基础知识到高级特性,再到实际应用和性能优化等。以下是一些常见的Vue面试题目及其详解: 1. Vue双向绑定原理 详解: Vue的双向绑定原理是通过数据劫持结合发布者-订阅者模式实现的。Vue在内部…...
使用Gitlab实现monorepo多项目CICD
CI/CD是什么 CI/CD(Continuous Intergration/Continuous Delpoy),即持续集成/持续部署,或称为持续集成/持续交付,作为一套面向开发和运维团队的解决方案,CI/CD 主要解决集成新代码和向用户频繁交付应用的问…...
设计模式实战:银行账户管理系统的设计与实现
问题描述 设计一个银行账户管理系统,支持不同类型的账户(如储蓄账户、支票账户)进行存取款操作,并能够在账户余额发生变化时通知相关观察者(如用户、银行系统)。系统需要确保账户操作的灵活性和可扩展性。 设计分析 策略模式 策略模式定义了一系列算法,并将每个算法…...
⭕️【论文阅读】《Interactive Class-Agnostic Object Counting》
[2309.05277] Interactive Class-Agnostic Object Counting (arxiv.org) code: cvlab-stonybrook/ICACount: [ICCV23] Official Pytorch Implementation of Interactive Class-Agnostic Object Counting (github.com) 目录 Abstract Abstract 我们提出了一个新…...
高效的编程学习方法和技巧
编程小白如何成为大神?大学新生的最佳入门攻略 编程已成为当代大学生的必备技能,但面对众多编程语言和学习资源,新生们常常感到迷茫。如何选择适合自己的编程语言?如何制定有效的学习计划?如何避免常见的学习陷阱&…...
sublime text插件开发
手工开发了一些ST的py插件,记录过程中遇到的一些问题。 ST3/ST4 begin_edit问题 报错: begin_edit() missing 2 required positional arguments: edit_token and cmdST3时已经不能直接调view.begin_edit方法了,需要通过runCommandTextComm…...
【Linux网络】网络层协议:IP
本篇博客整理了 TCP/IP 分层模型中网络层的 IP 协议,旨在让读者更加深入理解网络协议栈的设计和网络编程。 目录 一、网络层 二、IP 报头 1)报头与有效载荷的分离 2)有效载荷的上交 3)源 IP 与目的 IP 4)生存时间…...
分布式接口文档聚合,Solon 是怎么做的?
1、分布式接口文档聚合,是什么? 如果你有 “22” 个不同的服务(比如微服务),每个服务都有自己的接口文档。每个服务的文档各自打开,估计你会觉得很麻烦的? 再如果,它们是用 openap…...
多尺度病理图像纹理特征作为肺腺癌预后预测的新指标|文献精读·24-08-09
小罗碎碎念 这一期推文分享的文献是2022年发表于 Journal of Translational Medicine 的一篇文章,目前IF6.1。 这篇文章值得刚入门病理AI领域的老师/同学仔细研读,因为思路清晰,该讲到的流程基本都涉及了,详细讲述了病理图像的各种…...
RAG+Agent项目实践系列:基于本地菜谱知识库的大语言模型RAG+Agent的解决方案设计和实现
RAG+Agent项目实践系列:基于本地菜谱知识库的大语言模型RAG+Agent的解决方案设计和实现 为 A 项目构建一个基于菜谱知识库的问答机器人,由业务方提供一系列菜谱知识库和公司概况介绍材料,根据这些知识库要求实现一个问答机器人: 实现用户对于机器人自我身份和公司情况的回…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...
