Redis集群

文章目录

  • [Redis Cluster:分片与高可用](#Redis Cluster:分片与高可用)
    • [1. 数据分片](#1. 数据分片)
      • [1.1 哈希求余](#1.1 哈希求余)
      • [1.2 一致性哈希](#1.2 一致性哈希)
      • [1.3 哈希槽(Redis Cluster 采用)](#1.3 哈希槽(Redis Cluster 采用))
    • [2. 某个主节点挂了怎么办?](#2. 某个主节点挂了怎么办?)
      • [2.1 故障判定](#2.1 故障判定)
      • [2.2 故障迁移](#2.2 故障迁移)
    • [3. 集群扩容](#3. 集群扩容)

Redis Cluster:分片与高可用

主从 + 哨兵解决了自动故障转移 ,但数据仍在一套主从里,容量和 QPS 有上限.

Redis Cluster 在此基础上解决两件事:数据分片 + 集群内自动故障迁移(不依赖外部 Sentinel)。

进入客户端后,可通过cluster nodes查看集群结构


1. 数据分片

数据量大、访问量大时,需要把 key 分散到多台 Redis 上。常见三种思路:

1.1 哈希求余

slot = hash(key) % N,N 为节点数。

节点增减时 N 变化,几乎所有 key 都要重新映射,迁移成本极高。

1.2 一致性哈希

把节点和数据映射到一个环上,扩缩容只影响相邻区间,比哈希求余好。

但仍可能出现数据倾斜 ,迁移面也不如槽方案可控。

1.3 哈希槽(Redis Cluster 采用)

固定 16384 个 slot,slot = CRC16(key) % 16384,再把槽分配给各主节点。

扩缩容时迁移槽 ,而不是按节点数重新取模,代价可控、分布更均衡。

方案 扩缩容 Redis 是否采用
哈希求余 几乎全量迁移
一致性哈希 影响相邻区间
哈希槽 按槽迁移

2. 某个主节点挂了怎么办?

2.1 故障判定

集群节点通过 ping/pong 心跳互通。某节点长时间无响应,先被标为 PFAIL (主观下线);经 Gossip 与其他节点确认,超过半数 节点也认为它挂了,则升为 FAIL (客观下线)并广播。

整集群不可用的常见情况:

  • 某个分片主从全挂
  • 某个分片主挂且无从节点
  • 超过半数 master 都挂了
    核心原则:每个 slot 都要有可用节点负责

2.2 故障迁移

  • 挂的是从节点:不迁移
  • 挂的是主节点 :其从节点发起竞选升主
    简要流程:
  1. 与旧主断开过久、数据差异太大的从节点,失去参选资格
  2. 合格从节点先休眠一段时间(数据越新,越先醒来)
  3. 先醒的从节点向集群拉票(只有主节点有投票权)
  4. 票数超过主节点半数 → 升主,其余从节点改复制新主
  5. 广播新拓扑,各节点更新集群结构

3. 集群扩容

扩容 = 新节点加入 + 从已有主节点迁移一部分 hash slot 到新节点。

缩容则相反:先把槽迁走,再下线节点。

相关推荐
会博通·代码搬运工几秒前
疾控档案落地难点:异构业务系统并存,高价值纸质凭证如何回流业务闭环
数据库·档案管理·档案管理系统·智能扫描设备·会博通
数智启示录3 分钟前
Apache Kafka Consumer 扩到 40 个仍不提速:Partition 上限锁死有效并行度 【Kafka合集】
数据库·经验分享·分布式·缓存·面试·kafka·apache
数智启示录9 分钟前
Apache Kafka 幂等 Producer 的边界:Exactly-Once 到了 MySQL 为什么失效 【Kafka合集】
数据库·经验分享·分布式·mysql·面试·kafka·apache
Java小白笔记11 分钟前
Java 实现阿里云 OSS 文件上传链路:普通上传、秒传、分片与断点续传
java·开发语言·数据库·spring·阿里云
—Miss. Z—12 分钟前
计算机三级数据库技术—填空题
数据库·mysql
数智启示录37 分钟前
Apache Kafka 同 Key 仍会乱序:从分区 Offset 到业务可见的四道边界 【Kafka 合集】
大数据·数据库·经验分享·分布式·面试·kafka·apache
烬羽1 小时前
给 Agent 一个检索式记忆:把对话历史存进 Milvus,该记的都记得
javascript·数据库·agent
2601_962297251 小时前
python自带缓存lru_cache用法及扩展的使用_python
python·缓存·装饰器·lru_cache·my_cache
星云API技术支持1 小时前
企业微信二次开发外部群:群聊数据与联系人信息如何建立关联
数据库·php·企业微信
我不是程序员三三1 小时前
桌面管理软件哪个最好?从一次上线翻车事故,拆解选型评估与配置落地全流程
数据库