Redis7集群搭建与原理分析

一、集群搭建步骤

1. 环境准备

  • 至少 6 个节点(3 主 + 3 从),建议分布式部署
  • 所有节点安装 Redis 7(需支持集群模式)
  • 开放节点间通信端口(默认 6379 + 集群总线端口 16379

2. 节点配置 每个节点的 redis.conf 配置:

conf 复制代码
port 6379
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes

3. 启动所有节点

bash 复制代码
redis-server /path/to/redis.conf

4. 创建集群 使用 redis-cli 自动分配槽位:

bash 复制代码
redis-cli --cluster create \
  192.168.1.101:6379 \
  192.168.1.102:6379 \
  192.168.1.103:6379 \
  192.168.1.104:6379 \
  192.168.1.105:6379 \
  192.168.1.106:6379 \
  --cluster-replicas 1

参数说明:--cluster-replicas 1 表示每个主节点配 1 个从节点

5. 验证集群状态

bash 复制代码
redis-cli --cluster check 192.168.1.101:6379

输出应包含主从关系和槽位分配信息。


二、核心原理分析

1. 数据分片机制

  • 将数据划分为 16384 个槽位(Slot)
  • Key 通过哈希算法定位槽位
  • 每个主节点负责部分槽位(如 Node1 负责 0-5500 槽)

2. 请求路由过程

graph LR A[客户端] --> B{Key 计算 slot} B -->|slot 属于当前节点| C[直接处理] B -->|slot 不属于当前节点| D[返回 MOVED 重定向] D --> E[客户端重连至正确节点]

3. 高可用实现

  • 主从复制:每个主节点有 1-N 个从节点,数据异步复制
  • 故障转移
    1. 节点间通过 Gossip 协议检测故障
    2. 从节点发起选举(Raft 算法)
    3. 新主节点接管槽位并广播更新

4. 集群总线

  • 专用 TCP 端口(主端口 + 10000)用于:
    • 节点间心跳检测
    • 配置信息传播
    • 故障转移协商

三、关键注意事项
  1. 槽位覆盖:必须保证所有 16384 个槽位被分配,否则集群不可用

  2. 跨槽操作 :不支持多 Key 跨槽事务(需用 Hash Tag 绑定相同 slot)

    bash 复制代码
    # 使用 {} 强制相同 slot
    SET user:{1000}.name "Alice"
    SET user:{1000}.age 30
  3. 扩容流程

    • 添加新节点:redis-cli --cluster add-node new_ip:port exist_ip:port
    • 迁移槽位:redis-cli --cluster reshard exist_ip:port

性能建议:集群节点数不超过 1000,单个分片数据量控制在 20GB 以内

通过上述架构,Redis 集群实现了线性扩展(每增加节点提升约 100K QPS)和故障自动恢复能力,适用于高并发分布式场景。

相关推荐
IT大白鼠2 天前
Redis 系列 · 第 01 篇——认知入门:Redis 是什么
redis·nosql
彧azz2 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
lbb 小魔仙2 天前
OpenClaw + cpolar 实战:远程 NAS、分享小游戏、RDP,再配置公网 AI 入口
数据库·人工智能·redis·oracle·prometheus
夕除2 天前
redis--018
redis
两锭子2 天前
Redis基础
redis
烟沙九洲2 天前
Redis 缓存穿透、缓存击穿、缓存雪崩
数据库·redis
字节探索2 天前
Redis 只会当缓存用?这 10 大实战场景,让你的系统快到飞起
redis·后端
于樱花森上飞舞2 天前
【Redis】哨兵详解
java·开发语言·数据库·redis
Rain的Java大神之路2 天前
如何快速上传10G文件
java·spring boot·redis·后端·mysql·spring cloud·面试
Wang's Blog2 天前
Java 接入Redis: 通用命令与键管理
java·服务器·redis