1

我在让兔子集群时遇到服务器问题。

我在 ec2 上启动了两个节点。

在启动的第一个节点上,我这样做。

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

I boot another node.
sudo service rabbitmq-server stop
#Copy cookie from the first server booted
sudo su - -c 'echo -n "cookie" > /var/lib/rabbitmq/.erlang.cookie'
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl cluster rabbit@server1

1) sever1 正在运行 2) 需要打开哪些端口?我有 22、4369、5672

sudo rabbitmqctl cluster rabbit@aws-rabbit-server-east-development-20121102162143
Clustering node 'rabbit@aws-rabbit-server-east-development-20121103033005' with ['rabbit@aws-rabbit-server-east-development-20121102162143'] ...
Error: {no_running_cluster_nodes,['rabbit@aws-rabbit-server-east-development-20121102162143'],
                                 ['rabbit@aws-rabbit-server-east-development-20121102162143']}

那里的文档可能缺少什么或我缺少什么?

4

1 回答 1

6

我在两台 Windows 机器上的 EC2 上遇到了类似的问题。我最终让它工作了,但我不确定我是否以正确的方式做到了,所以可能会有更好的解决方案。

我发现的问题是两个节点在尝试集群时看不到对方。每次启动 Rabbit 节点时,它似乎都被动态分配了一个端口号。

这显然使得很难知道在安全组中打开哪个端口,所以为了解决这个问题,我在分配端口时限制了 Rabbit 选择的端口范围。我将其限制在每个节点上 1 个端口的范围内,因此我始终知道分配了哪个端口。

我发现最简单的方法是编辑 sbin\rabbitmq-service.bat 文件。

找到行-kernel inet_default_connect_options "[{nodelay,true}]" ^

在下面的文件中添加以下两行:

-kernel inet_dist_listen_min ##### ^ -kernel inet_dist_listen_max ##### ^

用您选择的端口号替换#####。

所以你现在应该打开以下端口:

5672 - RabbitMQ 的监听端口

4369 - Erlang 端口映射器守护进程

##### - 为 Erlang 节点选择的端口号进行通信

因为 Erlang 不识别 FQDN,您可能需要修改所有服务器上的 hosts 文件,以确保它们都能够将所有 Erlang 节点名称解析为 IP 地址,例如

123.123.123.111 节点 1

123.123.123.222 节点2

完成此操作后,您应该能够从另一个节点看到每个节点。您可以通过从命令行调用以下命令来执行此操作(将 rabbit@NODE2 替换为您想要查看的任何节点)

rabbitmqctl status -n rabbit@NODE2

希望这能给您一些帮助,我不是专家,但发现这对我有用!

于 2012-12-07T12:01:35.617 回答