【Redis】Redis高可用之Redis Cluster集群模式详解(Redis专栏启动)

news2024/11/17 7:54:31

📫作者简介:小明java问道之路,2022年度博客之星全国TOP3,专注于后端、中间件、计算机底层、架构设计演进与稳定性建工设优化。文章内容兼具广度深度、大厂技术方案,对待技术喜欢推理加验证,就职于知名金融公司后端高级工程师。

        

📫 热衷分享,喜欢原创~ 关注我会给你带来一些不一样的认知和成长。

        

🏆 2022博客之星TOP3 | CSDN博客专家 | 后端领域优质创作者 | CSDN内容合伙人

🏆 InfoQ(极客邦)签约作者、阿里云专家 | 签约博主、51CTO专家 | TOP红人、华为云享专家

        

🔥如果此文还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主~ 


🍅 文末获取联系 🍅  👇🏻 精彩专栏推荐订阅收藏 👇🏻

专栏系列(点击解锁)

学习路线(点击解锁)

知识定位

🔥Redis从入门到精通与实战🔥

Redis从入门到精通与实战

围绕原理源码讲解Redis面试知识点与实战

🔥MySQL从入门到精通🔥

MySQL从入门到精通

全面讲解MySQL知识与企业级MySQL实战

🔥计算机底层原理🔥

深入理解计算机系统CSAPP

以深入理解计算机系统为基石,构件计算机体系和计算机思维

Linux内核源码解析

围绕Linux内核讲解计算机底层原理与并发

🔥数据结构与企业题库精讲🔥

数据结构与企业题库精讲

结合工作经验深入浅出,适合各层次,笔试面试算法题精讲

🔥互联网架构分析与实战🔥

企业系统架构分析实践与落地

行业最前沿视角,专注于技术架构升级路线、架构实践

互联网企业防资损实践

互联网金融公司的防资损方法论、代码与实践

🔥Java全栈白宝书🔥

精通Java8与函数式编程

本专栏以实战为基础,逐步深入Java8以及未来的编程模式

深入理解JVM

详细介绍内存区域、字节码、方法底层,类加载和GC等知识

深入理解高并发编程

深入Liunx内核、汇编、C++全方位理解并发编程

Spring源码分析

Spring核心七IOC/AOP等源码分析

MyBatis源码分析

MyBatis核心源码分析

Java核心技术

只讲Java核心技术

本文目录

本文目录

本文导读

一、什么是集群模式

1、集群模式的必要性和基本概念

2、集群模式拓扑结构 

二、集群中数据如何分区(Hash Solt)

三、Redis集群的原理

四、Master 节点故障处理方式

五、Redis集群的伸缩(扩容与缩容)

1、集群伸缩原理

2、Gossip协议

总结


本文导读

本文是继,Redis高可用之Cluster主从模式详解、Redis高可用之Sentinel哨兵模式详解 ,的Redis高可用与系列第三篇。

本文主要讲解什么是集群模式,集群模式的必要性、基本概念和拓扑结构,集群中数据Hash Solt分区的原理,节点故障处理方式与集群的伸缩。

一、什么是集群模式

1、集群模式的必要性和基本概念

Sentinel 模式的最大缺点是所有数据都放在一台服务器上,无法横向扩展,为了解决哨兵模式的问题,集群模式应运而生。

主从模式:Redis高可用之Cluster主从模式详解,哨兵模式:Redis高可用之Sentinel哨兵模式详解

如前所述,主从系统有高可用性和分布性问题,哨兵模式只解决了高可用性问题,集群模式可以解决高可用性和分布问题的终极解决方案。 哨兵模式基于主从模式,实现读写分离,它还可以自动切换,系统可用性更高,但是它每个节点存储的数据是一样的,浪费内存,在Redis3.0后开始支持集群模式。

分片集群模式是将一部分数据存储到每个Redis服务器,所有Redis服务器的数据相加形成一个完整的数据(分片集群或者分布式)。它实现了Redis的分布式存储,对数据进行分片,也就是说每台Redis节点上存储不同的内容,来解决在线扩容的问题。所以要形成分片集群,需要路由不同的密钥。一般使用两种通用的路由方案客户端路由(SDK)和服务器路由(Proxy),客户端路由的代表(Redis Cluster),服务器端路由的代表(Codis)。

2、集群模式拓扑结构 

Redis集群由多个Redis节点组成,节点组中是主节点(Master)和从节点(Slave),两者之间的数据是准实时一致的,这是由异步主备复制机制保证的。

如上图所示,一个节点组只有一个主节点,同时可以有0到多个从节点,在这个节点组中,只有主节点为用户提供一些服务,读服务可以由主节点或从节点提供。上图包含三个主节点和对应于主节点的三个从节点。

通常,一组集群至少需要六个节点才能确保完全的高可用性。三个主节点将被分配不同的 slot 插槽(表示数据分区间隔)。当主节点发生故障时,从节点将自动选择出新的主节点继续提供服务。

二、集群中数据如何分区(Hash Solt)

Redis集群模式使用 slots 插槽,一个集群有 16384 个哈希槽将分配给不同的Redis实例。此外,Redis集群模式没有中心节点,每个主节点将保持与其他主节点的连接,节点通过 gossip协议 相互交换信息,同时,每个主节点都具有一个或多个从节点。

当客户端连接到集群时,它直接连接到Redis集群的每个主节点,并根据哈希算法将密钥存储在不同的哈希槽中。例如上图,Redis集群按数据碎片划分的16384个哈希槽,分别存储在三个主节点中:Master1负责哈希槽0~5460、Master2负责哈希槽5461~10922、Master3负责哈希槽10922~16383。

三、Redis集群的原理

Redis集群通过数据分区实现数据的分布式存储(在创建集群时完成),并通过自动故障切换实现高可用性。

Redis集群通常由多个节点组成,设置节点时,节点数至少为6个以确保集群完整且高度可用,每个节点都需要启用和配置 cluster-enabled yes(启动集群),以在集群模式下运行Redis。

节点握手是指以集群模式运行的一组节点通过 Gossip协议 相互通信,以实现对彼此的感知的过程。节点握手是集群之间通信的第一步。客户端启动命令:cluster meet{ip}{port}。节点握手后,Redis节点形成一个多节点集群。

Redis集群将所有数据映射到16384个插槽,每个节点对应几个插槽(必须全部使用),只有当节点分配了时隙时,它才能响应与这些时隙相关联的密钥命令,通过 cluster addslots命令为节点分配插槽。

四、Master 节点故障处理方式

Redis集群中的主节点故障处理模式与哨兵模式类似,但是Redis集群中所有的节点都要承担状态维护的任务。

当一个节点无法成功完成与集群中另一个节点的ping消息通信时,该节点将被标记为主观离线状态,并且信息将被广播到整个集群。

如果节点接收到的节点丢失连接的数量达到集群的大多数,则该节点将被标记为目标脱机状态,并且脱机节点的故障消息将被广播到集群。然后,故障节点将立即从主节点切换到从节点。恢复原始主节点后,它将自动成为新主节点的从节点。如果主节点没有从节点,则集群在发生故障时将不可用。

在投票选举阶段,失败的主节点也计入投票数。假设集群中节点的大小为3个主节点和3个从节点,其中2个主节点部署在一台机器上,当此机器停机时,故障切换将失败,因为从节点无法收集3/2+1个主节点的投票(故障查找链路也会发生)。因此,在部署集群时,所有主节点都需要部署在至少三台物理机器上,以避免单点问题。

五、Redis集群的伸缩(扩容与缩容)

1、集群伸缩原理

扩容与缩容类似,都是先把插槽和数据迁移到其他节点,然后把相应的节点下线。

当新节点添加到集群时,它将与集群中的节点握手,该节点将通过gossip协议将集群中其他节点的信息发送到新节点,新节点将在与这些节点握手后加入集群,然后集群中的节点将加入哈希槽并将其分配给新节点。

2、Gossip协议

Gossip protocol(gossip协议),它的特点是,在节点数量有限的网络中,每个节点都会随机(不是真的随机,而是根据规则选择通信节点)与一些节点通信,在混乱的通信之后,每个节点的状态将在一定时间内达到相同。

Gossip 协议包含多种消息,包括ping(在节点故障发现的时候使用),pong(接收节点回复),meet(在节点握手的时候使用),fail(自动故障转移、下线、故障选举)等等。也有一些缺点,例如数据更新的延迟可能导致集群的某些操作滞后,消息延迟、消息冗余等等。

总结

本文是继,Redis高可用之Cluster主从模式详解、Redis高可用之Sentinel哨兵模式详解 ,的Redis高可用与系列第三篇。

本文主要讲解什么是集群模式,集群模式的必要性、基本概念和拓扑结构,集群中数据Hash Solt分区的原理,节点故障处理方式与集群的伸缩。

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

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

相关文章

nodejs+vue地铁站自动售票系统-火车票售票系统vscode

地铁站自动售票系统主要包括个人中心、地铁线路管理、站点管理、购票信息管理、乘坐管理、用户信息管理等多个模块。它使用的是前端技术:nodejsvueelementui 前后端通讯一般都是采取标准的JSON格式来交互。前端技术:nodejsvueelementui,视图层其实质就是…

MWORKS--系统建模与仿真

MWORKS--系统建模与仿真1 系统定义特征2 系统研究2.1 特点与原则2.2 方法百度百科归纳同元杠归纳3 系统建模与仿真3.1 系统、模型、仿真的关系3.2 系统建模4 建模方法4.1 方法4.2 一般流程4.3 目的5 仿真方法5.1 方法5.2 流程参考1 系统定义 系统是由相互作用相互依赖的若干组…

pip离线安装windows版torch

文章目录前言conda创建虚拟环境安装torchtorch官网在线安装离线手动安装测试是否安装成功后记前言 学习的时候遇到几个机器学习相关的项目,由于不同的项目之间用到的依赖库不太一样,于是想利用conda为不同的项目创建不同的环境方便管理和运行&#xff0…

01- 机器学习经典流程 (中国人寿保费项目) (项目一)

删除特征: data data.drop([region, sex], axis1)特征数据调整: data.apply( ) # 体重指数,离散化转换,体重两种情况:标准、肥胖 def convert(df,bmi):df[bmi] fat if df[bmi] > bmi else standardreturn df data data.apply(convert, …

Hadoop技术浅析

一、什么是HadoopHadoop是一个适合大数据存储和计算的分布式框架Hadoop广义狭义之分狭义上Hadoop指Hadoop框架广义上随着大数据技术的发展,Hadoop也发展成了一个生态圈,包含:Sqoop:Sqoop是一款开源的工具,主要用于在Ha…

洛谷2月普及组(月赛)

🌼小宇(治愈版) - 刘大拿 - 单曲 - 网易云音乐 OI赛制且难度对标蓝桥杯省赛(😥真难,第三题做了几百年,第四题只敢骗骗分) 花了10块钱🙃 买官网的思路,结果…

linux004之 vi和vim编辑器

vi、vim编辑器简介: 是linux中的文本编辑器,用来在linux系统中查看或编辑文本文件的命令, 相当于windows文本编辑器。 vi和vim的区别, vim是增强版, 功能相比vi是增强了。功能都查不多,用哪个都行&#xff…

数据库高并发和高可用方案

依旧主要参考沈剑大佬的多篇博文,以及数位网友的优秀分享,文末是完整参考。 1、高可用方案(HA,High Availability) 缓存是通过双写和双读主备、或者利用缓存的集群数据同步,故障自动转移来实现的 数据库的读是通过读写分离(MHA&am…

06-PS中的四种蒙版

Photoshop中的蒙版就是遮罩的意思,主要作用就是将其所在的图层,把不同的明暗度转化成相应的透明度。黑色为完全透明,灰色为半透明,白色为完全不透明。添加蒙版有便于灵活修改,不影响图层原貌。PS蒙版有四类&#xff1a…

【状态估计】基于二进制粒子群优化 (BPSO) 求解最佳 PMU优化配置研究【IEEE30、39、57、118节点】(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Mybatis与微服务注册

目录 一,Springboot整合MybatisPlus 创建商品微服务子模块 二,SpringBoot整合Freeamarker 三、SpringBoot整合微服务 &gateway&nginx 整合微服务之商品服务zmall-product 创建并配置网关gateway服务 安装配置SwitchHosts 安装配置Windo…

【大数据hive】hive 函数使用详解

一、前言 在任何一种编程语言中,函数可以说是必不可少的,像mysql、oracle中,提供了很多内置函数,或者通过自定义函数的方式进行定制化使用,而hive作为一门数据分析软件,随着版本的不断更新迭代&#xff0c…

代码随想录第58天(动态规划):● 392.判断子序列 ● 115.不同的子序列

一、判断子序列 题目描述: 思路和想法: 这道题目还是最长公共子序列的拓展,只是这里进行删除的一定是t字符串,当不相等时,dp[i][j] dp[i][j - 1];其余基本一致。当最长公共子序列个数等s.size()时&#x…

Leetcode力扣秋招刷题路-0050

从0开始的秋招刷题路,记录下所刷每道题的题解,帮助自己回顾总结 50. Pow(x, n) 实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即,xn )。 示例 1: 输入:x 2.00000, n 10 输出&am…

N字形变换-力扣6-java

一、题目描述将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:P A H NA P L S I I GY I R之后,你的输出需要从左往右逐行读…

大神之路-起始篇 | 第11章.计算机科学导论之【数据压缩】学习笔记

欢迎关注「全栈工程师修炼指南」公众号点击 👇 下方卡片 即可关注我哟!设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习!涉及 企业运维、网络安全、应用开发、物联网、人工智能、大数据 学习知识“ 花开堪折直须折,莫待无花空折…

【深度学习】卷积神经网络

1 卷积神经网络(CNN)可以做什么? 检测任务分类与检索超分辨率重构:将图像训练的更清晰医学任务等无人驾驶人脸识别 2 用GPU:图像处理单元 比CPU块一百倍以上 3 卷积神经网络与传统神经网络的区别 传统神经网络&…

从证券软件开发到大数据开发,薪资涨幅一倍多,我经历了什么?

点击上方 "大数据肌肉猿"关注, 星标一起成长点击下方链接,进入高质量学习交流群今日更新| 1052个转型案例分享-大数据交流群分享学习群一位同学的大数据转型经历,他17年毕业后培训了几个月去了杭州一家证券公司做外包,用的是古老的…

有限元分析学习一

系列文章目录 有限元分析学习一 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录系列文章目录前言一、有限元方法的简单介绍1.1 有限元的基础概念1.2 有限元软件发展历史1.3 有限元软件二、弹性力学的简单介绍2.1.…

【Spring】注解实现IOC操作,你理解了吗?

作者:狮子也疯狂 专栏:《spring开发》 坚持做好每一步,幸运之神自然会驾凌在你的身上 专栏推荐:写文章刚刚起步,各个专栏的知识点后续会补充完善,不断更新好文,希望大 家支持一下。 专栏名字El…