### 使用 Docker 搭建 Redis 分片集群
#### 一、概述
Redis 分片集群允许数据分布在多个节点上,从而提高性能和可用性。使用 Docker 和 `docker-compose` 可以简化这一过程并提供一致的环境配置[^1]。
---
#### 二、准备工作
在开始之前,请确认已安装以下工具:
- **Docker**:用于容器化运行 Redis 实例。
- **Docker Compose**:用于定义和启动多容器应用。
如果尚未安装这些工具,可参考官方文档完成安装。
---
#### 三、创建 Docker Compose 文件
下面是一个典型的 `docker-compose.yml` 配置文件示例,用于构建一个包含三个主节点和三个从节点的 Redis 分片集群:
```yaml
version: '3'
services:
redis-node-7000:
image: redis:latest
command: ["redis-server", "--port", "7000", "--cluster-enabled", "yes", "--cluster-config-file", "nodes.conf", "--appendonly", "yes"]
ports:
- "7000:7000"
networks:
- redis-cluster-net
redis-node-7001:
image: redis:latest
command: ["redis-server", "--port", "7001", "--cluster-enabled", "yes", "--cluster-config-file", "nodes.conf", "--appendonly", "yes"]
ports:
- "7001:7001"
networks:
- redis-cluster-net
redis-node-7002:
image: redis:latest
command: ["redis-server", "--port", "7002", "--cluster-enabled", "yes", "--cluster-config-file", "nodes.conf", "--appendonly", "yes"]
ports:
- "7002:7002"
networks:
- redis-cluster-net
redis-node-7003:
image: redis:latest
command: ["redis-server", "--port", "7003", "--cluster-enabled", "yes", "--cluster-config-file", "nodes.conf", "--appendonly", "yes", "--slaveof", "redis-node-7000", "7000"]
ports:
- "7003:7003"
depends_on:
- redis-node-7000
networks:
- redis-cluster-net
redis-node-7004:
image: redis:latest
command: ["redis-server", "--port", "7004", "--cluster-enabled", "yes", "--cluster-config-file", "nodes.conf", "--appendonly", "yes", "--slaveof", "redis-node-7001", "7001"]
ports:
- "7004:7004"
depends_on:
- redis-node-7001
networks:
- redis-cluster-net
redis-node-7005:
image: redis:latest
command: ["redis-server", "--port", "7005", "--cluster-enabled", "yes", "--cluster-config-file", "nodes.conf", "--appendonly", "yes", "--slaveof", "redis-node-7002", "7002"]
ports:
- "7005:7005"
depends_on:
- redis-node-7002
networks:
- redis-cluster-net
networks:
redis-cluster-net:
driver: bridge
```
上述配置中,前三个节点 (`7000`, `7001`, `7002`) 是主节点,而后三个节点 (`7003`, `7004`, `7005`) 则是从节点。
---
#### 四、初始化 Redis 集群
执行以下命令来启动 Redis 节点和服务:
```bash
docker-compose up -d
```
等待所有服务成功启动后,可以通过以下命令进入其中一个 Redis 容器,并手动创建集群:
```bash
docker exec -it <container_name> redis-cli --cluster create \
--cluster-replicas 1 \
<node_ip>:7000 <node_ip>:7001 <node_ip>:7002 \
<node_ip>:7003 <node_ip>:7004 <node_ip>:7005
```
其中 `<container_name>` 替换为实际的容器名称,而 `<node_ip>` 应替换为主机 IP 地址或 `localhost`[^2]。
---
#### 五、验证集群状态
完成后,可通过以下方式检查集群的状态:
```bash
docker exec -it <container_name> redis-cli -c -p 7000 CLUSTER INFO
```
正常情况下会返回类似于以下的信息:
```
cluster_state:ok
cluster_slots_assigned:16384
...
```
这表明集群已经正确建立[^3]。
---
#### 六、常见问题排查
1. 如果在 `redis-cli --cluster create` 过程中遇到 “Waiting for the cluster to join”,可能是由于网络延迟或其他原因导致通信失败。建议检查各节点之间的连通性和防火墙设置。
2. 若发现某些节点未能加入集群,则需重新尝试 `redis-cli --cluster create` 命令。
---
###