10

我有 3 台机器并为 redis 集群创建了 6 个节点,几个月前我已经成功创建它,但现在它掉线了,我尽力修复它,但它不起作用,所以我清理所有数据并从零重新创建它,当我使用以下命令创建集群时,它在这里阻塞,并等待节点加入集群,我对其进行了一些研究,我清理了我的数据,一次又一次地记录,一次又一次地做,但它仍然不起作用。

redis-trib.rb create --replicas 1 10.2.1.208:6379 10.2.1.208:6380 10.2.1.209:6379 10.2.1.209:6380 10.2.1.15:6379 10.2.1.15:6380

显示结果

redis-trib.rb create --replicas 1 10.2.1.208:6379 10.2.1.208:6380 10.2.1.209:6379 10.2.1.209:6380 10.2.1.15:6379 10.2.1.15:6380
>>> Creating cluster
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
10.2.1.208:6379
10.2.1.209:6379
10.2.1.15:6379
Adding replica 10.2.1.209:6380 to 10.2.1.208:6379
Adding replica 10.2.1.208:6380 to 10.2.1.209:6379
Adding replica 10.2.1.15:6380 to 10.2.1.15:6379
M: 73b3b99bb17de63aa99eaf592376f0a06feb3d66 10.2.1.208:6379
   slots:0-5460 (5461 slots) master
S: 05b33ed6691797faaf7ccec1541396472b9d2866 10.2.1.208:6380
   replicates f14702ebb1462b313dd7eb4809ec50e30e4eef36
M: f14702ebb1462b313dd7eb4809ec50e30e4eef36 10.2.1.209:6379
   slots:5461-10922 (5462 slots) master
S: 3a9f433a8503281b0ddfc6ec69016908735053b8 10.2.1.209:6380
   replicates 73b3b99bb17de63aa99eaf592376f0a06feb3d66
M: 2fd97e8842828dba6b425b6a30e764fb06915737 10.2.1.15:6379
   slots:10923-16383 (5461 slots) master
S: c46db592d49bc1e9d8b5efb27b9799929c5186a4 10.2.1.15:6380
   replicates 2fd97e8842828dba6b425b6a30e764fb06915737
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...........................................................................^C/usr/local/bin/redis-trib.rb:652:in `sleep': Interrupt
        from /usr/local/bin/redis-trib.rb:652:in `wait_cluster_join'
        from /usr/local/bin/redis-trib.rb:1305:in `create_cluster_cmd'
        from /usr/local/bin/redis-trib.rb:1695:in `<main>'
4

5 回答 5

14

来自Redis 官网的集群教程

每个 Redis 集群节点都需要打开两个 TCP 连接。服务客户端的普通Redis TCP端口,比如6379,加上数据端口加上10000得到的端口,例子中是16379。

第二个端口用于集群总线,即使用二进制协议的节点到节点通信通道。节点使用集群总线进行故障检测、配置更新、故障转移授权等。客户端不应该尝试与集群总线端口通信,而始终使用正常的 Redis 命令端口,但请确保在防火墙中打开这两个端口,否则 Redis 集群节点将无法通信。

命令端口和集群总线端口偏移量是固定的,始终为 10000。

我使用了 AWS,但没有打开导致此问题的端口 16379 和 16380。

于 2016-09-20T04:10:50.147 回答
10

如果这 6 个节点之间没有防火墙问题,您可以检查redis.conf中的绑定设置。

当然,你应该在局域网 IP 上绑定 redis 服务,但还有一件事:

删除 127.0.0.1 或将 127.0.0.1 移到 LAN IP 后的末尾!

就像这样:bind 10.2.1.x 127.0.0.1bind 10.2.1.x

当我在 3 个服务器上的 3 个节点之间创建一个集群时,我遇到了这个问题,等待集群永远加入。当您将 127.0.0.1 放在 LAN IP 的前面时,这可能是 redis 中的一个错误,至少在 Redis 5.0 中。

于 2018-11-03T03:31:47.987 回答
1

这些答案都不适合我,但我发现以下博客有帮助:

https://linux.m2osw.com/redis-infamous-waiting-cluster-join-message

问题是因为我创建了一个原始服务器并将其克隆以生成其他两个节点。克隆的节点使用相同的节点 ID,而 redis 不喜欢这样。

解决方案是停止 redis 服务器,然后删除 nodes.conf 文件,其实际名称在您的 redis.conf 文件中定义。我的实际上被称为nodes-6379.conf。然后重启redis服务器。在所有节点上执行此操作。

于 2021-01-27T23:44:28.597 回答
1

如果您使用 127.0.0.1 作为主机名而不是使用 IP 地址,您也可能会看到此问题。在这种情况下,您需要将其更改为使用 IP 地址作为主机名。https://stackoverflow.com/a/36080707/5159284

于 2021-02-02T11:40:27.620 回答
0

这可能是因为复制了预装 Redis 的虚拟机/容器。当您安装 Redis 时,它会使用预先创建的 ID 创建配置,并且会出现相同的配置:

# cat /etc/redis/redis.conf
...
cluster-config-file nodes-6379.conf
...

如果是这种情况,您可以检查并删除:

# rm /var/lib/redis/nodes-6379.conf

并且重启redis后。这些路径适用于 Ubuntu。链接到对我有帮助的帖子https://linux.m2osw.com/redis-infamous-waiting-cluster-join-message

于 2022-01-02T23:00:44.657 回答