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

Redis——Cluster配置

目录

分片

一、分片的本质与核心价值

二、分片实现方案对比

三、分片算法详解

1. ‌范围分片(顺序分片)‌

2. ‌哈希分片‌

3. ‌虚拟槽分片(Redis Cluster 方案)‌

四、Redis Cluster 分片实践要点

五、经典问题解析

Cluster模式配置

一、Cluster 核心配置参数

二、集群部署全流程

1. 节点初始化

2. 集群创建命令

3. 集群验证

三、关键运维操作

1. 节点扩容

2. 故障转移模拟

3. 集群修复

四、高级配置建议

五、常见问题解决

 各模式优缺点

一、主从复制模式

二、哨兵模式(Sentinel)

三、Cluster模式(分布式集群)

四、对比表格


分片

一、分片的本质与核心价值

  1. 问题根源
    单机 Redis 存在内存容量和吞吐量瓶颈,分片通过将数据分散到多个节点解决此问题。

  2. 核心价值

    • 横向扩展‌:突破单机内存限制,支持 TB 级数据存储。
    • 负载均衡‌:多节点并行处理请求,提升并发能力(如百万级 QPS)。
    • 故障隔离‌:单节点故障仅影响其负责的数据分片。
    • 资源优化‌:支持冷热数据分离存储(如 SSD/HDD 混合部署)。

二、分片实现方案对比

方案工作原理优点缺点适用场景
客户端分片客户端计算键的哈希值,直接路由到目标节点(如取模或一致性哈希)无代理层,架构简单节点变更需客户端调整,扩容复杂小规模固定集群
代理分片通过中间件(如 Twemproxy)接收请求,由代理计算分片并转发客户端无感知,屏蔽分片细节代理层可能成为性能瓶颈需兼容旧客户端的场景
服务端分片(Redis Cluster)节点间通过 Gossip 协议同步槽位信息,客户端请求由服务端重定向(MOVED 指令)自动故障转移、支持动态扩缩容不支持跨槽事务和多键操作生产环境首选方案

三、分片算法详解

1. ‌范围分片(顺序分片)
  • 原理‌:按数据范围划分(如 ID 1-10000 → 节点A,10001-20000 → 节点B)。
  • 优点‌:支持高效范围查询(如 ZRANGE)和批量操作。
  • 缺点‌:数据分布易倾斜,扩容时需迁移大量数据。
2. ‌哈希分片
  • 哈希求余‌:hash(key) % N 确定节点,扩容时需迁移所有数据(N 变化导致重新映射)。
  • 一致性哈希‌:
    • 哈希环结构,节点增减仅影响相邻数据。
    • 解决扩容痛点,但仍有数据倾斜风险。
3. ‌虚拟槽分片(Redis Cluster 方案)
  • 核心机制‌:
    • 预分配 ‌16384 个哈希槽‌(slot),每个节点负责部分槽位。
    • 槽位计算:slot = CRC16(key) mod 16384
  • 动态扩缩容‌:
    • 添加节点时,从现有节点迁移部分槽位到新节点。
    • 删除节点时,将其槽位分配给其他节点。
  • 优势‌:
    • 数据分布均匀,避免热点问题。
    • 槽位迁移原子操作,不影响集群可用性。

四、Redis Cluster 分片实践要点

  1. 集群要求

    • 至少 ‌3 个主节点‌(推荐 3 主 3 从)。
    • 所有节点通过‌集群总线端口‌通信(Redis端口 + 10000)。
  2. 数据迁移命令

    # 将槽位 1000 从节点 A 迁移到节点 B 
    redis-cli --cluster reshard <节点A_IP>:<端口> --cluster-from <节点A_ID> --cluster-to <节点B_ID> --cluster-slots 1000 
  3. 客户端交互

    • 客户端连接任意节点,若请求的键不属于当前节点,返回 MOVED <slot> <目标节点IP>:<端口> 重定向指令。
    • 智能客户端(如 Lettuce)可缓存槽位映射表,减少重定向次数。

五、经典问题解析

  1. 为何使用 16384 槽?

    • 集群心跳包携带全量槽分配信息,16384(16KB)在带宽与数据粒度间取得平衡。
    • 超过 16384 易导致网络拥堵。
  2. 分片下的限制

    • 跨槽的多键操作(如 MSET、事务)需确保所有键在同一槽位,可通过 HashTag 强制绑定:
      MSET {user:1000}.name "Alice" {user:1000}.age 30 # 使用相同 HashTag 

总结‌:Redis 分片是分布式系统的核心技术,‌虚拟槽方案‌(Redis Cluster)凭借自动分片、故障转移和动态扩缩容能力,成为生产环境首选。设计时需关注数据均衡性、扩容成本及跨分片操作限制

Cluster模式配置

一、Cluster 核心配置参数

  1. 基础配置(redis.conf

    cluster-enabled yes # 启用集群模式 
    cluster-config-file nodes-6379.conf # 节点自动生成的集群配置文件 
    cluster-node-timeout 15000 # 节点失联判定时间(毫秒) 
    cluster-replica-validity-factor 10 # 从节点有效性因子(超时倍数) 
    cluster-migration-barrier 1 # 主节点最少保留的从节点数 
    • cluster-node-timeout 影响故障转移速度,建议生产环境设为 15-30 秒。
    • cluster-migration-barrier 防止主节点因从节点不足导致数据不可用。
  2. 网络与安全

    bind 0.0.0.0 # 允许所有IP访问 
    protected-mode no # 关闭保护模式(需配合密码) 
    requirepass yourpassword # 集群密码(所有节点需一致) 
    masterauth yourpassword # 主从认证密码 
    • 集群总线端口需开放(默认:Redis端口 + 10000)。
  3. 数据持久化

    appendonly yes # 开启AOF持久化 
    appendfsync everysec # 折衷性能与数据安全 

二、集群部署全流程

1. 节点初始化
# 启动6个节点(3主3从) redis-server /path/to/redis-7000.conf # 端口7000-7005 
2. 集群创建命令
redis-cli --cluster create \ 
192.168.1.1:7000 192.168.1.1:7001 192.168.1.1:7002 \ 
192.168.1.1:7003 192.168.1.1:7004 192.168.1.1:7005 \ 
--cluster-replicas 1 \ 
--cluster-yes 
  • --cluster-replicas 1 表示每个主节点配1个从节点。
  • 执行后自动分配16384个槽位(每个主节点约5461个槽)。
3. 集群验证
redis-cli -c -p 7000 cluster nodes # 查看节点角色及槽分布 redis-cli -p 7000 cluster info # 检查集群健康状态 

三、关键运维操作

1. 节点扩容
# 添加新主节点 
redis-cli --cluster add-node 192.168.1.2:7006 192.168.1.1:7000 
# 迁移槽位(交互式) 
redis-cli --cluster reshard 192.168.1.1:7000 
  • 扩容后需手动平衡槽位,避免热点问题58。
2. 故障转移模拟
# 手动触发主从切换(在从节点执行) redis-cli -p 7003 CLUSTER FAILOVER 
3. 集群修复
# 修复孤儿槽(无主节点的槽) redis-cli --cluster fix 192.168.1.1:7000 

四、高级配置建议

  1. 槽位分配优化

    • 使用 CLUSTER SETSLOT 手动调整槽位分布,避免数据倾斜。
    • 监控槽位命中率:redis-cli --cluster check 192.168.1.1:7000
  2. 客户端连接策略

    • 智能客户端(如 Lettuce)应缓存槽位映射表,减少 MOVED 重定向。
    • 避免跨槽事务,优先使用 HashTag 绑定相关键:{user1000}.profile
  3. 监控指标

    指标监控命令告警阈值
    节点状态CLUSTER NODES任何节点不可达
    槽位覆盖率CLUSTER INFO 的 cluster_slots_ok必须为 16384
    内存使用率INFO MEMORY>80% 触发告警

五、常见问题解决

  1. 节点无法加入集群

    • 检查防火墙是否放行集群总线端口。
    • 确认所有节点 requirepass 和 masterauth 一致。
  2. 槽位迁移卡顿

    • 增大 cluster-node-timeout 减少网络抖动影响。
    • 使用 --cluster-replace 强制替换故障节点。
  3. 数据不一致

    • 从节点同步延迟可通过 INFO REPLICATION 查看 slave_repl_offset

通过以上配置与运维策略,可构建高可用的 Redis Cluster 环境。实际部署时需结合监控工具(如 Prometheus)持续观察集群状态。

 各模式优缺点

一、主从复制模式

优点

  • 读写分离提升读性能,从节点分担主节点压力
  • 配置简单,仅需在从节点设置replicaof指令
  • 数据冗余提高容灾能力

缺点

  • 主节点单点故障需手动切换
  • 写性能受限于主节点,无法横向扩展
  • 全量同步时网络开销大

二、哨兵模式(Sentinel)

优点

  • 自动监控与故障转移,解决主从模式手动切换问题
  • 支持多哨兵部署,避免监控节点单点故障
  • 客户端自动感知主节点变化

缺点

  • 扩容仍需手动操作,无法自动分片
  • 故障转移期间可能出现数据丢失
  • 配置复杂度高于主从模式

三、Cluster模式(分布式集群)

优点

  • 数据自动分片(16384槽),支持TB级数据存储
  • 无中心架构,节点间通过Gossip协议通信
  • 支持动态扩缩容与自动故障转移

缺点

  • 不支持跨节点事务和多键操作(需HashTag绑定)
  • 运维复杂度高,需管理槽位迁移与节点状态
  • 客户端需支持集群协议(如MOVED重定向)

四、对比表格

模式数据分片自动故障转移读写扩展性适用场景
主从复制读扩展读多写少,容灾备份
哨兵模式✔️读扩展高可用但数据量中等
Cluster模式✔️✔️读写扩展海量数据与高并发场景

相关文章:

Redis——Cluster配置

目录 分片 一、分片的本质与核心价值 二、分片实现方案对比 三、分片算法详解 1. ‌范围分片&#xff08;顺序分片&#xff09;‌ 2. ‌哈希分片‌ 3. ‌虚拟槽分片&#xff08;Redis Cluster 方案&#xff09;‌ 四、Redis Cluster 分片实践要点 五、经典问题解析 C…...

Ubuntu 安装 Mysql 数据库

首先更新apt-get工具&#xff0c;执行命令如下&#xff1a; apt-get upgrade安装Mysql&#xff0c;执行如下命令&#xff1a; apt-get install mysql-server 开启Mysql 服务&#xff0c;执行命令如下&#xff1a; service mysql start并确认是否成功开启mysql,执行命令如下&am…...

结合PDE反应扩散方程与物理信息神经网络(PINN)进行稀疏数据预测的技术方案

以下是一个结合PDE反应扩散方程与物理信息神经网络(PINN)进行稀疏数据预测的技术方案,包含完整数学推导、PyTorch/TensorFlow双框架实现代码及对比实验分析。 基于PINN的反应扩散方程稀疏数据预测与大规模数据泛化能力研究 1. 问题定义与数学模型 1.1 反应扩散方程 考虑标…...

从0开始一篇文章学习Nginx

Nginx服务 HTTP介绍 ## HTTP协议是Hyper Text Transfer Protocol&#xff08;超文本传输协议&#xff09;的缩写,是用于从万维网&#xff08;WWW:World Wide Web &#xff09;服务器传输超文本到本地浏览器的传送协议。 ## HTTP工作在 TCP/IP协议体系中的TCP协议上&#…...

Java高级 |【实验八】springboot 使用Websocket

隶属文章&#xff1a;Java高级 | &#xff08;二十二&#xff09;Java常用类库-CSDN博客 系列文章&#xff1a;Java高级 | 【实验一】Springboot安装及测试 |最新-CSDN博客 Java高级 | 【实验二】Springboot 控制器类相关注解知识-CSDN博客 Java高级 | 【实验三】Springboot 静…...

scan_mode设计原则

scan_mode设计原则 在进行mtp controller设计时&#xff0c;基本功能设计完成后&#xff0c;需要设计scan_mode设计。 1、在进行scan_mode设计时&#xff0c;需要保证mtp处于standby模式&#xff0c;不会有擦写、编程动作。 2、只需要固定mtp datasheet说明的接口即可&#xf…...

设计模式-3 行为型模式

一、观察者模式 1、定义 定义对象之间的一对多的依赖关系&#xff0c;这样当一个对象改变状态时&#xff0c;它的所有依赖项都会自动得到通知和更新。 描述复杂的流程控制 描述多个类或者对象之间怎样互相协作共同完成单个对象都无法单独度完成的任务 它涉及算法与对象间职责…...

qt 双缓冲案例对比

双缓冲 1.双缓冲原理 单缓冲&#xff1a;在paintEvent中直接绘制到屏幕&#xff0c;绘制过程被用户看到 双缓冲&#xff1a;先在redrawBuffer绘制到缓冲区&#xff0c;然后一次性显示完整结果 代码结构 单缓冲&#xff1a;所有绘制逻辑在paintEvent中 双缓冲&#xff1a;绘制…...

2025年全国I卷数学压轴题解答

第19题第3问: b b b 使得存在 t t t, 对于任意的 x x x, 5 cos ⁡ x − cos ⁡ ( 5 x t ) < b 5\cos x-\cos(5xt)<b 5cosx−cos(5xt)<b, 求 b b b 的最小值. 解: b b b 的最小值 b m i n min ⁡ t max ⁡ x g ( x , t ) b_{min}\min_{t} \max_{x} g(x,t) bmi…...

JS设计模式(5): 发布订阅模式

解锁JavaScript发布订阅模式&#xff1a;让代码沟通更优雅 在JavaScript的世界里&#xff0c;我们常常会遇到这样的场景&#xff1a;多个模块之间需要相互通信&#xff0c;但是又不想让它们产生过于紧密的耦合。这时候&#xff0c;发布订阅模式就像一位优雅的信使&#xff0c;…...

实现p2p的webrtc-srs版本

1. 基本知识 1.1 webrtc 一、WebRTC的本质&#xff1a;实时通信的“网络协议栈”类比 将WebRTC类比为Linux网络协议栈极具洞察力&#xff0c;二者在架构设计和功能定位上高度相似&#xff1a; 分层协议栈架构 Linux网络协议栈&#xff1a;从底层物理层到应用层&#xff08;如…...

Android多媒体——音/视频数据播放(十八)

在媒体数据完成解码并准备好之后,播放流程便进入了最终的呈现阶段。为了确保音视频内容能够顺利输出,系统需要首先对相应的播放设备进行初始化。只有在设备初始化成功后,才能真正开始音视频的同步渲染与播放。这一过程不仅影响播放的启动速度,也直接关系到播放的稳定性和用…...

第2篇:BLE 广播与扫描机制详解

本文是《BLE 协议从入门到专家》专栏第二篇,专注于解析 BLE 广播(Advertising)与扫描(Scanning)机制。我们将从协议层结构、广播包格式、设备发现流程、控制器行为、开发者 API、广播冲突与多设备调度等方面,全面拆解这一 BLE 最基础也是最关键的通信机制。 一、什么是 B…...

开源 vGPU 方案:HAMi,实现细粒度 GPU 切分

本文主要分享一个开源的 GPU 虚拟化方案&#xff1a;HAMi&#xff0c;包括如何安装、配置以及使用。 相比于上一篇分享的 TimeSlicing 方案&#xff0c;HAMi 除了 GPU 共享之外还可以实现 GPU core、memory 得限制&#xff0c;保证共享同一 GPU 的各个 Pod 都能拿到足够的资源。…...

EC2安装WebRTC sdk-c环境、构建、编译

1、登录新的ec2实例&#xff0c;证书可以跟之前的实例用一个&#xff1a; ssh -v -i ~/Documents/cert/qa.pem ec2-user70.xxx.165.xxx 2、按照sdk-c demo中readme的描述开始安装环境&#xff1a; https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-c 2…...

盲盒一番赏小程序:引领盲盒新潮流

在盲盒市场日益火爆的今天&#xff0c;如何才能在众多盲盒产品中脱颖而出&#xff1f;盲盒一番赏小程序给出了答案&#xff0c;它以创新的玩法和优质的服务&#xff0c;引领着盲盒新潮流。 一番赏小程序的最大特色在于其独特的赏品分级制度。赏品分为多个等级&#xff0c;从普…...

边缘计算设备全解析:边缘盒子在各大行业的落地应用场景

随着工业物联网、AI、5G的发展&#xff0c;数据量呈爆炸式增长。但你有没有想过&#xff0c;我们生成的数据&#xff0c;真的都要发回云端处理吗&#xff1f;其实不一定。特别是在一些对响应时间、网络带宽、数据隐私要求高的行业里&#xff0c;边缘计算开始“火”了起来&#…...

Linux实现线程同步的方式有哪些?

什么是线程同步&#xff1f; 想象一下超市收银台&#xff1a;如果所有顾客&#xff08;线程&#xff09;同时挤向同一个收银台&#xff08;共享资源&#xff09;&#xff0c;场面会一片混乱。线程同步就是给顾客们发"排队号码牌"&#xff0c;确保&#xff1a; 有序访…...

python打卡day47

昨天代码中注意力热图的部分顺移至今天 知识点回顾&#xff1a; 热力图 作业&#xff1a;对比不同卷积层热图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import D…...

python学习day39

图像数据与显存 知识点回顾 1.图像数据的格式&#xff1a;灰度和彩色数据 2.模型的定义 3.显存占用的4种地方 a.模型参数梯度参数 b.优化器参数 c.数据批量所占显存 d.神经元输出中间状态 4.batchisize和训练的关系 import torch import torchvision import torch.nn as nn imp…...

Ansible+Zabbix-agent2快速实现对多主机监控

ansible Ansible 是一款开源的自动化工具&#xff0c;用于配置管理&#xff08;Configuration Management&#xff09;、应用部署&#xff08;Application Deployment&#xff09;、任务自动化&#xff08;Task Automation&#xff09;和编排&#xff08;Orchestration&#xf…...

年度峰会上,抖音依靠人工智能和搜索功能吸引广告主

上周早些时候举行的第五届年度TikTok World产品峰会上&#xff0c;TikTok推出了一系列旨在增强该应用对广告主吸引力的功能。 新产品列表的首位是TikTok Market Scope&#xff0c;这是一个全新的分析平台&#xff0c;为广告主提供整个考虑漏斗的全面视图&#xff0c;使他们能够…...

Vuex:Vue.js 应用程序的状态管理模式

什么是Vuex&#xff1f; Vuex 是专门为 Vue.js 应用程序开发的状态管理模式 库。它采用集中式存储管理应用的所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化。 在大型单页应用中&#xff0c;当多个组件共享状态时&#xff0c;简单的单向数据流…...

【中间件】Web服务、消息队列、缓存与微服务治理:Nginx、Kafka、Redis、Nacos 详解

Nginx 是什么&#xff1a;高性能的HTTP和反向代理Web服务器。怎么用&#xff1a;通过配置文件定义代理规则、负载均衡、静态资源服务等。为什么用&#xff1a;提升Web服务性能、高并发处理、负载均衡和反向代理。优缺点&#xff1a;轻量高效&#xff0c;但动态处理能力较弱&am…...

如何使用CodeRider插件在IDEA中生成代码

一、环境搭建与插件安装 1.1 环境准备 名称要求说明操作系统Windows 11JetBrains IDEIntelliJ IDEA 2025.1.1.1 (Community Edition)硬件配置推荐16GB内存50GB磁盘空间 1.2 插件安装流程 步骤1&#xff1a;市场安装 打开IDEA&#xff0c;进入File → Settings → Plugins搜…...

电脑定时关机工具推荐

软件介绍 本文介绍一款轻量级的电脑自动关机工具&#xff0c;无需安装&#xff0c;使用简单&#xff0c;可满足定时关机需求。 工具简介 这款关机助手是一款无需安装的小型软件&#xff0c;文件体积仅60KB&#xff0c;下载后可直接运行&#xff0c;无需复杂配置。 使用…...

Ubuntu 可执行程序自启动方法

使用 autostart&#xff08;适用于桌面环境&#xff09; 适用于 GNOME/KDE 桌面环境&#xff08;如 Ubuntu 图形界面&#xff09; 1. 创建 .desktop 文件 sudo vi ~/.config/autostart/my_laser.desktop[Desktop Entry] TypeApplication NameMy Laser Program Execbash -c &…...

Springboot多数据源配置实践

Springboot多数据源配置实践 基本配置文件数据库配置Mapper包Model包Service包中业务代码Mapper XML文件在某些复杂的业务场景中,我们可能需要使用多个数据库来存储和管理不同类型的数据,而不是仅仅依赖于单一数据库。本技术文档将详细介绍如何在 Spring Boot 项目中进行多数…...

第6章:Neo4j数据导入与导出

在实际应用中&#xff0c;数据的导入与导出是使用Neo4j的重要环节。无论是初始数据加载、系统迁移还是数据备份&#xff0c;都需要高效可靠的数据传输机制。本章将详细介绍Neo4j中的各种数据导入与导出方法&#xff0c;帮助读者掌握不同场景下的最佳实践。 6.1 数据导入策略 …...

uni-app学习笔记二十三--交互反馈showToast用法

showToast部分文档位于uniapp官网-->API-->界面&#xff1a;uni.showToast(OBJECT) | uni-app官网 uni.showToast(OBJECT) 用于显示消息提示框 OBJECT参数说明 参数类型必填说明平台差异说明titleString是提示的内容&#xff0c;长度与 icon 取值有关。iconString否图…...