2.7 KiB
2.7 KiB
Redis Cluster
此服务用于部署一个包含 6 个节点(3 个主节点 + 3 个从节点)的 Redis 集群。
服务
redis-1到redis-6:Redis 集群节点redis-cluster-init:初始化容器(一次性设置)
环境变量
| 变量名 | 说明 | 默认值 |
|---|---|---|
REDIS_VERSION |
Redis 镜像版本 | 8.2.1-alpine |
请根据实际需求修改 .env 文件。
卷
redis_1_data到redis_6_data:每个 Redis 节点的数据持久化
使用方法
启动 Redis 集群
# 启动所有 Redis 节点
docker compose up -d
# 初始化集群(仅首次)
docker compose --profile init up redis-cluster-init
# 验证集群状态
docker exec redis-1 redis-cli --cluster check redis-1:6379
连接到集群
# 使用 redis-cli 连接
docker exec -it redis-1 redis-cli -c
# 测试集群
127.0.0.1:6379> CLUSTER INFO
127.0.0.1:6379> SET mykey "Hello"
127.0.0.1:6379> GET mykey
从应用程序访问
在应用程序中使用集群模式连接:
# Python 示例
from redis.cluster import RedisCluster
startup_nodes = [
{"host": "localhost", "port": "7000"},
{"host": "localhost", "port": "7001"},
{"host": "localhost", "port": "7002"},
]
rc = RedisCluster(startup_nodes=startup_nodes, decode_responses=True)
rc.set("foo", "bar")
print(rc.get("foo"))
端口
- 7000-7005:映射到每个 Redis 节点的 6379 端口
集群信息
- 主节点:3 个节点(redis-1、redis-2、redis-3)
- 从节点:3 个节点(redis-4、redis-5、redis-6)
- 总槽数:16384(分布在主节点间)
添加新节点
向集群添加更多节点:
- 在
docker-compose.yaml中添加新服务 - 启动新节点
- 添加到集群:
docker exec redis-1 redis-cli --cluster add-node new-node-ip:6379 redis-1:6379
docker exec redis-1 redis-cli --cluster reshard redis-1:6379
移除节点
# 移除节点
docker exec redis-1 redis-cli --cluster del-node redis-1:6379 <node-id>
注意事项
- 集群初始化只需执行一次
- 每个节点存储数据的子集
- Redis 集群自动处理故障转移
- 生产环境至少需要 3 个主节点
- 数据自动复制到从节点
安全性
- 生产环境添加密码验证:
command: redis-server --requirepass yourpassword --cluster-enabled yes ...
- 使用防火墙规则限制访问
- 生产环境中考虑使用 TLS 进行节点间通信
许可证
Redis 采用 Redis Source Available License 2.0(RSALv2)许可。详情请参见 Redis GitHub。