Docker 搭建Redis Cluster
- 创建 Docker 网络
为 Redis 集群创建专用网络,确保容器间通信:
docker network create redis-cluster-net
- 编写 docker-compose.yml 文件
创建文件 docker-compose.yml,定义 6 个 Redis 节点(3 主 + 3 从):
version: '3.8'
services:
redis-node-1:
image: redis:7.0.12
container_name: redis-node-1
ports:
- "6379:6379" # 客户端端口
- "16379:16379" # 集群总线端口
volumes:
- ./data/redis-node-1:/data
- ./conf/redis.conf:/usr/local/etc/redis/redis.conf
command: redis-server /usr/local/etc/redis/redis.conf
networks:
- redis-cluster-net
redis-node-2:
image: redis:7.0.12
container_name: redis-node-2
ports:
- "6380:6379"
- "16380:16379"
volumes:
- ./data/redis-node-2:/data
- ./conf/redis.conf:/usr/local/etc/redis/redis.conf
command: redis-server /usr/local/etc/redis/redis.conf
networks:
- redis-cluster-net
redis-node-3:
image: redis:7.0.12
container_name: redis-node-3
ports:
- "6381:6379"
- "16381:16379"
volumes:
- ./data/redis-node-3:/data
- ./conf/redis.conf:/usr/local/etc/redis/redis.conf
command: redis-server /usr/local/etc/redis/redis.conf
networks:
- redis-cluster-net
redis-node-4:
image: redis:7.0.12
container_name: redis-node-4
ports:
- "6382:6379"
- "16382:16379"
volumes:
- ./data/redis-node-4:/data
- ./conf/redis.conf:/usr/local/etc/redis/redis.conf
command: redis-server /usr/local/etc/redis/redis.conf
networks:
- redis-cluster-net
redis-node-5:
image: redis:7.0.12
container_name: redis-node-5
ports:
- "6383:6379"
- "16383:16379"
volumes:
- ./data/redis-node-5:/data
- ./conf/redis.conf:/usr/local/etc/redis/redis.conf
command: redis-server /usr/local/etc/redis/redis.conf
networks:
- redis-cluster-net
redis-node-6:
image: redis:7.0.12
container_name: redis-node-6
ports:
- "6384:6379"
- "16384:16379"
volumes:
- ./data/redis-node-6:/data
- ./conf/redis.conf:/usr/local/etc/redis/redis.conf
command: redis-server /usr/local/etc/redis/redis.conf
networks:
- redis-cluster-net
networks:
redis-cluster-net:
external: true
- 配置 Redis 集群参数
创建配置文件 conf/redis.conf,启用集群模式:
port 6379
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
dir /data
- 启动容器
创建目录
mkdir -p
{conf,data/redis-node-1,data/redis-node-2,data/redis-node-3,data/redis-node-4,data/redis-node-5,data/redis-node-6}
启动所有容器
docker-compose up -d
- 初始化 Redis 集群
进入任意容器执行集群初始化命令:
进入 redis-node-1 容器
docker exec -it redis-node-1 bash
执行集群初始化命令(主从自动分配)
redis-cli --cluster create \
redis-node-1:6379 \
redis-node-2:6379 \
redis-node-3:6379 \
redis-node-4:6379 \
redis-node-5:6379 \
redis-node-6:6379 \
--cluster-replicas 1
--cluster-replicas 1
表示每个主节点分配 1 个从节点。 根据提示输入 yes 确认哈希槽分配。
- 验证集群状态
# 连接到任意节点
redis-cli -c -h redis-node-1 -p 6379
# 查看集群信息
127.0.0.1:6379> CLUSTER INFO
# 查看节点列表
127.0.0.1:6379> CLUSTER NODES
- 测试数据分片与高可用
# 写入数据(自动路由到对应节点)
127.0.0.1:6379> SET key1 value1
# 模拟主节点故障(观察从节点是否晋升)
docker stop redis-node-1
# 再次查询数据(应自动切换到新主节点)
127.0.0.1:6379> GET key1