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

Redis系列-四种部署方式-单机部署+主从模式+哨兵模式【7】

目录

  • Redis系列-四种部署方式-单机部署+主从模式【7】
    • redis-四种部署模式
    • 单机模式
    • 主从模式
      • 数据同步的方式
        • 全量数据同步
        • 增量数据同步
    • Redis哨兵模式
        • 总结缺点:
        • 哨兵模式应用
        • sentinel.conf配置项
    • REF

个人主页: 【⭐️个人主页】
需要您的【💖 点赞+关注】支持 💯


Redis系列-四种部署方式-单机部署+主从模式【7】

redis-四种部署模式

  • 单机模式
  • 主从模式
  • 哨兵模式
  • 集群模式

为什么要搞这么多部署模式,这就要涉及到高可用性了。

高可用是分布式的概念

Redis的高可用性是指在Redis集群中,当主节点宕机了,通过切换备用节点顶替它继续运行,保持系统正常运行且数据可靠性不受影响。

通过实现Redis的高可用性,可以提供以下几个主要优势

  1. 避免单点故障:通过配置和设置多个Redis节点,如果其中一个节点发生故障,其他节点可以接替工作,避免了单点故障对整个系统的影响。

  2. 数据冗余和复制:通过数据的复制和持久化备份,Redis能够在主节点出现故障时,自动切换到备用节点,并恢复数据,确保数据的持久性和可用性。

  3. 故障自动检测和故障转移:Redis的高可用方案通常具备故障检测和自动故障转移的功能,能够监控节点的健康状态,并在节点故障时自动将从节点升级为主节点。

redis的高可用主要完成以下工作

  1. 数据同步。主节点和从节点(备用节点)之间的数据需要进行同步。

  2. 主从切换。若主节点宕机,需要有一种机制可以切换从节点变成主节点。

单机模式

不是高可用的,一般用在测试或开发节点。
本质上就是 单点redis服务提供服务给业务服务使用。一旦宕机或停机,业务服务等依赖服务立刻不能使用。

在这里插入图片描述
直接再服务器上部署一个redis服务,并提供给外部使用。

服务个数: 1

主从模式

主从模式是在单机模式的基础上添加了数据备份的功能
主从复制数据同步方式,解决了单点故障的问题,但不能保证高可用(是高可用的基础)。
主要用来实现 redis 数据的可靠性,防止主 redis 所在磁盘损坏,造成数据永久丢失。

在主从模式中,Redis节点被分为主节点从节点
主节点负责处理所有的写操作,
而从节点则复制主节点的数据,并负责处理读操作。
主从模式的主要优点是提高了可靠性可扩展性
如果主节点发生故障,可以使用从节点来恢复数据。

主从之间采用异步复制的方式,以及采用读写分离的方式
主节点(master)可以进行读写操作,从节点(replica)一般是只读。也就是说,所有的数据修改只在主节点上进行,然后将最新的数据同步给节点,这样就使得主从服务器的数据是一致的。

在这里插入图片描述
需要注意的是:

1)主从复制无法提供高可用和数据保护能力,因为主节点发生故障时,需要手动进行故障转移。

2)从节点主动向主节点建立连接,从节点主动同步主节点的数据

在这里插入图片描述

数据同步的方式

全量数据同步
  1. 全量数据同步是在从节点刚加入复制集群或者需要进行完整数据更新时执行的同步过程。

  2. 它的目标是将主节点上的所有数据完整地同步到从节点

    全量数据同步的过程是将主节点上的所有内存数据通过快照(RDB文件)方式发送给从节点从节点接收到快照后将其加载到自己的数据库中。

  3. 全量数据同步消耗较大的网络带宽和时间,特别是在数据集较大的情况下。并且在全量数据同步过程中,从节点无法处理外部的读取请求,因为它正在重新加载大量的数据。

在这里插入图片描述

增量数据同步
  1. 增量数据同步是在全量数据同步完成后,用于保持主从节点之间数据的一致性

  2. 它通过记录主节点上的增量写命令(例如AOF日志文件)并将其发送给从节点来实现。

    增量数据同步的过程是在主节点上记录所有的写操作,并将这些操作记录传输给从节点,从节点接收到后执行这些操作以保持与主节点的数据一致。

  3. 增量数据同步具有实时性,可以减少数据同步的延迟

从数据库会记录一个偏移量offset(即记录同步到哪里了)。当从数据库断开重连,主数据库补发丢失数据到从数据库。此时如果offset在环形缓冲区当中,从数据库就会将offset后面的那部分数据同步过来,增量同步;如果offset不在环形缓存区中,说明数据过期太久,就会全量同步,把主数据库内部所有数据都同步过来。

在这里插入图片描述

Redis哨兵模式

可以完成高可用性的要求.

哨兵模式是一种特殊的模式,Redis 为其提供了专属的哨兵命令,它是一个独立的进程,能够独立运行。下面使用 Sentinel 搭建 Redis 集群,基本结构图如下所示
在这里插入图片描述

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

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

在实际生产情况中,Redis Sentinel 是集群的高可用的保障,为避免 Sentinel 发生意外,它一般是由 3~5 个节点组成,这样就算挂了个别节点,该集群仍然可以正常运转。
在这里插入图片描述
上图所示,多个哨兵之间也存在互相监控,这就形成了多哨兵模式,现在对该模式的工作过程进行讲解,介绍如下:

  1. 主观下线
    主观下线,适用于主服务器从服务器

    如果在规定的时间内(配置参数:down-after-milliseconds),Sentinel 节点没有收到目标服务器的有效回复,则判定该服务器为“主观下线”。

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

  1. 客观下线
    客观下线,只适用于主服务器。 Sentinel1 发现主服务器出现了故障,它会通过相应的命令,询问其它 Sentinel 节点对主服务器的状态判断。如果超过半数Sentinel 节点认为主服务器 down 掉,则 Sentinel1 节点判定主服务为“客观下线”。

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

对上对述过程做简单总结:

Sentinel 负责监控主从节点的“健康”状态。当主节点挂掉时,自动选择一个最优的从节点切换为主节点。客户端来连接 Redis 集群时,会首先连接 Sentinel,通过 Sentinel 来查询主节点的地址,然后再去连接主节点进行数据交互。当主节点发生故障时,客户端会重新向 Sentinel 要地址,Sentinel 会将最新的主节点地址告诉客户端。因此应用程序无需重启即可自动完成主从节点切换。

总结缺点:

1)部署麻烦:哨兵模式的配置相对复杂,需要管理和维护多个哨兵节点以及与它们关联的 Redis 服务器。调试和故障排除也可能变得更加困难。

2)数据一致性:哨兵模式下的故障转移是异步进行的,这意味着在发生主服务器故障时,可能会有一段时间内的数据丢失。因此,在一些对数据一致性要求非常高的场景下,哨兵模式可能无法满足需求。

3)难以在线扩容的缺点,Redis的容量受限于单机配置

4)延迟增加:当主服务器故障时,哨兵节点需要通过选举机制选择新的主服务器,并通知其他从服务器切换到新的主服务器。这个过程需要时间(至少十几秒),会导致系统的延迟增加。

5)单点故障:哨兵节点是集群的核心,,它们负责监控主服务器和从服务器的状态,并执行故障转移操作。然而,如果哨兵节点本身发生故障,整个系统的可用性将会受到影响。

哨兵模式应用

Redis Sentinel 哨兵模式适合于在 Linux 系统中使用,所以下面的应用都基于 Ubuntu 实现。

  1. 安装SENTINEL
    Sentinel 需要作为插件单独安装,安装方式如下:

    sudo apt install redis-sentinel
    
  2. 搭建主从模式

    接下来,在本地环境使用主从模式搭建一个拥有三台服务器的 Redis 集群,命令如下所示:

    启动6379的redis服务器作为master主机:
    sudo /etc/init.d/redis-server start启动6380的redis服务器,设置为6379的slave:
    redis-server --port 6380
    $ redis-cli -p 6380
    127.0.0.1:6380> slaveof 127.0.0.1 6379
    OK启动6381的redis服务器,设置为6379的salve
    redis-server --port 6381
    $ redis-cli -p 6381
    127.0.0.1:6381> slaveof 127.0.0.1 6379
    
  1. 配置SENTINEL哨兵
    首先新建 sentinel.conf 文件,并对其进行配置,如下所示:
    port 26379
    Sentinel monitor biancheng 127.0.0.1 6379 1
    
    配置文件说明如下:
    	port 26379 # sentinel监听端口,默认是26379,可以更改
    sentinel monitor <master-name> <ip> <redis-port> <quorum>第二个配置项表示:让 sentinel 去监控一个地址为 ip:port 的主服务器,这里的 master-name 可以自定义;<quorum> 是一个数字,表示当有多少个 sentinel 认为主服务器宕机时,它才算真正的宕机掉,通常数量为半数或半数以上才会认为主机已经宕机,<quorum> 需要根据 sentinel 的数量设置。
  1. 启动sentienl哨兵

    方式一: 
    redis-sentinel sentinel.conf
    方式二: 
    redis-server sentinel.conf --sentinel
    

    如果您想开启多个哨兵,只需配置要多个 sentinel.conf 文件即可,一个配置文件开启一个。

  2. 停止主服务器服务

    下面模拟主服务意外宕机的情况,首先直接将主服务器的 Redis 服务终止,然后查看从服务器是否被提升为了主服务器。执行以下命令:

    #终止master的redis服务
    `sudo /etc/init.d/redis-server stop`执行完上述命令,您会发现 6381 称为了新的 master,而其余节点变成了它的从机,执行命令验证:127.0.0.1:6381> set webname www.biancheng.net
    OK
    

    哨兵的配置文件 sentinel.conf 也发生了变化:

    # port 26379
    # sentinel myid 4c626b6ff25dca5e757afdae2bd26a881a61a2b2
    # Generated by CONFIG REWRITE
    dir "/home/biancheng"
    maxclients 4064
    sentinel myid 4c626b6ff25dca5e757afdae2bd26a881a61a2b2
    sentinel monitor biancheng 127.0.0.1 6379 1
    sentinel config-epoch biancheng 2
    sentinel leader-epoch biancheng 2
    sentinel known-slave biancheng 127.0.0.1 6379
    sentinel known-slave biancheng 127.0.0.1 6380
    sentinel known-slave biancheng 127.0.0.1 6381
    port 26379
    sentinel current-epoch 2
    
sentinel.conf配置项

下面对 Sentinel 配置文件的其他配置项做简单说明:

sentinel配置文件说明
配置项参数类型说明
dir文件目录哨兵进程服务的文件存放目录,默认为 /tmp。
port端口号启动哨兵的进程端口号,默认为 26379。
sentinel down-after-milliseconds<服务名称><毫秒数(整数)>在指定的毫秒数内,若主节点没有应答哨兵的 PING 命令,此时哨兵认为服务器主观下线,默认时间为 30 秒。
sentinel parallel-syncs<服务名称><服务器数(整数)>指定可以有多少个 Redis 服务同步新的主机,一般而言,这个数字越小同步时间越长,而越大,则对网络资源要求就越高。
sentinel failover-timeout<服务名称><毫秒数(整数)>指定故障转移允许的毫秒数,若超过这个时间,就认为故障转移执行失败,默认为 3 分钟。
sentinel notification-script<服务名称><脚本路径>脚本通知,配置当某一事件发生时所需要执行的脚本,可以通过脚本来通知管理员,例如当系统运行不正常时发邮件通知相关人员。
sentinel auth-pass <服务器名称><密码>若主服务器设置了密码,则哨兵必须也配置密码,否则哨兵无法对主从服务器进行监控。该密码与主服务器密码相同。

REF

https://zhuanlan.zhihu.com/p/615864640

相关文章:

Redis系列-四种部署方式-单机部署+主从模式+哨兵模式【7】

目录 Redis系列-四种部署方式-单机部署主从模式【7】redis-四种部署模式单机模式主从模式数据同步的方式全量数据同步增量数据同步 Redis哨兵模式总结缺点&#xff1a;哨兵模式应用sentinel.conf配置项 REF 个人主页: 【⭐️个人主页】 需要您的【&#x1f496; 点赞关注】支持…...

Webpack 的作用和工作原理是什么?

Webpack 是一个现代的静态模块打包工具&#xff0c;它的作用是将前端应用程序的各种资源&#xff08;如 JavaScript、CSS、图片等&#xff09;视为模块&#xff0c;并将它们打包成可以在浏览器中运行的静态文件。它的主要功能包括模块打包、资源优化、代码分割、加载器转换等。…...

ros1 实现Server端自定义四 Topic模式控制海龟运动

一、服务模型 Server端本身是进行模拟海龟运动的命令端&#xff0c;它的实现是通过给海龟发送速度&#xff08;Twist&#xff09;的指令&#xff0c;来控制海龟运动&#xff08;本身通过Topic实现&#xff09;。 Client端相当于海龟运动的开关&#xff0c;其发布Request来控制…...

IntelliJ IDEA 2023.2.1 (Ultimate Edition) 版本 Git 如何找回被 Drop Commit 的提交记录

本心、输入输出、结果 文章目录 IntelliJ IDEA 2023.2.1 (Ultimate Edition) 版本 Git 如何找回被 Drop Commit 的提交记录前言查询 reflog 日志通过 Git Reset HEAD (hard) 找回已经 Drop Commit 的提交记录Git Reset HEAD (hard) 模式和 mixed 模式有啥区别git reset --h…...

C# 压缩PDF文件

PDF 文件可以包含文本、图片及各种媒体元素&#xff0c;但如果文件太大则会影响传输效果同时也会占用过多磁盘空间。通过压缩PDF文件&#xff0c;能够有效减小文件大小&#xff0c;从而提高传输效率并节省存储空间。想要通过C#代码快速有效地压缩 PDF 文件&#xff0c;下面是实…...

JS点击图片指定对象变色两种方法

要求&#xff1a;点击上面的颜色实现下面的图像变成相同的颜色 难点&#xff1a;对于js函数的this对象不太清楚如何传递 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>changeColor</title>&l…...

什么是浏览器指纹?指纹浏览器如何避免浏览器指纹的追踪识别?

在做独立站跨境电商的过程中&#xff0c;海外社交媒体平台已成为我们必不可少的交易渠道。但是&#xff0c;由于各大平台对账号管理极其严格&#xff0c;对账户进行严密监控也成为了常态。这当然与浏览器指纹识别有关&#xff0c;今天龙哥就给大家科普一下什么是浏览器指纹&…...

uni-app 、Spring Boot 、ant Design 打造的一款跨平台包含小说(仿真翻页、段落听书)、短视频、壁纸等功能含完备后台管理的移动应用

简介 咪哩快看&#xff0c;为用户提供优质阅读&#xff0c;短视频&#xff0c;共同记录美好生活的移动应用&#xff0c;并含有一套完备的后台管理体系&#xff0c;助力开发者快速数字化&#xff0c;开启你的财富之门&#xff01; 官网&#xff1a; https://miliqkdoc.motopa.…...

STM32-EXTI中断

EXTI简介 EXTI&#xff08;Extern Interrupt&#xff09;外部中断 EXTI可以监测指定GPIO口的电平信号&#xff0c;当其指定的GPIO口产生电平变化时&#xff0c;EXTI将立即向NVIC发出中断申请&#xff0c;经过NVIC裁决后即可中断CPU主程序&#xff0c;使CPU执行EXTI对应的中断程…...

2023云栖大会,Salesforce终敲开中国CRM市场

2015年被视为中国CRM SaaS元年&#xff0c;众多CRM SaaS创业公司和厂商在Salesforce的榜样作用下涌入了CRM SaaS赛道。在全球市场&#xff0c;Salesforce是CRM SaaS领域的领导厂商&#xff0c;连续多年占据了全球CRM SaaS第一大厂商地位。然而&#xff0c;Salesforce作为业务类…...

工业镜头接口类型

现有产品主要有以下接口 1、C:最常见的工业相机接口&#xff0c;受限于接口物理尺寸大小&#xff0c;最大靶面目前是4/3” 2、M42:M421.0,2k和4k线阵相机使用 3、M58S:M580.75,大靶面相机使用&#xff0c;可以转C(限于CH080相机&#xff0c;靶面4/3”)&#xff0c;可以转F,可以…...

生产环境中oracle dba权限检查和回收相关命令汇总

一、oracle dba权限检查和回收的作用和意义 在Oracle数据库生产环境中&#xff0c;回收oracle dba权限的作用和意义重大&#xff0c;具体表现在以下三方面&#xff1a; 安全性&#xff1a;回收赋权检查和回收可以确保数据库中的权限控制得到有效管理。通过检查和回收权限&…...

实现微信转账到零钱经验

最近写微信转账到零钱的功能。 微信 商家转账到零钱 一-CSDN博客 微信 商家转账到零钱 二-CSDN博客 除了基本接口处理&#xff0c;也要兼顾系统财务安全&#xff0c;和异常处理情况。中心思想就是实现功能的同时&#xff0c;别给自己找事…… 本次开发在原有基础上二开。采…...

SpringCloud——负载均衡——OpenFeign

Feign是一个声明式的客户端接口&#xff0c;相比RestTemplate&#xff0c;更好的简化了微服务之间的调用方式。而且Feign默认集成了Ribbon&#xff0c;可以实现负载均衡。 1.OpenFeign与Feign OpenFeign在Feign的基础上支持SpringMVC的注解。OpenFeign的FeignClient可以解析Re…...

力扣370周赛

力扣第370场周赛 找到冠军 I 答案即入度为0的点 class Solution { public:int findChampion(vector<vector<int>>& grid) {vector<int>d(1005);int n grid.size() , m grid[0].size();for(int i 0 ; i < n ; i ){for(int j 0 ; j < m ; j )…...

EMNLP2023 | 让模型学会将提示插入到合适的中间层

深度学习自然语言处理 原创作者&#xff1a;cola 现有的提示微调方法基本是人工选择提示层&#xff0c;而人工选择将提示插入到哪些层次并非一定合理&#xff0c;这导致了很大程度上限制提示微调发挥潜能。我们的模型(SPT)可以让模型自己学习应该在哪些中间层插入提示&#xff…...

【PG】PostgreSQL单机部署(简洁命令版)

目录 1 下载安装包 2 上传至需要安装的服务器 3 服务器安装所需依赖包 4 解压安装包 5 配置安装 6 创建用户 7 创建目录修改权限 8 设置环境变量 9 设置共享库 10 初始化 11 启动数据库 12 关闭数据库 13 查看数据库状态 14 连接数据库 1 下载安装包 通过下载…...

AI:69-基于深度学习的音乐推荐

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌在这个漫长的过程,中途遇到了不少问题,但是…...

php 使用phpoffice/phpspreadsheet拓展实现导出图片

基础操作参考&#xff1a;https://blog.csdn.net/huaweichenai/article/details/95994006 文档地址&#xff1a;https://phpspreadsheet.readthedocs.io/ github地址&#xff1a;https://github.com/PHPOffice/PhpSpreadsheet 导出插入图片主要使用\PhpOffice\PhpSpreadshee…...

几种解决mfc140.dll文件缺失的方法,电脑提示mfc140.dll怎么办

电脑提示mfc140.dll缺失&#xff0c;如果你不去处理的话&#xff0c;那么你的程序游戏什么都是启动不了的&#xff0c;如果你想知道有什么方法可以解决那么可以参考这篇文章进行解决&#xff0c;今天给大家几种解决mfc140.dll文件缺失的方法。电脑提示mfc140.dll也不用担心解决…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...