redis3主3从搭建方式
以下是通过 Docker 搭建 Redis 集群的完整方案,涵盖单机快速部署、多机生产级部署、验证测试及扩容管理,结合多个来源的最佳实践整理而成:
# 🔧 一、单机快速搭建(开发测试)
适用于本地学习或测试环境,一台机器模拟多节点集群。
# 步骤:
编写
docker-compose.yml
创建 6 个节点(3 主 3 从):version: '3.7' services: redis-node1: image: redis:latest ports: ["6371:6379", "16371:16379"] command: redis-server --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes # 重复配置 redis-node2 到 redis-node6(端口递增:6372-6376, 16372-16376)
1
2
3
4
5
6
7启动容器
docker-compose up -d
1创建集群
docker exec -it redis-node1 redis-cli --cluster create \ 172.18.0.2:6379 172.18.0.3:6379 172.18.0.4:6379 \ 172.18.0.5:6379 172.18.0.6:6379 172.18.0.7:6379 \ --cluster-replicas 1
1
2
3
4--cluster-replicas 1
:每个主节点配 1 个从节点。
# ⚙️ 二、多机生产部署(3 台服务器)
跨物理机部署,保障高可用。
# 步骤:
每台服务器部署 2 个节点(共 6 节点)
# 服务器 1(172.16.17.100) docker run -d --name redis-7000 -p 7000:7000 -p 17000:17000 \ -e CLUSTER_ANNOUNCE_IP=172.16.17.100 redis:latest \ redis-server --cluster-enabled yes --port 7000 # 同服务器启动 redis-7001(端口 7001/17001)
1
2
3
4
5重复操作:
- 服务器 2(172.16.17.101):部署
redis-7002
、redis-7003
- 服务器 3(172.16.17.102):部署
redis-7004
、redis-7005
。
- 服务器 2(172.16.17.101):部署
创建集群(任意一台服务器执行)
docker exec -it redis-7000 redis-cli --cluster create \ 172.16.17.100:7000 172.16.17.100:7001 \ 172.16.17.101:7002 172.16.17.101:7003 \ 172.16.17.102:7004 172.16.17.102:7005 \ --cluster-replicas 1
1
2
3
4
5- 自动分配:主从节点会跨物理机分布(如主节点在服务器1,从节点在服务器2)。
# ✅ 三、集群验证与测试
确保集群正常工作并具备容错能力。
检查集群状态
docker exec -it redis-7000 redis-cli cluster nodes
1预期输出:
- 3 个
master
在线,每个master
有 1 个slave
- 所有 Slot(16384 个)已分配完成。
- 3 个
数据读写测试
# 节点1写入 docker exec -it redis-7000 redis-cli -c set user:101 "Alice" # 节点2读取(自动重定向) docker exec -it redis-7002 redis-cli -c get user:101 # 返回 "Alice"
1
2
3
4故障转移测试
# 停止主节点 docker stop redis-7000 # 等待 15 秒(cluster-node-timeout),检查从节点是否升主 docker exec -it redis-7001 redis-cli cluster nodes | grep master
1
2
3
4
# 🛠️ 四、扩容与管理
# 扩容主节点
- 新增节点(例如端口 7006)
docker run -d --name redis-7006 -p 7006:7006 -p 17006:17006 \ -e CLUSTER_ANNOUNCE_IP=172.16.17.103 redis:latest \ redis-server --cluster-enabled yes --port 7006
1
2
3 - 加入集群并分配 Slot
# 加入集群 docker exec -it redis-7000 redis-cli --cluster add-node 172.16.17.103:7006 172.16.17.100:7000 # 分配 Slot(从其他主节点迁移) docker exec -it redis-7000 redis-cli --cluster reshard 172.16.17.103:7006 --cluster-from <源节点ID> --cluster-slots 1000
1
2
3
4
# 日常运维
操作 | 命令 |
---|---|
节点安全关闭 | docker stop redis-7000 && docker start redis-7000 |
集群状态检查 | docker exec -it redis-node1 redis-cli cluster info |
备份数据 | 挂载数据卷(-v /redis-data:/data ),定期备份持久化文件 |
# ⚠️ 关键配置与避坑指南
网络要求
- 节点间需开放客户端端口(如 6379)和集群总线端口(+10000,如 16379)。
- 跨服务器时禁用防火墙或放行端口:
firewall-cmd --add-port={7000-7005}/tcp --permanent && firewall-cmd --reload
1
配置一致性
- 所有节点需启用集群模式:
cluster-enabled yes cluster-node-timeout 15000 # 超时时间(毫秒)
1
2 - 生产环境务必设置密码:
requirepass yourpassword masterauth yourpassword
1
2
- 所有节点需启用集群模式:
客户端连接配置(Spring Boot 示例)
spring: redis: cluster: nodes: - 172.16.17.100:7000 - 172.16.17.100:7001 - 172.16.17.101:7002 - 172.16.17.101:7003 - 172.16.17.102:7004 - 172.16.17.102:7005 password: yourpassword
1
2
3
4
5
6
7
8
9
10
11
# 💎 总结
- 单机部署:适合快速验证,使用 Docker Compose 一键启动。
- 多机部署:生产首选,主从跨物理机,通过
CLUSTER_ANNOUNCE_IP
指定公网 IP。 - 高可用核心:Slot 分片存储 + 主从自动故障转移(超时触发选举)。
执行
docker-compose up -d
后若集群创建失败,检查节点日志:docker logs redis-node1 # 排查端口冲突或配置错误
1
编辑 (opens new window)
上次更新: 2025/06/24, 00:41:57