搭建Redis集群遇到的问题:Waiting for the cluster to join~~~

在搭建Redis集群时遇到程序阻塞并显示'Waitingfortheclustertojoin',原因是集群总线端口未开放。解决办法是确保每个节点的客户端端口和集群总线端口(如6379+10000=16379)都已开放。执行clustercreate命令后,节点配置更新,但需等待集群加入。检查并开启相应端口后,集群创建完成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:

搭建Redis集群的过程中,执行到cluster create : … 的时候,发现程序发生阻塞,显示:Waiting for the cluster to join 的字样,然后就无休无尽的等待…
搭建Redis集群遇到的问题:Waiting for the cluster to join~~~
遇到这种情况大部分是因为集群总线的端口没有开放!

集群总线
每个Redis集群中的节点都需要打开两个TCP连接。一个连接用于正常的给Client提供服务,比如6379,还有一个额外的端口(通过在这个端口号上加10000)作为数据端口,例如:redis的端口为6379,那么另外一个需要开通的端口是:6379 + 10000, 即需要开启 16379。16379端口用于集群总线,这是一个用二进制协议的点对点通信信道。这个集群总线(Cluster bus)用于节点的失败侦测、配置更新、故障转移授权,等等。

解决方案:
知道了问题所在, 自然就知道如何去解决了, 只需要将开启Redis端口对应的 集群总线端口即可。例如: 6379 + 10000 = 16379。所以开放每个集群节点的客户端端口和集群总线端口才能成功创建集群!

[root@TR src]# ./redis-cli --cluster create 106.14.157.48:6379 49.232.112.117:6381 101.34.253.57:6383 106.14.157.48:6380 49.232.112.117:6382 101.34.253.57:6384 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 49.232.112.117:6382 to 106.14.157.48:6379
Adding replica 101.34.253.57:6384 to 49.232.112.117:6381
Adding replica 106.14.157.48:6380 to 101.34.253.57:6383
M: 2d9ab9c1c95c13478758ae6ec45434fdb620688c 106.14.157.48:6379
   slots:[0-5460] (5461 slots) master
M: edd1856f57ffbb50ee5ce690964b5e780118608e 49.232.112.117:6381
   slots:[5461-10922] (5462 slots) master
M: 5998783763f617cc7ff40dd2d55ad0cbce72ea66 101.34.253.57:6383
   slots:[10923-16383] (5461 slots) master
S: f0fdd2cd69c1e37ff510cf990ae381005609fc81 106.14.157.48:6380
   replicates 5998783763f617cc7ff40dd2d55ad0cbce72ea66
S: b2893c8a996c726264096a49b84df367509b9ceb 49.232.112.117:6382
   replicates 2d9ab9c1c95c13478758ae6ec45434fdb620688c
S: 560ef0cd7c6799a12a75c930cb0063cc2d613cb4 101.34.253.57:6384
   replicates edd1856f57ffbb50ee5ce690964b5e780118608e
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join

>>> Performing Cluster Check (using node 106.14.157.48:6379)
M: 2d9ab9c1c95c13478758ae6ec45434fdb620688c 106.14.157.48:6379
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
M: edd1856f57ffbb50ee5ce690964b5e780118608e 49.232.112.117:6381
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
S: f0fdd2cd69c1e37ff510cf990ae381005609fc81 106.14.157.48:6380
   slots: (0 slots) slave
   replicates 5998783763f617cc7ff40dd2d55ad0cbce72ea66
S: b2893c8a996c726264096a49b84df367509b9ceb 49.232.112.117:6382
   slots: (0 slots) slave
   replicates 2d9ab9c1c95c13478758ae6ec45434fdb620688c
M: 5998783763f617cc7ff40dd2d55ad0cbce72ea66 101.34.253.57:6383
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: 560ef0cd7c6799a12a75c930cb0063cc2d613cb4 101.34.253.57:6384
   slots: (0 slots) slave
   replicates edd1856f57ffbb50ee5ce690964b5e780118608e
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

### 使用 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` 命令。 --- ###
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖太乙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值