我在连接亚马逊EC2上的两个RabbitMQ节点时遇到了一些困难。 这两个节点是用puppet控制的,这是我的rabbit.config文件:
[
{mnesia, [{dump_log_write_threshold, 1000}]},
{rabbit, [
{tcp_listeners, [5672]},
{kernel, [{inet_dist_listen_min, 55700},{inet_dist_listen_max, 55800}]} ,
{cluster_nodes, ['rabbit@server1', 'rabbit@server2']}
]
}
].
我相信群集连接的权限端口是开放的。我能够在5672和4369上从server2 telnet到server1。
我在两台服务器上都有相同的/var/lib/rabbitmq/.erlang.cookie。
当我在net_admin:ping另一个节点时,从erlang命令行开始我回来了。
但是,当我在任何节点上运行cluster_status时,他们看起来并不是彼此都知道的。做stop_app,reset,rabbitmqctl cluster rabbit @ server1我总是得到以下错误: 错误:{no_running_cluster_nodes ...
有没有人解决过类似问题,或者知道如何解决?
答案 0 :(得分:1)
您是否打开了55700和55800之间的端口?
尝试检查这一点以了解RabbitMQ侦听的其他端口:
netstat -plten | grep beam
我会仔细检查一下这个饼干......
答案 1 :(得分:1)
与Ivan建议的一样,您可以先检查服务器正在侦听哪些端口,然后将这些TCP规则添加到服务器的安全组中。这是一个很好的第一步。
netstat -plten | grep beam
返回以下内容(如果服务器仍在运行而不是stop_app)
tcp 0 0 0.0.0.0:37419 0.0.0.0:* LISTEN 498 118739 15519/beam
tcp 0 0 0.0.0.0:15672 0.0.0.0:* LISTEN 498 119032 15519/beam
tcp 0 0 0.0.0.0:55672 0.0.0.0:* LISTEN 498 119029 15519/beam
tcp 0 0 :::5672 :::* LISTEN 498 119018 15519/beam
请注意amqp和Web服务器的公共端口5672
15672
55672
,另一端口是群集正在侦听的端口。检查您的其他实例并确保您的范围包括它们,然后重试并且它将起作用。
安全组>入境> TCP规则:
30000-65535
并且安全组允许sg-XXXXXX
并重复回复安全组,并且不要忘记“应用规则”。
接下来请确保您共享/var/lib/rabbitmq/.erlang.cookie(只需从一台服务器复制到所有其他服务器并重新启动实例)
然后在命令行上:
[root@ip-172-31-27-150 ~]# rabbitmqctl stop_app
Stopping node 'rabbit@ip-172-31-27-150' ...
...done.
[root@ip-172-31-27-150 ~]# rabbitmqctl reset
Resetting node 'rabbit@ip-172-31-27-150' ...
...done.
[root@ip-172-31-27-150 ~]# rabbitmqctl join_cluster rabbit@ip-172-31-28-79
Clustering node 'rabbit@ip-172-31-27-150' with 'rabbit@ip-172-31-28-79' ...
...done.
最后,请不要忘记重新启动实例rabbitmqctl start_app
这对5个EC2实例起作用。
答案 2 :(得分:0)
感谢您的回答,我所做的是删除除.erlang.cookie(rm -R / var / lib / rabbitmq /)之外的此目录的内容。并且群集连接成功。 干杯!