一、为何需要分片集群?

在讨论具体方案之前,我们先明确分片集群要解决的问题:

  1. 单节点瓶颈:无论是内存容量还是处理能力(QPS),单个 Redis 实例都有物理上限。
  2. 高可用性需求:单点故障会导致整个服务中断,这在生产环境中是不可接受的。
  3. 数据安全:需要备份机制防止数据丢失。

传统的单机 Redis 或简单的主从复制,虽然能解决部分问题(如读扩展、数据备份),但无法突破单节点容量限制,也无法在主节点故障时实现完全自动的无感知切换。因此,分片集群应运而生。

二、Redis 分片集群:数据分摊与扩展基石

分片(Sharding) 是将数据集分割成多个部分,并将这些部分分布到集群中的多个节点上存储的技术。Redis 的分片集群方案(如 Redis Cluster)正是基于此理念。

核心思想:

  1. 数据分片:将整个 Redis 键空间划分为多个逻辑分区(在 Redis Cluster 中称为哈希槽,共 16384 个)。每个哈希槽负责一部分键值对。
  2. 节点分布:将不同的哈希槽分配给集群中的不同 Redis 节点(主节点)负责。
  3. 数据路由:客户端(或代理)根据键计算出它属于哪个哈希槽,然后将请求发送给负责该哈希槽的节点。

工作方式:

  • 哈希算法:通常使用 CRC16 等哈希算法计算键的哈希值,然后对哈希槽数量取模,确定键属于哪个槽。
    slot = CRC16(key) % 16384
  • 请求路由:客户端(需要使用支持 Redis Cluster 协议的客户端库)根据计算出的槽位,将命令发送给对应的节点。
  • 自动迁移:当需要扩容或缩容时,Redis Cluster 可以自动在节点间迁移哈希槽,尽量减少对客户端的影响。

分片集群的优势:

  • 水平扩展:通过增加节点数量,可以线性提升集群的总存储容量和处理能力。
  • 高可用基础:为每个分片(主节点)配置从节点,构成了高可用的基础。

三、主从模式:数据冗余与读写分离

主从模式(Master-Slave Replication) 是 Redis 实现数据冗余和高可用性的基础机制。它本身不直接解决分片问题,但常与分片集群结合使用。

工作原理:

  1. 主节点(Master):负责处理写请求,并将数据变更通过**复制(Replication)**机制同步到从节点。
  2. 从节点(Slave / Replica):从主节点同步数据,可以处理读请求。一个主节点可以拥有多个从节点。

复制过程:

  • 全量复制:从节点向主节点发送复制请求,主节点将当前所有数据(RDB 快照)发送给从节点。
  • 增量复制:全量复制完成后,主节点将后续产生的所有写操作(通过命令流)持续发送给从节点,从节点执行这些命令以保持数据同步。

主从模式的作用:

  1. 数据冗余与备份:从节点是主节点数据的副本,提供数据备份,防止主节点数据丢失。
  2. 读写分离:可以将读请求分散到多个从节点,减轻主节点的压力,提升整体吞吐量。写操作仍需访问主节点。
  3. 高可用基础:当主节点故障时,可以从从节点中选举一个作为新的主节点,实现服务的快速恢复(但这通常需要 Sentinel 或 Cluster 的介入来完成自动化切换)。

限制:

  • 不具备自动故障转移能力:虽然从节点有数据,但默认情况下无法自动接管主节点的工作。需要人工干预或借助 Sentinel/Cluster。
  • 无法解决单节点容量瓶颈:所有写操作都集中到主节点,主节点仍然是性能和容量的瓶颈。

四、哨兵机制:自动化主从切换与监控

哨兵(Sentinel) 机制在主从模式的基础上,提供了自动化的监控、通知和故障转移能力,是实现 Redis 高可用的关键组件。

核心功能:

  1. 监控(Monitoring):哨兵会持续监控主节点和从节点的健康状态。
  2. 通知(Notification):当它发现某个节点故障或状态变化时,可以通知配置的客户端(如通过消息队列、HTTP API 等)。
  3. 自动故障转移(Automatic Failover):当主节点被判定为下线(客观下线)时,哨兵会自动选择一个从节点,将其提升为新的主节点,并让其他从节点指向新的主节点。
  4. 配置提供者(Configuration Provider):在故障转移完成后,哨兵可以为客户端提供新的主节点地址,使客户端能够自动切换连接。

工作流程(以主节点故障为例):

  1. 主观下线(SDOWN):单个哨兵发现主节点在指定时间内没有响应,认为其主观下线。
  2. 客观下线(ODOWN):多个哨兵通过投票机制确认主节点确实下线(达到配置的 quorum 数)。
  3. 领导者选举:在客观下线的状态下,哨兵集群会选举出一个领导者哨兵,负责执行故障转移。
  4. 故障转移执行
    • 选择一个从节点作为新的主节点(通常选择优先级高、数据新、延迟低的从节点)。
    • 将选中的从节点提升为主节点(执行 SLAVEOF NO ONE)。
    • 通知其他从节点将 slaveof 指向新的主节点。
    • 通知客户端新的主节点信息。

哨兵模式的优势:

  • 自动化:大大减少了人工干预,实现了故障的快速自动恢复。
  • 高可用:确保了主从架构下的服务连续性。
  • 可扩展性:可以通过增加哨兵实例来提高监控的冗余度和可靠性。

哨兵模式的局限:

  • 不解决分片问题:哨兵本身不进行数据分片,它管理的仍然是一个逻辑上的整体 Redis 服务(尽管可能由多个主从节点组成)。
  • 写性能瓶颈:所有写操作仍然集中在一个主节点上。

五、分片集群 + 哨兵:完整的高可用方案

为了同时实现水平扩展高可用,最佳实践是将 Redis 分片集群与哨兵机制结合使用。

架构示意:

复制

       +-----------------+       +-----------------+       +-----------------+|  Redis Node 1   |       |  Redis Node 2   |       |  Redis Node 3   ||  (Master)       |       |  (Master)       |       |  (Master)       |+-------+---------+       +-------+---------+       +-------+---------+|                      |                      ||                      |                      |+-------v---------+       +-------v---------+       +-------v---------+|  Redis Node 1a  |       |  Redis Node 2a  |       |  Redis Node 3a  ||  (Replica)      |       |  (Replica)      |       |  (Replica)      |+-----------------+       +-----------------+       +-----------------+|                      ||                      |+--------v--------+       +-------v---------+|  Redis Sentinel 1 |       |  Redis Sentinel 2 |+-------+--------+       +-------+--------+|                      ||                      |+-------v--------+       +-------v---------+|  Redis Sentinel 3 |       |  Redis Sentinel 4 |+-------------------+       +-----------------+

引用

工作方式:

  1. 分片:数据被分片到多个主节点(Node 1, Node 2, Node 3)上。
  2. 主从复制:每个主节点都配置一个或多个从节点(Node 1a, Node 2a, Node 3a),实现数据冗余和读写分离。
  3. 哨兵监控:哨兵集群监控所有主节点和从节点的健康状态。
  4. 自动故障转移:如果某个主节点(例如 Node 1)故障,哨兵会自动将它的一个从节点(Node 1a)提升为新的主节点,并更新其他从节点和客户端的配置。这个过程对应用是透明的。

优势:

  • 水平扩展:通过增加新的主从节点对,可以轻松扩展集群的容量和性能。
  • 高可用:每个分片都有哨兵监控,故障时能自动切换,确保整体服务不中断。
  • 读写分离:可以在每个分片的主从节点上实现读写分离,提升性能。

六、总结

Redis 的高可用分片集群方案是现代分布式系统中处理大规模数据和高并发访问的关键技术。理解其核心组件至关重要:

  • 分片集群:解决了单节点容量和性能瓶颈,实现了水平扩展。
  • 主从模式:提供了数据冗余和基础的读写分离能力,是高可用架构的基础。
  • 哨兵机制:在主从模式上增加了自动化监控和故障转移能力,是实现高可用的关键保障。

将分片集群与哨兵机制结合,可以构建出既具备强大扩展能力,又能提供高可靠服务的 Redis 数据存储解决方案,满足日益增长的业务需求。在选择和部署时,需要根据具体的业务场景、数据量、性能要求和对可用性的期望来综合考虑。

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

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

相关文章

Qt readyRead信号避坑:不产生readyRead信号的解决方法

Qt readyRead信号避坑:不产生readyRead信号的解决方法 引言一、QSerialport的readyRead1.1 版本问题1.2 缓存问题1.3 阻塞问题 二、Q(Tcp)Socket的readyRead2.1 阻塞问题2.2 运行一段时间,突然不发信号2.3 和具体数据有关? 引言 目前没遇到相…

大事件项目记录10-文章分类接口开发-更新文章分类

四、更新文章分类。 CategoryController.java: PutMappingpublic Result update(RequestBody Validated Category category){categoryService.update(category);return Result.success();} CategoryService: //更新分类void update(Category category); …

AI接口使用–阿里云百炼

原文地址:AI接口使用–阿里云百炼 – 无敌牛 欢迎参观我的个人博客:无敌牛 – 技术/著作/典籍/分享等 最近开发了一个抖音AI起名小程序,已经在抖音上线了,欢迎大家来使用。其中用到了 AI文本生成 功能,我用的是 阿里云…

大模型之提示词工程入门——解锁与AI高效沟通的“钥匙”

一、什么是提示词工程? 提示词工程(Prompt Engineering) 是一门通过设计、优化输入文本(Prompt)来引导大语言模型(LLM)生成高质量输出的技术。它不仅是AI应用的核心环节,也是连接人…

智慧城市云计算大数据中心项目设计方案

第1章 总体方案设计 1.1 概述 1.2 建设目标 1.3 建设内容 1.3.1 标准规范体系编制 1.3.2 基础设施平台建设 1.3.3 数据资源平台建设 1.3.4 应用支撑平台建设 1.3.5 云管平台运维建设 1.3.6 应用上云迁移实施 1.3.7 信息安全保障建设 1.3.8 容灾备份系统建设 1.4 设…

OpenMP并行加速学习笔记2025.6.27

在OpenMP并行加速中,线程数(如32、16、8)的选择需结合硬件核心数、任务类型(计算密集型或I/O密集型)、负载均衡策略及线程开销综合判断。以下为具体差异分析与性能提升对比: 一、核心影响因素分析 1. 硬件…

对象回调和函数回调

1.对象回调: 对象回调原始写法,A调B B又回头调A package com.ldj.demo.controller;/*** User: ldj* Date: 2025/6/28* Time: 12:22* Description: 回调函数的理解 对象回调*/ public class Tr {public static void main(String[] args) {A a new A();…

Python实例题:Web 爬虫与数据可视化

目录 Python实例题 题目 要求: 解题思路: 代码实现: Python实例题 题目 Web 爬虫与数据可视化 要求: 编写一个爬虫,从豆瓣电影 Top250 页面(豆瓣电影 Top 250)抓取电影名称、评分、导演…

关于ubuntu 20.04系统安装分区和重复登录无法加载桌面的问题解决

1. 想要安装Ubuntu 20.04版本,有两块硬盘,所以在分区列表设置的格式为如下: 其中各个/boot 、/home的格式为如下(Ubuntu20.04分区方案_ubuntu20.04手动分区-CSDN博客) 2.安装完死活输完密码进不去主界面 必须禁用Nou…

26考研|数学分析:隐函数定理及其应用

前言 本章主要围绕隐函数、隐含数组的计算展开,本章的核心还是在于计算的运用,在理论层面要掌握隐函数(隐函数组)存在性定理,在计算方面,要掌握隐函数、隐函数组的计算方法,此外,本…

PyQtNode Editor 第三篇创建节点(节点的定义)

在 PyQtNode Editor 的开发之旅中,经过前两篇博客对基础环境搭建和核心类结构的探索,我们已经迈出了坚实的步伐。今天,我们将聚焦于node_scene文件,深入解析其中的代码逻辑。这段代码构建了Scene类,它如同整个节点编辑器的 “管理中枢”,承担着组织和协调节点、边等关键元…

通过docker安装nginx服务

nginx配置文件 https://gitee.com/Cairo-SR8/nginx-configuration.git一、安装nginx 1.1 拉去ARM镜像 docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/linux_arm64_nginx:latest1.2 拉去x86镜像 docker pull registry.cn-hangzhou.aliyuncs.com/qiluo-images/…

盲法在临床试验中的应用与挑战

一、盲法分级与科学价值 1.1 开放标签 1.1.1 受盲对象 无隐藏。 1.1.2 适用场景 外科手术、器械试验等无法伪装的操作。 1.1.3 偏倚控制目标 仅客观终点(生存率、实验室指标)。 1.2 单盲 1.2.1 受盲对象 患者。 1.2.2 适用场景 患者报告结局(PRO)为主的试验(如…

VNware启动虚拟机报错:虚拟化性能计数器需要版本为 3 或以上的架构性能监控。

Vmware版本:17.5 结论: 【编辑虚拟机设置-硬件-处理器-虚化计数器】没勾就勾上,勾了就不勾保存,然后重新打勾 备注:不知道是不是显示问题,之前勾着的时候报错。取消报错,再勾上报错能正常启动虚…

微机系统 - 第7章 -可编程接口芯片

可编程并行输入/输出接口芯片 8255A -1:结构 8255A为40引脚、双列直插封装。 内部结构由数据端口、组控制电路、数据总线缓冲器、读/写控制逻辑四部分组成。 数据总线缓冲器:三态8位双向缓冲器,D7-D0同系统数据总线相连。CPU通过执行输入/输出指令来实…

解析云计算虚拟化基石:KVM、QEMU与Libvirt的协同

在云计算和容器化大行其道的今天,传统虚拟化技术仍是企业IT架构的核心支柱。理解KVM、QEMU和Libvirt的关系,是掌握现代虚拟化技术的关键一步。 一、虚拟化技术演进:从软件模拟到硬件加速的进化之路 虚拟化技术通过在单台物理服务器上创建多个…

Mac mini 跑 DeepSeek R1 及 QwQ-32B模型实测报告

测试对象:2025 款 Mac mini(M4 / M4 Pro 芯片) 测试模型:DeepSeek-R1(14B/32B)、QwQ-32B(原版/量化版) 测试目标:硬件性能适配性、推理速度、内存占用及优化方案 一、Mac…

github常用插件

一,文档辅助阅读系列:自动化wiki处理 1,deepwiki https://deepwiki.com/ 将我们看不懂的官方code文档转换为wiki,更加便于理解。 其实能够翻阅的仓库很有限,比如说: 但是有很多仓库并没有index&#xff…

洛谷P11963 [GESP202503 六级] 环线-普及/提高-

题目描述 小 A 喜欢坐地铁。地铁环线有 n n n 个车站&#xff0c;依次以 1 , 2 , ⋯ , n 1,2,\cdots,n 1,2,⋯,n 标号。车站 i ( 1 ≤ i < n ) i\ (1\leq i<n) i (1≤i<n) 的下一个车站是车站 i 1 i1 i1。特殊地&#xff0c;车站 n n n 的下一个车站是车站 1 …

大网络办公区的二层生成树优化问题

办公区有华为和思科交换机&#xff0c;此次改造&#xff0c;在办公火墙上、下联&#xff0c;做3层IP地址互联&#xff0c;可以让大核心不参与办公区的STP网络收敛&#xff0c;就不会因为下面办公区的交换机stp收敛问题导致&#xff0c;核心连接的其他区域网络出现动荡&#xff…