当前位置: 首页 > news >正文

Redis: Sentinel哨兵监控架构及环境搭建

概述

  • 在主从模式下,我们通过从节点只读模式提高了系统的并发能力
  • 并发不断增加,只需要扩展从节点即可,只要主从服务器之间,网络连接正常
  • 主服务器就会将写入自己的数据同步更新给从服务器,从而保证主从服务器的数据相同
  • 在这种架构下,它仍然是有一些缺点的,比如说它的可靠性保证不是很好,因为主从模式下,主节点故障了便无法提供写入的服务
  • 现在,我们通过哨兵来解决这个问题
    • 然后,主节点其实写的压力也是并没有被释放的
    • 包括主从之间的数据是相同的,它还有数据冗余一个问题
    • 后面集群也会解决这个问题
  • 现在,我们主要解决的问题是:主节点挂机了,从节点可以晋升为主节点
    • 在之前,我们需要人工干预,手动去修改应用的主节点地址
    • 然后自己通过命令,让所有的从节点去布置新的主节点
  • 哨兵模式把这个过程自动的完成故障转移
  • 注意,我们需要知道:
    • 哨兵监控的一个完整流程的搭建
    • 哨兵的一个工作原理,它的机制,包括它是怎么实现故障转移的
    • 如何结合它来改造升级我们的应用项目
    • 主观和客观下线,仲裁如何选取新的主节点的
    • 故障迁移的流程
    • 日志如何分析
    • 常用指令

哨兵监控架构

  • 在主从模式中,主节点宕机之后,从节点是可以作为主节点顶上来继续提供服务
  • 但是这个过程是需要人工干预的,比如我们要自己去修改主节点地址
  • 然后再让其他的从节点去复制新的主节点,于是,Redis@2.8引入了哨兵的概念
  • 在主从复制的基础之上,哨兵实现了自动化故障恢复
  • 如上面这张图,左边是我们的哨兵,右边是我们 Redis 的主从
  • 在这张图中,我们的 Redis 就分为了两部分
    • 一部分是哨兵节点
    • 一部分是数据节点
  • 哨兵节点,它就是特殊的 Redis 节点,只不过不存储数据而已
  • 数据节点就是原来的主从模式,里面存储的我们项目中的数据
  • Redis 它是一种分布式系统的架构模式
  • 哨兵主要的作用就是监控 Redis 的主从服务器提供主服务器下线时自动故障转移的功能

1 )监控 (Monitoring)

  • 监控的意思,就是会不断的检查你的主服务器和从服务器是否运作正常

2 ) 提醒 (Notification)

  • 被监控的某个 Redis 服务器,如果出现了问题,可以通过api向管理员,或者其他应用程序发送通知,提醒我们

3 ) 自动故障迁移 (Automatic failover)

  • 自动故障迁移指的是当一个主服务器不能正常工作时,会开启一次自动故障迁移的操作

4 ) 配置提供者 (Configuration provider)

  • 配置提供者指的是我们客户端,它其实不需要直接连到主从,而是连接到哨兵
  • 因为哨兵给客户端提供了一个服务发现的功能,客户端连到哨兵之后,就可以直接获取到主从节点的相关信息,如果发生了故障迁移,重新发生新的主节点
  • 哨兵也会把新的主节点的信息通知给客户端
  • 这就是哨兵监控架构的组成部分,以及它的一些特性

Sentinel 的分布式特性

  • 现在我们来看一下它的分布式特性都有哪些点
  • 首先第一个就是它降低了误报的可能性
    • 这个意思就是说我们的 Sentinel 实际上它是一个分布式的架构系统
    • 就是说在一个架构中,我们是可以运行多个 Sentinel 进程的
    • 如果有多个 Sentinel 进程,那么当我的master不再可用的时候,我们就降低了误报可能性
    • 为什么呢?因为只有一个 Sentinel 的话,假如说现在发生了网络迁移,我认为这个主节点不可用了
    • 实际上人家是可用的,只不过网络延迟,你跟主节点没有通信,那你就不能说它就宕机了
    • 这个时候,假如有多个 Sentinel 进程,你觉果它不可用了
    • 但是其他的 Sentinel 觉得它是可用的,就不会产生这个误报,它降低了误报的可能
  • 第二个就是降低了对客户端的影响
    • 在不同服务器上,我们可以运行多个 Sentinel 进程
    • 然后将 Sentinel 做成集群,那么其中一个故障了
    • 我们仍然是可以进行主从切换的,它可以帮我们去自动的故障迁移
    • 降低了对客户端的影响,提升了系统的健康性
  • 第三就是任意的 Sentinel 都可对外提供服务
    • Redis 的客户端,你可以连接到任意的 Sentinel 来使用
    • Redis 不需要特定的去连某一个节点

部署 Redis Sentinel 之前的准备

  • 首先第一个就是端口,Sentinel 运行,默认监听的端口是 26379
  • 第二个就是至少三个 Sentinel 实例
    • 它指的就是一个健壮的部署至少需要三个 Sentinel 实例,为什么呢?
    • 我们的 Sentinel 在决定我们的 Redis 主节点是否可用?
    • 实际上它是一个少数服从多数的一个仲裁的过程
    • 如果说我只有一个,连不上你,我可能认为你是故障了,但实际上可能是网络延迟导致的。
    • 部署了两个的话,我说没有,你说有,我要听谁的呢?
    • 这样,最好就来个奇数,这样就可以产生大于1/2的结果
    • 那比如说有两个觉得它没连上, 就可以故障迁移
    • 一般建议都是奇数的,3,5,7,最少需要3个 Sentinel 的识别
  • 第三就是运行 Sentinel 必须指定配置文件
    • 如果你不指定配置文件的话,它会拒绝启动
    • 因为我们的系统是使用这个文件来保存当前的一个主从状态的
    • 你启动了 Sentinel 的时候,要指定配置文件
    • 是因为它要从配置文件里边去加载当前的环境状态
    • 并且它会把更改故障迁移之后的一些主从信息状态也会写入到配置里边
    • 所以,你不指定配置,它会拒绝启动
  • 第四个就是独立的虚拟机或物理机中运行
    • 我们如果在一个虚拟机或者物理机中运行 Sentinel 多个进程的话
    • 实际上是一种非常不妥善不好的方法
    • 如果说这个机器故障了,多个 Sentinel 都被挂掉
    • 所以,最好的还是不要节省资源
    • 把申请脑部署在相对独立的多个虚拟机或者物理机当中
  • 第五就是可配置 Sentinel 允许丢失有限的写入
    • 因为 Sentinel 在做切换的时候啊,它肯定是有一部分的数据丢失的
    • 而且 Redis 使用的是一种异步的复制机制
    • 所以说, Sentinel 加 Redis,它不能保证故障期间保留已确认的写入
    • 但是我们是可以配置它允许丢失有限的写入
  • 第六就是客户端要支持 Sentinel
    • 你现在用了哨兵,你的客户端必须得支持
    • 现在大部分热门的第三方都是支持 Sentinel 的
  • 第七,经常要在测试环境中测试
  • 第八,在 Docker 、端口映射或网络地址转换的环境中配置的时候要格外小心
    • 因为在重新映射端口的情况下,真实的端口可能与转发的端口不同
    • 就会破坏 Sentinel 自动发现其他 Sentinel 进程

Sentinel 的优缺点

1 )优点

  • 哨兵模式是基于主从模式的,所以说主从的优点哨兵都有
  • 然后主从可以自动切换,系统的可用性能高,不用再去像之前一样人为的去切换
  • Sentinel 会不断的检查你的主服务器和从服务器是否运作正常,当被监控的某个 Redis 服务器出现问题时,Sentinel 可以通过 API 向管理或者其他应用程序发送通知

2 )缺点

  • 主从切换的时候是需要时间的,这部分可能会丢失数据
  • 还是没有解决主节点写的压力,后面集群分片会解决这个问题
  • 主节点写的能力,存储能力都是受到单机的限制
    • 就是说你这个主节点部署在这台服务器上
    • 它肯定通过这台主机的一个性能限制的
  • 动态扩容困难复杂
    • 在节点管理中如何在一个运行正常的环境下去动态的添加或者删除
    • 尤其是在删除的时候,会稍微的麻烦一点。如果操作不当,可能还会有影响

监控环境的搭建


1 )节点准备

角色IP
Master192.168.10.101
Slave192.168.10.102
Slave192.168.10.103

2 ) 编写配置文件

  • 三个节点分别创建 sentinel.conf 并添加以下配置
  • $ vi /usr/local/redis/conf/sentinel.conf
    # 放行所有IP限制
    bind 0.0.0.0
    # 进程端口号
    port 2379
    # 后台启动
    daemonize yes
    # 日志记录文件
    logfile "/usr/local/redis/log/sentinel.log"
    # 进程编号记录文件
    pidfile /var/run/sentinel.pid
    # 指示 Sentinel 去监视一个名为 mymaster 的主服务器 后面的 2 表示仲裁 3/2 + 1 = 2 其中3是总计三台机器
    sentinel monitor mymaster 192.168.10.101 6379 2
    # 访问主节点的密码
    sentinel auth-pass mymaster 123456
    # Sentinel认为服务器已经断线所需的毫秒数 默认值是30秒 这里改成10秒 PING PONG 中 返回 PONG 的时间
    sentinel down-after-milliseconds mymaster 10000
    # 若Sentinel 在该配置值内未能完成 failover 操作,则认为本次 failover失败 最终的超时时间 这里设置3分钟
    sentinel failover-timeout mymaster 180000
    

3 )启动

3.1 先启动 3 台 Redis 服务

  • $ /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf 3台分别启动
  • 在 主从服务器分别连接进入,查看 主从复制信息 $ info replication

3.2 再启动 3 个 Sentinel 服务

  • $ /usr/local/redis/bin/redis-sentinel /usr/local/redis/conf/sentinel.conf --sentinel 主服务器
  • $ /usr/local/redis/bin/redis-sentinel /usr/local/redis/conf/sentinel.conf 2个从服务器

3.3 查看日志

  • 主服务器:$ tail -f /usr/local/redis/log/sentinel.log

    1216:X 1 Oct 2024 14:42:14.647 # Configuration loaded
    1216:X 1 Oct 2024 14:42:14.670 * Increased maximum number of open files to 10032 (it was originally set to 024).
    1216:X 1 Oct 2024 14:42:14.671 * Running mode=sentinel, port=26379.
    1216:X 1 Oct 2024 14:42:14.671 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
    1216:X 1 Oct 2024 14:42:14.672 # Sentinel ID is ef7901d7ce89fde9a48501ab0194a0702fb7a6b9
    1216:X 1 Oct 2024 14:42:14.672 # +monitor master mymaster 192.168.10.101 6379 quorum 2
    1216:X 1 Oct 2024 14:42:14.673 * +slave slave 192.168.10.102:6379 192.168.10.102 6379 @ mymaster 192.168.10.101 6379
    1216:X 1 Oct 2024 14:42:14.675 * +slave slave 192.168.10.103:6379 192.168.10.103 6379   @ mymaster  192.168.10.101 6379
    1216:X 1 Oct 2024 14:42:28.835 * +sentinel sentinel 8a0b821f46e52b6c843b993d837c30802b966dbf 192.168.10.102 26379 @ mymaster 192.168.10.101 6379
    1216:X 1 Oct 2024 14:42:40.427 * +sentinel sentinel ca57497475e5317d43c08c3e6c112567c82f725e 192.168.10.103 26379 @ mymaster 192.168.10.101 6379
    
  • 由此,整个 sentinel 环境搭建完成

相关文章:

Redis: Sentinel哨兵监控架构及环境搭建

概述 在主从模式下,我们通过从节点只读模式提高了系统的并发能力并发不断增加,只需要扩展从节点即可,只要主从服务器之间,网络连接正常主服务器就会将写入自己的数据同步更新给从服务器,从而保证主从服务器的数据相同…...

C++ 语言特性30 - 模板介绍

目录 一:C11 之前的模板特性 1. 函数模板: 2. 类模板: 3. 模板特化: 4. 模板参数: 5. 模板元编程: 二:C11的模板特性 1. 变长模板(Variadic Templates)&#xff…...

算法笔记(七)——哈希表

文章目录 两数之和判定是否互为字符重排存在重复元素存在重复元素 II字母异位词分组 哈希表:一种存储数据的容器; 可以快速查找某个元素,时间复杂度O(1); 当频繁查找某一个数时,我们可以使用哈希表 创建一个容器&#…...

【基础算法总结】链表篇

目录 一, 链表常用技巧和操作总结二,算法原理和代码实现2.两数相加24.两两交换链表中的节点143.重排链表23.合并k个升序链表25.k个一组翻转链表 三,算法总结 一, 链表常用技巧和操作总结 有关链表的算法题也是一类常见并且经典的题…...

探索路由器静态IP的获取方式

在网络配置中,路由器静态IP是一个重要的概念。对于家庭网络或办公室网络而言,正确配置静态IP地址是确保网络稳定性和管理的关键步骤之一。但是,很多人对于静态IP地址的获取方式可能感到困惑。在本文中,我们将探讨它的获取途径&…...

Vivado - JTAG to AXI Master (GPIO、IIC、HLS_IP)

目录 1. 简介 2. JTAG to AXI Master 2.1 添加 IP Core 2.2 基本TCL命令 2.2.1 复位 JTAG-to-AXI Master 2.2.2 创建并运行写入传输事务 2.2.3 创建并运行读取传输事务 2.2.4 命令列表 2.3 帮助信息 2.4 创建TCL读写程序 2.4.1 Read proc 2.4.2 Write proc 2.4.3 …...

Java中JWT(JSON Web Token)的运用

目录 1. JWT的结构2. JWT的优点3. JWT的流转过程4.具体案例一、项目结构二、依赖配置三、用户模型四、JWT工具类五、JWT请求过滤器六、安全配置七、身份验证控制器八、测试JWT JWT(JSON Web Token)是一种开放标准(RFC 7519)&#…...

CSS3练习--电商web

免责声明:本文仅做分享! 目录 小练--小兔鲜儿 目录构建 SEO 三大标签 Favicon 图标 布局网页 版心 快捷导航(shortcut) 头部(header) logo 导航 搜索 购物车 底部(footer&#xff0…...

Linux 默认内核版本更改

随笔记录 目录 1. 背景介绍 2. 解决方法 2.1 查看所有可用版本 2.2 安装指定版本内核 2.3 检查当前内核列表 2.4 检查当前默认内核 2.5 设置新的默认内核 2.6 确认内核是否成功加载 2.7 重启 2.8 删除其他版本内核 1. 背景介绍 linux 一般安装多个内核版本&…...

【ubuntu】修改用户名、主机名、主文件夹名、登录名、密码

目录 1.他们是什么 2.修改方法 2.1 修改用户密码 2.2 修改主机名 2.2.1 切换到root用户 2.2.2 修改名称 2.3 修改用户名 主文件夹名 登录名 2.2.1 sudoers 2.2.2 passwd 2.2.3 shadow 2.2.4 group 2.2.5 修改主文件夹名 3.重启 1.他们是什么 (1&#xf…...

深入理解JavaScript 的原型继承

JavaScript 的原型链继承机制和 Java 的类继承机制有明显的区别,虽然它们都用于实现对象之间的继承,但它们的实现方式、概念以及运行机制都不同。 1. JavaScript 的原型继承 JavaScript 是基于原型链的继承,主要依赖对象的 __proto__ 属性或…...

Error while loading conda entry point: conda-libmamba-solver

问题 解决方法 conda install --solverclassic conda-forge::conda-libmamba-solver conda-forge::libmamba conda-forge::libmambapy conda-forge::libarchive...

FANUC机器人—PCDK

前言 FANUC提供了一种使用其 PC 开发人员套件 (PCDK) 从 PC 命令和配置机器人的简单方法。该套件允许 PC 访问机器人上的变量、寄存器、IO、程序、位置和警报;接下来,我将如何开始使用 C#。 连接到机器人 将以下突出显示的行添加…...

如何在wsl中使用beyond compare

寫一個名為bc4的文件,內容如下: #!/bin/sh /mnt/c/Program\ Files/Beyond\ Compare\ 4/BComp.com $(wslpath -aw $1) $(wslpath -aw $2)bc4 file1 file2參考:https://forum.scootersoftware.com/forum/beyond-compare-4-discussion/version-…...

CNN+Transformer在自然语言处理中的具体应用

在自然语言处理(NLP)领域,CNN(卷积神经网络)和Transformer架构各自有着广泛的应用。NLP中的具体应用: CNN在NLP中的应用 1.文本分类:CNN可以用于文本分类任务,如情感分析、垃圾邮件…...

DotNetty ChannelRead接收数据为null

问题:C#使用Dotnetty和Java netty服务器通讯,结果能正确发送数据到服务器,却始终接收不到服务器返回的数据。 解决:一定一定要注意服务器和客户端使用的编码一定要完全一样才行 我先前在客户端添加了StringDecoder,服务器却没有…...

3分钟学会下载 blender

1. blender简介 Blender是一款开源的3D创作套件,它由Blender Foundation维护,并得到了全球志愿者和专业开发者的支持。Blender广泛应用于3D模型的制作、动画、渲染、视频编辑、游戏创建、模拟、 composting以及3D打印等多个领域。 功能特点&#xff1a…...

实现Xshell与虚拟机中Linux服务器的连接(附常见错误解决)

前言 Xshell是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。 本文将介绍Xshell与虚拟机中Linux服务器连接…...

Rust 语言开发 ESP32C3 并在 Wokwi 电子模拟器上运行(esp-hal 非标准库、LCD1602、I2C)

文章目录 esp-rs 简介GithubRust 包仓库Rust 教程Wokwi 电子模拟器开发环境Rust 环境esp-rs 环境创建 ESP32C3 项目项目结构编译项目命令运行模拟器ESP32C3 烧录 esp-rs 简介 esp-rs 是一个专注于为 Espressif 系列芯片(如 ESP32、ESP32-S2、ESP32-C3 等&#xff0…...

项目-坦克大战笔记-墙体销毁以及人机销毁

在子弹撞到墙或者人机身上时会将碰撞到的墙体或者人机销毁 我们需要做到几点 检测子弹碰撞到的墙体或者人机将物体获取到 每帧遍历墙体列表与人机列表,检测被碰撞的墙,创建一个方法返回值为对应类型将被碰撞的物体返回出来 public static gudin wallp…...

硬件设计-利用环路设计优化PLL的输出性能

目录 前言 问题描述 问题分析步骤 杂散源头排查 245.76M 参考相噪: 30.72M VCXO的相噪性能测试如下: 解决方案 前言 LMK04832是TI 新发布的低抖动双环去抖模拟时钟, 其最高输出频率可以到达3250MHz, 输出抖动极低,3200MHz…...

Vue入门-Node.js安装

进入Node.js中文网 ​​​​​​​点击进入Node.js中文网 或者手动输入网址: https://www.nodejs.com.cn/download.html 点击下载64位安装包: 下载好之后双击进行安装 可选择个性化安装或默认安装 直接点【Next】按钮,此处可根据个人需求…...

OpenCV threhold()函数

OpenCV threhold()函数的主要用途是将灰度图转换为二值图像,实现灰度图的二值化,在机器视觉中使用频度较高,如尺寸量测,物体识别等。其原型如下: 函数参数: src 输入数组(多通道、8 位或 32 位浮点&#xf…...

Qt教程(002):Qt项目创建于框架介绍

二、创建Qt项目 2.1 创建项目 【1、New Project】 【2、选择Qt Widgets Application】 【3、设置项目名称和保存路径】 注意,项目名称和路径不要带中文。 【4、选择QWidget】 带菜单栏的窗口QMainWindow空白窗口QWidget对话框窗口QDialog 【5、编译】 2.2 项目框…...

《C++游戏人工智能开发:开启智能游戏新纪元》

在当今的游戏世界中,人工智能(AI)已经成为了不可或缺的一部分。它能够为游戏增添深度、挑战性和真实感,让玩家沉浸其中,享受前所未有的游戏体验。而对于 C开发者来说,如何在 C中实现高效的游戏人工智能开发…...

SPSS and Origin Paired Samples T-Test

SPSS https://www.spss-tutorials.com/spss-paired-samples-t-test/ Testing the Normality Assumption We can now test the normality assumption by running a Shapiro-Wilk test ora Kolmogorov-Smirnov test. Origin分析 两个软件计算的一样...

速成java记录(上)

简单学一下,要求不高,能看懂java代码就行。 (太不容易了,已经好久没写博客了,希望以后可以坚持) /*** 文档注释* Author zmj* Data 2024/10/5 15:46 下午* Version 1.0*/import java.util.Scanner;//输入…...

春秋云镜靶场之CVE-2022-28525

1.环境搭建 我们开启环境 可以看到题目提示我们是文件上传漏洞,那么我们就进行测试 2.开启环境 我们开启环境,可以看到是一个登录页面,登录页面:一种是弱口令,一种是自己进行注册,一种是SQL注入,一种是在…...

【LLM】Agent在智能客服的实践(AI agent、记忆、快捷回复 | ReAct)

note 内容概况:结合京粉app学习agent的实践 Agent架构:通过模型训练提升LLM识别工具的准确性;设计可扩展并安全可控的agent架构扩展业务能力。记忆:多轮对话应用中如何组织、存储和检索记忆来提升大模型对用户的理解。快捷回复&…...

19款奔驰E300升级新款触摸屏人机交互系统

《19 款奔驰 E300 的科技焕新之旅》 在汽车科技日新月异的时代,19 款奔驰 E300 的车主们为了追求更卓越的驾驶体验,纷纷选择对爱车进行升级改装,其中新款触摸屏人机交互系统的改装成为了热门之选。 19 款奔驰 E300 作为一款经典车型&#x…...