Java面试八股之Redis集群Cluster

  1. Redis集群Cluster

Redis Cluster是一种基于数据分片(Sharding)的分布式缓存和存储系统,它实现了数据的水平扩展、高可用性和自动故障转移。以下是对Redis Cluster模式详细实现流程的描述:

1. 初始化与配置

部署节点:在不同的服务器上部署多个Redis节点,每个节点既可以作为主节点也可以作为从节点。

配置集群模式:为每个节点启用Cluster模式,指定Cluster所需的端口(通常为主节点端口+10000,用于节点间通信)以及Cluster配置文件(如redis.conf中的相关参数)。

分片规划:决定集群的总槽数量(通常为16384),并规划每个节点负责的槽范围。每个键在集群中会被映射到一个唯一的槽位,根据槽位找到对应的节点进行操作。

2. 创建集群

手动创建:使用redis-trib.rb(Ruby脚本)或redis-cli的cluster子命令,按照规划好的槽位分布,将各个节点加入集群。创建过程中,工具会自动处理节点间的握手、槽位分配和配置同步。

自动部署工具:使用第三方自动化部署工具(如Ansible剧本、Kubernetes Operator等)根据配置文件自动创建和配置Redis Cluster。

3. 数据分片与路由

键值到槽位映射:Redis Cluster使用CRC16算法对键进行哈希,然后对总槽数取模,确定键所属的槽位。客户端或中间件在发送命令前,也会使用相同算法计算键的槽位。

客户端路由:客户端(或代理中间件)在连接集群时,获取集群的节点列表和槽位分布信息。当客户端发送命令时,先计算键对应的槽位,再查找拥有该槽位的节点进行连接。如果客户端连接的是错误的节点,节点会返回MOVED或ASK重定向响应,指示客户端转向正确的节点。

4. 节点间通信与数据同步

Gossip协议:节点间通过Gossip协议(一种分布式通信协议)交换集群状态信息,包括节点状态、槽位映射、主从关系等。Gossip协议基于发布/订阅和定期心跳机制,保证信息在集群内的快速传播和一致性。

主从复制:每个主节点都有一个或多个从节点。主节点将写入的数据同步到从节点,从节点以只读模式提供服务。主从复制可以实现数据冗余和读取负载均衡。

5. 故障检测与自动故障转移

心跳检测:节点间通过发送PING命令进行心跳检测,监控对方的存活状态。当节点长时间未响应心跳时,其他节点会将其标记为疑似下线(PFAIL)。

故障确认与投票:当足够数量(取决于配置的quorum)的节点确认同一主节点PFAIL时,该主节点被标记为客观下线(FAIL)。节点间进行投票,决定是否进行故障转移。

故障转移:当选定的某个从节点被提升为主节点后,其他从节点会自动与新主节点建立复制关系。原主节点恢复后,若配置允许,它将自动成为新主节点的从节点。

客户端重定向:故障转移过程中,客户端收到的MOVED响应会引导其转向新的主节点。客户端需要更新本地的槽位映射表,后续请求将直接发送到正确的新主节点。

6. 扩容与缩容

添加新节点:向集群中添加新节点时,通过redis-trib或redis-cli重新分配部分槽位到新节点,其他节点自动与新节点同步这部分槽位的数据。客户端在获取新的槽位映射后,能透明地访问到新节点上的数据。

移除节点或调整槽位:通过类似工具移除节点或调整槽位分布,涉及的数据会自动在集群内迁移。客户端在获取更新后的槽位映射后,能适应新的集群拓扑。

7. 监控与运维

监控集群状态:使用CLUSTER INFO、CLUSTER NODES等命令或第三方监控工具监控集群的整体状态、节点状态、槽位分布、复制延迟等指标。

故障排查与恢复:当出现故障时,通过上述命令和工具定位问题,执行必要操作(如故障转移、手动调整节点状态等)恢复集群服务。

综上所述,Redis Cluster模式通过数据分片、客户端路由、节点间通信、故障检测与自动转移等机制,实现了数据的分布式存储、高可用性和水平扩展。在实际使用中,还需要结合适当的部署策略、客户端配置、监控与运维手段,确保集群的稳定高效运行。

 如果大家需要视频版本的讲解,欢迎关注我的B站:

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

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

相关文章

C++ //练习 15.15 定义你自己的Disc_quote和Bulk_quote。

C Primer(第5版) 练习 15.15 练习 15.15 定义你自己的Disc_quote和Bulk_quote。 环境:Linux Ubuntu(云服务器) 工具:vim 代码块 /******************************************************************…

Python酷库之旅-第三方库Pandas(026)

目录 一、用法精讲 65、pandas.bdate_range函数 65-1、语法 65-2、参数 65-3、功能 65-4、返回值 65-5、说明 65-6、用法 65-6-1、数据准备 65-6-2、代码示例 65-6-3、结果输出 66、pandas.period_range函数 66-1、语法 66-2、参数 66-3、功能 66-4、返回值 6…

Gooxi受邀参加第三届中国数据中心服务器与设备峰会

7月2-3日,第三届中国数据中心服务器与设备峰会在上海召开,作为国内最聚焦在服务器领域的专业峰会,吸引了来自全国的行业专家、服务器与机房设备厂家,企业IT用户,数据中心业主共同探讨AIGC时代下智算中心设备的设计之道…

2024年最新最全面的Apifox使用-自动化测试

正文 编排测试场景运行测试持续集成查看测试结果 编排测试场景 新建测试场景 测试场景用于将多个接口有序地组合在一起运行,用于测试一个完整业务流程。 打开 Apifox 后点击左侧菜单栏中的“自动化测试”,点击左上角 号,选择所归属的目录…

记录|.NET上位机开发和PLC通信的实现

本文记录源自:B站视频 实验结果:跟视频做下来是没有问题的。能运行。 目录 前言一、项目Step1. 创建项目Step2. 创建动态图片展示Step3. 创建图片型按钮Step4. 创建下拉框Step1~4的效果展示Step5. 编程实体类操作类Main函数 Step1~5的效果展示Main函数 最…

Binder框架(二) ServiceManager初始化

0、总体流程四部 开机由init进程解析init.rc文件启动servicemanager.rc。启动会调用main.cpp的main函数 main函数里面主要做了以下几件事 : 1.1 打开/dev/binder设备; 1.2 通过mmap映射设备的内存空间到ServiceManager进程中。 1.3 设置ServiceManager为context…

气象水文耦合模式WRF-Hydro建模、编译及运行流程、依赖库准备、案例实践等

目录 第一部分 WRF-Hydro模型功能及运行流程、依赖库准备 第二部分 WRF-Hydro模式编译、离线运行及案例实践 第三部分 结合多案例进行模式数据制备及实践应用 第四部分 模式耦合编译及运行、总结 更多应用 WRF-Hydro模型是一个分布式水文模型,‌它基于WRF‌陆面…

数据库启动报ORA-600 6711故障分析处理---惜分飞

几个月以前的一个数据库故障,今天拿出来在win上重新分析,数据库启动报ORA-600 6711错 C:\Users\XFF>SQLPLUS / AS SYSDBA SQL*Plus: Release 12.1.0.2.0 Production on 星期日 7月 14 16:17:32 2024 Copyright (c) 1982, 2014, Oracle. All rights reserved. 已连接到空…

LabVIEW扬尘控制系统

设计了一套基于LabVIEW的扬尘控制系统,通过监测TsP(总悬浮颗粒物)浓度、风向和摄像头视频,实现对环境的综合监控和扬尘控制。系统可以自动判断扬尘位置,并驱动抑尘设备进行抑尘。硬件选用NI cDAQ-9178数据采集模块、Om…

linux高级编程(网络)(www,http,URL)

数据的封包和拆包 封包: 应用层数据(例如HTTP请求)被传递给传输层。传输层(TCP)在数据前添加TCP头部(包含端口号、序列号等)。网络层(IP)在TCP段前添加IP头部&#xff…

数据库:基本操作

SQL struct query language 关系型数据库 非关系 芒果db ddl data defination language 建表 dml 新增 修改 删除一行 data modifty dql 查询 data query language 查询 select 数据库 sun solaris gnu 1、分类: 大型 中型 …

Linux FFmpeg安装教程

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

DHCP服务、FTP服务

一、DHCP 1.1 DHCP是什么 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一种网络协议,用于自动分配 IP 地址和其他网络配置信息给网络中的设备 1.2 DHCP的好处 自动化: 减少了手动配置 IP 地址和网络参数的工…

Vulnhub:DC-1

1.环境搭建 靶机下载地址 将下载的靶机导入到Oracle VM VirtualBox中,设置仅主机模式,使用和kali相同的网卡 2.渗透过程 使用nmap工具进行主机发现扫描 nmap -sn 192.168.56.0/24 发现靶机ip地址,使用nmap工具进行靶机端口扫描 nmap -sS…

Python算法分析学习目标及能力验证

1、突破编程的关键点 不破不立,如何破?如何立? 人生苦短,我用python 目标:不在于多,而在于准; 验证:必须量化,否则都是虚夸。 那么目标怎么准确可量化呢? …

IDEA创建普通Java项目

环境准备 Java环境 运行javac查看java环境是否安装完成 开发工具Intellij IDEA 下载地址:https://www.jetbrains.com/idea/download/?sectionwindows 创建项目 点击新建项目 填入项目名字,项目路径,选择maven,点击下面的创建 运行项目 …

Docker的数据管理和网络通信

目录 一、Docker 的数据管理 1.数据卷 2.数据卷容器 二、端口映射 三、容器互联(使用centos镜像) 四、*Docker 镜像的创建 1.基于现有镜像创建 2.基于本地模板创建 3.基于Dockerfile 创…

BL201分布式I/O耦合器连接Profinet网络

钡铼技术的BL201分布式I/O耦合器是一个用于Profinet网络的设备,用于连接远程输入/输出(I/O)设备到控制系统,如可编程逻辑控制器(PLC),能够实现分布式的I/O连接和通信。 它支持标准Profinet IO …

一文说透Springboot单元测试

你好,我是柳岸花开。 一、单元测试说明 1 单元测试的优点与基本原则 一个好的单元测试应该具备以下FIRST 原则和AIR原则中的任何一条: 单元测试的FIRST 规则 Fast 快速原则,测试的速度要比较快, Independent 独立原则,…

【Springboot】新增profile环境配置应用启动失败

RT 最近接手了一个新的项目,为了不污染别人的环境,我新增了一个自己的环境配置。结果,在启动的时候总是失败,就算是反复mvn clean install也是无效。 问题现象 卡住无法进行下一步 解决思路 由于之前都是能启动的&#xff0c…