1

我正在尝试集群两个 RabbitMQ。

我有两台运行 Debian Wheezy 的机器(rabbit1 和 rabbit2)rabbitmq-server 2.8.4-1。(我知道那很旧,但这就是 Debian Wheezy 附带的。)

在rabbit1上我跑...

# rabbitmqctl stop_app
Stopping node rabbit@rabbit1 ...
...done.
# rabbitmqctl reset
Resetting node rabbit@rabbit1 ...
...done.
# rabbitmqctl cluster rabbit@rabbit2
Clustering node rabbit@rabbit1 with [rabbit@rabbit2] ...
Error: {no_running_cluster_nodes,[rabbit@rabbit2],[rabbit@rabbit2]}

但我没有克服这个错误。我错过了什么?

我检查的事情:

  • 我在两台机器上的 /var/lib/rabbitmq/.erlang.cookie 中使用相同的 cookie。
  • 我添加了条目,/etc/hosts并且可以从另一台机器 ping 每一台机器(仅使用 rabbit1,resp.rabbit2 作为名称)。
  • iptables 是空的。

更新:

从 rabbit1 我用 nmap 验证了 rabbit2 上的 epmd 正在监听 4369。

root@rabbit1:~# nmap -p 1- rabbit2
...
PORT      STATE SERVICE
4369/tcp  open  epmd
5672/tcp  open  amqp
51629/tcp open  unknown

解决方法:(作弊)

它既不是 erlang cookie,也不是主机名,也不是防火墙。其实我还是不知道是什么。但是我最终还是通过安装 RabbitMQ 提供的 Debian 包升级到了 RabbitMQ 3.5.4。(我知道这是作弊。)升级后一切都按预期工作,我的设置没有进一步更改。

4

1 回答 1

0

我也遇到了这个问题,结果证明是我的.erlang.cookie,尽管我确信我会在两台机器上将它们设置为相同的值(总是仔细检查)。

可能.erlang.cookie正在使用另一个,这取决于rabbitmq 的启动方式。如果它是使用 init 脚本启动的,那么/var/lib/rabbitmq/.erlang.cookie应该是正确的。如果你是这样启动 rabbitmq 的rabbitmq-server -detached,那么它可能在用户的主目录中。

您可以通过运行将打印出诊断信息来检查 rabbitmqctl 正在使用的 cookie 哈希(如果它可以在您不提供-n标志时连接,则与 rabbitmq-server 相同)。rabbitmqctl -n notarealnode status

主机名也可能很棘手,因为本地节点和远程节点都需要使用相同的名称来识别彼此和它们自己。换句话说rabbit1

此外,您没有提到您在哪里运行它,但我的在 EC2 VPC 中,这意味着我必须设置安全组以允许节点之间的流量。如果您不在 EC2 中,那么可能还有其他类型的外部防火墙需要配置。

于 2015-08-19T00:40:37.857 回答