Redis 的 Cluster(集群)架构
Redis 的 Cluster(集群)架构,比主从更进阶,可以实现:
✅ 数据分片(水平扩展)
✅ 高可用(自动故障转移)
✅ 多个节点共同存储、读写、冗余
🚀 Redis Cluster 架构图(最小生产级)
Redis Cluster (3 主 3 从)
┌────────────┐
│ redis-7000│←────┐
└────────────┘ │
┌────────────┐ │
│ redis-7001│←──┐ │
└────────────┘ │ │
┌────────────┐ │ │
│ redis-7002│←┐ │ │
└────────────┘ │ │ │
┌────────────┐ │ │ │
│ redis-7003│─┘ │ │
└────────────┘ │ │
┌────────────┐ │ │
│ redis-7004│────┘ │
└────────────┘ │
┌────────────┐─────┘
│ redis-7005│
└────────────┘
主节点:7000、7001、7002
从节点:7003、7004、7005(各自跟随前面主节点)
✅ 准备工作
我们采用 Docker + redis-cli + redis:7 镜像 手动搭建,学习效果最扎实!
🧱 一、创建网络
docker network create redis-cluster-net
🧰 二、启动 6 个 Redis 容器(3 主 3 从)
你可以创建一个 shell 脚本或手动跑 6 次:
for port in 7000 7001 7002 7003 7004 7005
do
mkdir -p ~/redis-cluster/${port}
cat > ~/redis-cluster/${port}/redis.conf <<EOF
port ${port}
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF
docker run -d \
--name redis-${port} \
--network redis-cluster-net \
-v ~/redis-cluster/${port}/redis.conf:/usr/local/etc/redis/redis.conf \
-v ~/redis-cluster/${port}/data:/data \
-p ${port}:${port} \
redis:7 \
redis-server /usr/local/etc/redis/redis.conf
done
🔧 三、用
redis-cli
创建集群
Redis 官方要求使用 redis-cli 创建集群(或者 redis-trib.rb)
安装 redis-cli(本地或容器中)之后,执行以下命令:
docker run -it --rm \
--network redis-cluster-net \
redis:7 \
redis-cli --cluster create \
redis-7000:7000 redis-7001:7001 redis-7002:7002 \
redis-7003:7003 redis-7004:7004 redis-7005:7005 \
--cluster-replicas 1
你会看到提示:
>>> Performing hash slots allocation ...
>>> Adding replica redis-7003 to redis-7000
>>> Adding replica redis-7004 to redis-7001
>>> Adding replica redis-7005 to redis-7002
>>> Nodes configuration updated
>>> Assigning slots to master nodes...
...
按 yes 回车即可自动建好集群!
✅ 四、测试 Redis Cluster 是否可用
进入任何一个节点:
docker exec -it redis-7000 redis-cli -p 7000
试着存取数据:
> set user1 tom
> get user1
然后换个节点(如 7002)读这个 key:
docker exec -it redis-7002 redis-cli -p 7002
> get user1
你可能看到 MOVED 提示,这是 Redis 告诉你这个 key 属于哪个 slot,自动跳转。
浙公网安备 33010602011771号