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

news2024/12/26 11:03:27

目录

  • 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

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

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

相关文章

geoserver发布同一字段的多值渲染

Geoserver之同一字段的多值渲染 有时候我们需要对一个shp的某一字段值中的不同值进行区分展示&#xff0c;但是一般的渲染都是按照统一图层展示的&#xff0c;因此为了更好的效果&#xff0c;我们选择使用uDig等工具处理。 文章目录 Geoserver之同一字段的多值渲染前言一共是分…

【HarmonyOS】HarmonyOS Test测试用例中一些断言API的使用

【关键词】 单元测试框架、HarmonyOS Test、assertThrowError、assertFail、assertEqual 【测试代码及测试结果展示】 这里以新建API9工程自动生成的ohosTest来编写单元测试代码。 1、 测试代码&#xff1a; import { describe, it, expect } from ohos/hypium import abil…

本地电脑如何连接使用腾讯云服务器

如何连接使用腾讯云服务器 在自己的电脑上&#xff0c;单击 &#xff0c;在搜索中&#xff0c;输入 mstsc&#xff0c;按 Enter&#xff0c;打开远程桌面连接对话框。如下图所示&#xff1a; 在“计算机”后面&#xff0c;输入 服务器的公网 IP&#xff0c;就是上节大图左侧…

十三、W5100S/W5500+RP2040树莓派Pico<FTP Server>

文章目录 1. 前言2. 相关简介2.1 简述2.2 原理2.3 优点2.4 应用 3. WIZnet以太网芯片4. FTP Server运行测试4.1 程序流程图4.2 测试准备4.3 连接方式4.4 相关代码4.5 测试现象 5. 注意事项6. 相关链接 1. 前言 在当今的信息化时代&#xff0c;互联网已经成为人们生活、工作不可…

7天入门python系列之第二天python 基础语法

第2天主要是学习Python的基础知识 编者打算开一个python 初学主题的系列文章&#xff0c;用于指导想要学习python的同学。关于文章有任何疑问都可以私信作者。对于初学者想在7天内入门Python&#xff0c;这是一个紧凑的学习计划。但并不是不可完成的。第二天开始python 基础知…

查分小程序,教学大作用

数字化时代&#xff0c;技术已经深深的改变了我们的生活和工作方式。当然&#xff0c;教育领域也不例外。如果你是一位老师&#xff0c;你可能会想知道如何利用这些技术工具来提高学生的学习体验和成绩。今天&#xff0c;我们就来聊聊如何用各种代码、Excel等工具&#xff0c;打…

Redis系列-Redis集群模式【8】

目录 Redis系列-Redis集群模式【8】特性Redis的数据分区虚拟槽分区Redis虚拟槽分区的特点客户端如何定位目标节点&#xff1f; 故障转移故障检测故障转移 Redis一致性保证Redis集群的功能限制部署命令REF 个人主页: 【⭐️个人主页】 需要您的【&#x1f496; 点赞关注】支持 &…

LeetCode148.排序链表

看完题目的想法是&#xff0c;直接把所有节点的值都遍历出来放进优先队列里面&#xff0c;然后从头节点遍历一次&#xff0c;每次把优先队列poll()的值赋给节点的val即可&#xff0c;说实话&#xff0c;想完还觉得估计有问题怎么可能这么简单&#xff0c;但是不管了&#xff0c…

怎么调整excel表里面所有单元格中,某个相同字体大小,单元格中其他文字大小不变?

环境: excel 2021 python3.8 问题描述: 怎么调整excel表里面所有单元格里面1这个字体大小,单元格里面其他文字不变? excel表里面。很多单元格都有1,1和文字都是10号字体,现在想把全部1字字体调整为16号其他字大小都不变 解决方案: 一、使用python来实现,经过测…

CocosCreator3.8原生引擎源码研究

1. Cocos Creator引擎架构图 2. 原始引擎源码流程图 图还在细化扩充&#xff0c;后续逐渐更新。。。

【学习笔记】MySQL死锁及热点行问题

目录 案例优化思路死锁的一些记录笔记热点行问题 本文记录下关于MySQL优化的学习和一点点思考。 案例 一个并发比较大的下单接口&#xff1b; 包括 step1 扣减商品库存step2 生成订单数据step3 记录操作记录 伪代码如下&#xff0c;底层使用的是MySQL数据库&#xff0c;单体服务…

MySQL 8.0 Clone 备份恢复演练

文章目录 前言1. 恢复目标2. 环境说明3. 克隆数据4. 恢复全量数据5. 注册增量日志6. 应用增量日志 后记 前言 上一篇文章中&#xff0c;我们介绍了使用 Clone 插件进行备份&#xff0c;相关的恢复流程将在本篇文章介绍。 MySQL 8.0 Clone Plugin 详解 恢复增量数据的方法&…

前端瀑布流怎么布局

假设你需要把页面搭建成这样&#xff0c;有两列元素&#xff0c;每个元素宽度一定&#xff0c;高度不一定。如何实现&#xff1f; 这种瀑布流布局有很多实现方式&#xff0c;比如Grid布局。 什么是Grid布局 Grid布局是一种很灵活的布局方式&#xff0c;他把你的页面划分成了很…

[ACTF2020 新生赛]BackupFile 1

题目环境&#xff1a; 好好好&#xff0c;让找源文件是吧&#xff1f;咱们二话不说直接扫它后台 使用dirsearch工具扫描网站后台&#xff08;博主有这个工具的压缩包&#xff0c;可以私聊我领取&#xff09;python dirsearch.py -u http://0d418151-ebaf-4f26-86b2-5363ed16530…

ZYNQ_project:key_beep

通过按键控制蜂鸣器工作。 模块框图&#xff1a; 时序图&#xff1a; 代码&#xff1a; /*1位按键消抖 */ module key_filter (input wire sys_clk ,input wire sys_rst_n ,input wire key_in ,output …

C语言计算1,2,3…100的和

完整代码&#xff1a; // 计算 1&#xff0c;2&#xff0c;3…100 的和。 #include<stdio.h>int main() {int sum0;for (int i 1; i < 100; i){sumi;}printf("1&#xff0c;2&#xff0c;3…100 的和为&#xff1a;%d",sum);return 0; }运行截图&#xff…

【hcie-cloud】【3】华为云Stack规划设计之华为云Stack交付综述【上】

文章目录 前言华为云Stack交付综述交付流程华为云Stack交付流程华为云Stack安装部署流程 交付工具链华为云Stack交付工具链eDesigner - 让解决方案销售更智能eDesigner配置页面 - 基本信息eDesigner配置页面 - 服务及组网配置eDesigner配置页面 - 弹性云服务器/ECSeDesigner配置…

计算机视觉驾驶行为识别应用简述

一、什么是计算机视觉识别&#xff1f; 计算机视觉识别是一种基于图像处理和机器学习的人工智能应用技术&#xff0c;可以用于多个场景。常见应用场景包括人脸识别、场景识别、OCR识别以及商品识别等。今天以咱们国产系统豌豆云为例&#xff0c;为大家梳理一下在车辆驾驶行为中…

如何批量创建文件夹并命名?

如何批量创建文件夹并命名&#xff1f;批量创建文件夹指的是一次性在计算机中创建多个文件夹的操作。通常情况下&#xff0c;用户需要在特定的目录下创建多个具有相似命名规律的文件夹时&#xff0c;可以使用批量创建文件夹的功能&#xff0c;以简化和加快这一过程。这样的功能…

解决kubernetes集群证书过期的问题

现象&#xff1a; 解决办法&#xff1a; 1.在master节点运行&#xff1a; kubeadm alpha certs renew all 2.在master节点运行&#xff1a; rm -f /etc/kubernetes/kubelet.conf && cp /etc/kubernetes/admin.conf /etc/kubernetes/bootstrap-kubelet.conf 3.在maste…