Docker Compose部署Redis集群时一直等待的问题排查
Redis集群Docker Compose部署故障排查
我的环境
- mac os ventura 13.6.3
- Docker version 20.10.21
需求
通过Docker Compose部署Redis集群,不依赖额外redis.conf文件,直接用CLI参数传递配置。
当前配置与操作
编写的docker-compose.yml如下:
version: '3' services: redis1: image: redis ports: - "7101:7101" - "17101:17101" command: redis-server --port 7101 --bind 0.0.0.0 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 3000 --appendonly yes --appendfilename appendonly.aof redis2: image: redis ports: - "7102:7102" - "17102:17102" command: redis-server --port 7102 --bind 0.0.0.0 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 3000 --appendonly yes --appendfilename appendonly.aof redis3: image: redis ports: - "7103:7103" - "17103:17103" command: redis-server --port 7103 --bind 0.0.0.0 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 3000 --appendonly yes --appendfilename appendonly.aof redis4: image: redis ports: - "7104:7104" - "17104:17104" command: redis-server --port 7104 --bind 0.0.0.0 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 3000 --appendonly yes --appendfilename appendonly.aof redis5: image: redis ports: - "7105:7105" - "17105:17105" command: redis-server --port 7105 --bind 0.0.0.0 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 3000 --appendonly yes --appendfilename appendonly.aof redis6: image: redis ports: - "7106:7106" - "17106:17106" command: redis-server --port 7106 --bind 0.0.0.0 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 3000 --appendonly yes --appendfilename appendonly.aof
执行docker compose up -d启动容器后,运行集群创建命令:
redis-cli --cluster create 127.0.0.1:7101 127.0.0.1:7102 127.0.0.1:7103 127.0.0.1:7104 127.0.0.1:7105 127.0.0.1:7106 --cluster-replicas 1
命令执行后卡在Waiting for the cluster to join阶段,无法完成集群搭建。
问题原因
Redis集群节点之间需要通过集群总线端口(默认是服务端口+10000,即你配置的17101-17106)进行通信,同时Docker容器内的Redis节点默认会把容器内部IP注册到集群,但当你用127.0.0.1创建集群时,节点之间无法通过正确的网络地址互相访问,导致集群无法完成握手。
必须给每个Redis节点添加三个关键参数:
--cluster-announce-ip: 节点对外宣告的IP(本地部署用127.0.0.1即可)--cluster-announce-port: 节点对外宣告的服务端口(如7101)--cluster-announce-bus-port: 节点对外宣告的集群总线端口(如17101)
另外,为避免容器重启后节点配置冲突,建议给每个节点挂载独立卷保存nodes.conf和AOF文件。
修改后的配置
更新docker-compose.yml如下:
version: '3' services: redis1: image: redis ports: - "7101:7101" - "17101:17101" volumes: - redis1-data:/data command: redis-server --port 7101 --bind 0.0.0.0 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 3000 --appendonly yes --appendfilename appendonly.aof --cluster-announce-ip 127.0.0.1 --cluster-announce-port 7101 --cluster-announce-bus-port 17101 redis2: image: redis ports: - "7102:7102" - "17102:17102" volumes: - redis2-data:/data command: redis-server --port 7102 --bind 0.0.0.0 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 3000 --appendonly yes --appendfilename appendonly.aof --cluster-announce-ip 127.0.0.1 --cluster-announce-port 7102 --cluster-announce-bus-port 17102 redis3: image: redis ports: - "7103:7103" - "17103:17103" volumes: - redis3-data:/data command: redis-server --port 7103 --bind 0.0.0.0 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 3000 --appendonly yes --appendfilename appendonly.aof --cluster-announce-ip 127.0.0.1 --cluster-announce-port 7103 --cluster-announce-bus-port 17103 redis4: image: redis ports: - "7104:7104" - "17104:17104" volumes: - redis4-data:/data command: redis-server --port 7104 --bind 0.0.0.0 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 3000 --appendonly yes --appendfilename appendonly.aof --cluster-announce-ip 127.0.0.1 --cluster-announce-port 7104 --cluster-announce-bus-port 17104 redis5: image: redis ports: - "7105:7105" - "17105:17105" volumes: - redis5-data:/data command: redis-server --port 7105 --bind 0.0.0.0 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 3000 --appendonly yes --appendfilename appendonly.aof --cluster-announce-ip 127.0.0.1 --cluster-announce-port 7105 --cluster-announce-bus-port 17105 redis6: image: redis ports: - "7106:7106" - "17106:17106" volumes: - redis6-data:/data command: redis-server --port 7106 --bind 0.0.0.0 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 3000 --appendonly yes --appendfilename appendonly.aof --cluster-announce-ip 127.0.0.1 --cluster-announce-port 7106 --cluster-announce-bus-port 17106 volumes: redis1-data: redis2-data: redis3-data: redis4-data: redis5-data: redis6-data:
重新部署与验证
- 停止并清理原有容器:
docker compose down -v
- 启动新容器:
docker compose up -d
- 再次执行集群创建命令:
redis-cli --cluster create 127.0.0.1:7101 127.0.0.1:7102 127.0.0.1:7103 127.0.0.1:7104 127.0.0.1:7105 127.0.0.1:7106 --cluster-replicas 1
- 验证集群状态:
redis-cli -c -p 7101 cluster info
或者查看节点列表:
redis-cli -c -p 7101 cluster nodes
内容的提问来源于stack exchange,提问作者Jerry
相关产品推荐
相关产品推荐

