Redis系列-四种部署方式-单机部署+主从模式+哨兵模式【7】
目录
- Redis系列-四种部署方式-单机部署+主从模式【7】
- redis-四种部署模式
- 单机模式
- 主从模式
- 数据同步的方式
- 全量数据同步
- 增量数据同步
- Redis哨兵模式
- 总结缺点:
- 哨兵模式应用
- sentinel.conf配置项
- REF
个人主页: 【⭐️个人主页】
需要您的【💖 点赞+关注】支持 💯
Redis系列-四种部署方式-单机部署+主从模式【7】
redis-四种部署模式
- 单机模式
- 主从模式
- 哨兵模式
- 集群模式
为什么要搞这么多部署模式,这就要涉及到高可用性
了。
高可用是分布式的概念
Redis的高可用性是指在Redis集群中,当主节点宕机了,通过切换备用节点顶替它继续运行,保持系统正常运行且数据可靠性不受影响。
通过实现Redis的高可用性,可以提供以下几个主要优势
-
避免单点故障
:通过配置和设置多个Redis节点,如果其中一个节点发生故障,其他节点可以接替工作,避免了单点故障对整个系统的影响。 -
数据冗余和复制
:通过数据的复制和持久化备份,Redis能够在主节点出现故障时,自动切换到备用节点,并恢复数据,确保数据的持久性和可用性。 -
故障自动检测和故障转移
:Redis的高可用方案通常具备故障检测和自动故障转移的功能,能够监控节点的健康状态,并在节点故障时自动将从节点升级为主节点。
redis的高可用主要完成以下工作
-
数据同步
。主节点和从节点(备用节点)之间的数据需要进行同步。 -
主从切换
。若主节点宕机,需要有一种机制可以切换从节点变成主节点。
单机模式
不是高可用的,一般用在测试或开发节点。
本质上就是 单点redis服务提供服务给业务服务使用。一旦宕机或停机,业务服务等依赖服务立刻不能使用。
直接再服务器上部署一个redis服务,并提供给外部使用。
服务个数: 1
主从模式
主从模式是在单机模式的基础上添加了数据备份
的功能
主从复制
是数据同步
方式,解决了单点故障
的问题,但不能保证高可用(是高可用的基础)。
主要用来实现 redis 数据的可靠性
,防止主 redis 所在磁盘损坏,造成数据永久丢失。
在主从模式中,Redis节点被分为
主节点
和从节点
。
主节点负责处理所有的写操作,
而从节点则复制主节点的数据,并负责处理读操作。
主从模式的主要优点
是提高了可靠性
和可扩展性
。
如果主节点发生故障,可以使用从节点来恢复数据。
主从之间采用异步复制
的方式,以及采用读写分离
的方式
主节点(master)可以进行读写
操作,从节点(replica)一般是只读
。也就是说,所有的数据修改只在主节点上进行,然后将最新的数据同步给节点,这样就使得主从服务器的数据是一致的。
需要注意的是:
1)主从复制无法提供高可用和数据保护
能力,因为主节点发生故障时,需要手动进行故障转移。
2)从节点主动
向主节点建立连接,从节点主动
同步主节点的数据
数据同步的方式
全量数据同步
-
全量数据同步
是在从节点刚加入
复制集群或者需要进行完整数据更新时
执行的同步过程。 -
它的目标是
将主节点上的所有数据完整地同步到从节点
。全量数据同步的过程是将
主节点
上的所有内存数据通过快照
(RDB文件)方式发送给从节点
,从节点
接收到快照
后将其加载
到自己的数据库中。 -
全量数据同步
会消耗较大的网络带宽和时间
,特别是在数据集较大的情况
下。并且在全量数据同步过程中,从节点
无法处理外部的读取请求,因为它正在重新加载大量的数据。
增量数据同步
-
增量数据同步
是在全量数据同步完成
后,用于保持主从节点之间数据的一致性
。 -
它通过记录
主节点
上的增量写命令
(例如AOF日志文件)并将其发送给从节点
来实现。增量数据同步的过程是在主节点上记录所有的写操作,并将这些操作记录传输给从节点,从节点接收到后执行这些操作以保持与主节点的数据一致。
-
增量数据同步具有
实时性
,可以减少数据同步
的延迟
从数据库会记录一个偏移量offset(即记录同步到哪里了)。当从数据库断开重连,主数据库补发丢失数据到从数据库。此时如果offset在环形缓冲区当中,从数据库就会将offset后面的那部分数据同步过来,增量同步;如果offset不在环形缓存区中,说明数据过期太久,就会全量同步,把主数据库内部所有数据都同步过来。
Redis哨兵模式
可以完成高可用性
的要求.
哨兵模式是一种特殊的模式,Redis 为其提供了专属的哨兵命令,它是一个独立的进程,能够独立运行。下面使用 Sentinel
搭建 Redis 集群,基本结构图如下所示
在上图过程中,哨兵主要有两个重要作用:
- 第一:哨兵节点会以
每秒一次
的频率对每个 Redis 节点发送PING
命令,并通过 Redis 节点的回复来判断其运行状态。 - 第二:当哨兵监测到主服务器发生故障时,会自动在从节点中选择一台将机器,并其提升为主服务器,然后使用
PubSub 发布订阅模式
,通知其他的从节点
,修改配置文件,跟随新的主服务器。
在实际生产情况中,Redis Sentinel 是集群的高可用的保障,为避免 Sentinel 发生意外,它一般是由 3~5 个节点组成,这样就算挂了个别节点,该集群仍然可以正常运转。
上图所示,多个哨兵之间也存在互相监控,这就形成了多哨兵模式,现在对该模式的工作过程进行讲解,介绍如下:
-
主观下线
主观下线
,适用于主服务器
和从服务器
。如果在规定的时间内(配置参数:down-after-milliseconds),Sentinel 节点没有收到目标服务器的有效回复,则判定该服务器为“主观下线”。
比如 Sentinel1 向主服务发送了PING命令,在规定时间内没收到主服务器PONG回复,则 Sentinel1 判定主服务器为“主观下线”。.
-
客观下线
客观下线
,只适用于主服务器
。 Sentinel1 发现主服务器出现了故障,它会通过相应的命令,询问其它 Sentinel 节点对主服务器的状态判断。如果超过半数
的Sentinel 节点
认为主服务器 down 掉,则 Sentinel1 节点判定主服务为“客观下线”。 -
投票选举
投票选举
,所有 Sentinel 节点
会通过投票机制
,按照谁发现谁去处理
的原则,选举 Sentinel1 为领头节点去做Failover
(故障转移)操作。Sentinel1 节点则按照一定的规则在所有从节点中选择一个最优的作为主服务器,然后通过发布订功能通知其余的从节点(slave)更改配置文件,跟随新上任的主服务器(master)。至此就完成了主从切换
的操作。
对上对述过程做简单总结:
Sentinel 负责监控主从节点的“健康”状态。当主节点挂掉时,自动选择一个最优的从节点切换为主节点。客户端来连接 Redis 集群时,会首先连接 Sentinel,通过 Sentinel 来查询主节点的地址,然后再去连接主节点进行数据交互。当主节点发生故障时,客户端会重新向 Sentinel 要地址,Sentinel 会将最新的主节点地址告诉客户端。因此应用程序无需重启即可自动完成主从节点切换。
总结缺点:
1)部署麻烦:哨兵模式的配置相对复杂,需要管理和维护多个哨兵节点以及与它们关联的 Redis 服务器。调试和故障排除也可能变得更加困难。
2)数据一致性:哨兵模式下的故障转移是异步进行的,这意味着在发生主服务器故障时,可能会有一段时间内的数据丢失。因此,在一些对数据一致性要求非常高的场景下,哨兵模式可能无法满足需求。
3)难以在线扩容的缺点,Redis的容量受限于单机配置
4)延迟增加:当主服务器故障时,哨兵节点需要通过选举机制选择新的主服务器,并通知其他从服务器切换到新的主服务器。这个过程需要时间(至少十几秒),会导致系统的延迟增加。
5)单点故障:哨兵节点是集群的核心,,它们负责监控主服务器和从服务器的状态,并执行故障转移操作。然而,如果哨兵节点本身发生故障,整个系统的可用性将会受到影响。
哨兵模式应用
Redis Sentinel 哨兵模式适合于在 Linux 系统中使用,所以下面的应用都基于 Ubuntu 实现。
-
安装SENTINEL
Sentinel 需要作为插件单独
安装,安装方式如下:sudo apt install redis-sentinel
-
搭建主从模式
接下来,在本地环境使用主从模式搭建一个拥有三台服务器的 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
配置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 的数量设置。
-
启动sentienl哨兵
方式一: redis-sentinel sentinel.conf 方式二: redis-server sentinel.conf --sentinel
如果您想开启多个哨兵,只需配置要多个 sentinel.conf 文件即可,一个配置文件开启一个。
-
停止主服务器服务
下面模拟主服务意外宕机的情况,首先直接将主服务器的 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哨兵模式总结缺点:哨兵模式应用sentinel.conf配置项 REF 个人主页: 【⭐️个人主页】 需要您的【💖 点赞关注】支持…...
Webpack 的作用和工作原理是什么?
Webpack 是一个现代的静态模块打包工具,它的作用是将前端应用程序的各种资源(如 JavaScript、CSS、图片等)视为模块,并将它们打包成可以在浏览器中运行的静态文件。它的主要功能包括模块打包、资源优化、代码分割、加载器转换等。…...

ros1 实现Server端自定义四 Topic模式控制海龟运动
一、服务模型 Server端本身是进行模拟海龟运动的命令端,它的实现是通过给海龟发送速度(Twist)的指令,来控制海龟运动(本身通过Topic实现)。 Client端相当于海龟运动的开关,其发布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 文件可以包含文本、图片及各种媒体元素,但如果文件太大则会影响传输效果同时也会占用过多磁盘空间。通过压缩PDF文件,能够有效减小文件大小,从而提高传输效率并节省存储空间。想要通过C#代码快速有效地压缩 PDF 文件,下面是实…...

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

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

uni-app 、Spring Boot 、ant Design 打造的一款跨平台包含小说(仿真翻页、段落听书)、短视频、壁纸等功能含完备后台管理的移动应用
简介 咪哩快看,为用户提供优质阅读,短视频,共同记录美好生活的移动应用,并含有一套完备的后台管理体系,助力开发者快速数字化,开启你的财富之门! 官网: https://miliqkdoc.motopa.…...

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

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

工业镜头接口类型
现有产品主要有以下接口 1、C:最常见的工业相机接口,受限于接口物理尺寸大小,最大靶面目前是4/3” 2、M42:M421.0,2k和4k线阵相机使用 3、M58S:M580.75,大靶面相机使用,可以转C(限于CH080相机,靶面4/3”),可以转F,可以…...
生产环境中oracle dba权限检查和回收相关命令汇总
一、oracle dba权限检查和回收的作用和意义 在Oracle数据库生产环境中,回收oracle dba权限的作用和意义重大,具体表现在以下三方面: 安全性:回收赋权检查和回收可以确保数据库中的权限控制得到有效管理。通过检查和回收权限&…...
实现微信转账到零钱经验
最近写微信转账到零钱的功能。 微信 商家转账到零钱 一-CSDN博客 微信 商家转账到零钱 二-CSDN博客 除了基本接口处理,也要兼顾系统财务安全,和异常处理情况。中心思想就是实现功能的同时,别给自己找事…… 本次开发在原有基础上二开。采…...
SpringCloud——负载均衡——OpenFeign
Feign是一个声明式的客户端接口,相比RestTemplate,更好的简化了微服务之间的调用方式。而且Feign默认集成了Ribbon,可以实现负载均衡。 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 | 让模型学会将提示插入到合适的中间层
深度学习自然语言处理 原创作者:cola 现有的提示微调方法基本是人工选择提示层,而人工选择将提示插入到哪些层次并非一定合理,这导致了很大程度上限制提示微调发挥潜能。我们的模型(SPT)可以让模型自己学习应该在哪些中间层插入提示ÿ…...
【PG】PostgreSQL单机部署(简洁命令版)
目录 1 下载安装包 2 上传至需要安装的服务器 3 服务器安装所需依赖包 4 解压安装包 5 配置安装 6 创建用户 7 创建目录修改权限 8 设置环境变量 9 设置共享库 10 初始化 11 启动数据库 12 关闭数据库 13 查看数据库状态 14 连接数据库 1 下载安装包 通过下载…...

AI:69-基于深度学习的音乐推荐
🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌在这个漫长的过程,中途遇到了不少问题,但是…...
php 使用phpoffice/phpspreadsheet拓展实现导出图片
基础操作参考:https://blog.csdn.net/huaweichenai/article/details/95994006 文档地址:https://phpspreadsheet.readthedocs.io/ github地址:https://github.com/PHPOffice/PhpSpreadsheet 导出插入图片主要使用\PhpOffice\PhpSpreadshee…...

几种解决mfc140.dll文件缺失的方法,电脑提示mfc140.dll怎么办
电脑提示mfc140.dll缺失,如果你不去处理的话,那么你的程序游戏什么都是启动不了的,如果你想知道有什么方法可以解决那么可以参考这篇文章进行解决,今天给大家几种解决mfc140.dll文件缺失的方法。电脑提示mfc140.dll也不用担心解决…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...

uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...