RabbitMQ-AWS EC2集群地狱

RabbitMQ-AWS EC2集群地狱,rabbitmq,celery,Rabbitmq,Celery,对不起,我应该被枪毙了,因为我不得不问这个问题,但在这个问题上浪费了一天——我觉得我已经读了所有的东西 我无法在分布在三个不同区域的EC2实例(3)上创建集群。主持人: rabbit@ip-172-31-47-217 rabbit@ip-172-31-1-82 rabbit@ip-172-31-36-111 尝试创建群集之前的初始状态: ubuntu@ip-172-31-47-217:~$ sudo rabbitmqctl cluster_status Cluster status of no

对不起,我应该被枪毙了,因为我不得不问这个问题,但在这个问题上浪费了一天——我觉得我已经读了所有的东西

我无法在分布在三个不同区域的EC2实例(3)上创建集群。主持人:

rabbit@ip-172-31-47-217
rabbit@ip-172-31-1-82
rabbit@ip-172-31-36-111
尝试创建群集之前的初始状态:

ubuntu@ip-172-31-47-217:~$ sudo rabbitmqctl cluster_status
Cluster status of node 'rabbit@ip-172-31-47-217' ...
[{nodes,[{disc,['rabbit@ip-172-31-47-217']}]},
 {running_nodes,['rabbit@ip-172-31-47-217']},
 {partitions,[]}]

ubuntu@ip-172-31-36-111:~$ sudo rabbitmqctl cluster_status
Cluster status of node 'rabbit@ip-172-31-36-111' ...
[{nodes,[{disc,['rabbit@ip-172-31-36-111']}]},
 {running_nodes,['rabbit@ip-172-31-36-111']},
 {partitions,[]}]

ubuntu@ip-172-31-1-82:~$ sudo rabbitmqctl cluster_status
Cluster status of node 'rabbit@ip-172-31-1-82' ...
[{nodes,[{disc,['rabbit@ip-172-31-1-82']}]},
 {running_nodes,['rabbit@ip-172-31-1-82']},
 {partitions,[]}]
当我尝试从一台服务器检查另一台服务器的状态时:

sudo rabbitmqctl status -n rabbit@ip-172-31-1-82

Status of node 'rabbit@ip-172-31-1-82' ...
Error: unable to connect to node 'rabbit@ip-172-31-1-82': nodedown
nodes in question: ['rabbit@ip-172-31-1-82']

hosts, their running nodes and ports:
- unable to connect to epmd on ip-172-31-1-82: timeout (timed out)

current node details:
- node name: 'rabbitmqctl3835@ip-172-31-36-111'
- home dir: /var/lib/rabbitmq
- cookie hash: 0tsf/OyQZI7zobmv1Ia97w==
所有三台服务器都具有相同的erlang cookie哈希

我可以验证主机名设置是否正确:

host ip-172-31-36-111

ip-172-31-36-111.us-west-2.compute.internal has address 172.31.36.111
我知道端口是开放的:

netstat -plten | grep beam
因为我在这一点上打开了所有TCP和UDP作为测试,所以没有任何更改

最后,如果考虑到这些故障,这将表现出不同的行为:

sudo rabbitmqctl join_cluster --ram rabbit@ip-172-31-1-82

Clustering node 'rabbit@ip-172-31-47-217' with 'rabbit@ip-172-31-1-82' ...
Error: {cannot_discover_cluster,"The nodes provided are either offline or not running"}

请帮忙,这让你发疯。

问题是他们在不同的地区(可能是在EC2经典版中-你没有提到你是否在使用VPC)。这意味着他们无法通过其专用IP进行通信(参见示例)

平172.31.36.111 例如,将从其他服务器之一失败。使用主机名ping甚至可能会在DNS查找中失败

你的选择是:

  • 将它们放在单个区域的单独区域中(在EC2经典中,它们将能够通信)。在这种情况下,您也可以使用专有网络,将网络放在单独的子网中,但允许通过适当设置的安全组进行互连
  • 在每台服务器上设置/etc/hosts,以指向其他服务器的相关公共IP(您可以将弹性IP连接到每台服务器,以确保服务器重启时的稳定性)。为了清晰起见,您还可以设置每个服务器的主机名。将安全组设置为允许访问rabbitmq使用的相关端口。这样做可能会带来安全隐患,因为数据将通过公共互联网传输
  • 在群集中的每台服务器之间设置VPN。Amazon VPC有一个VPN设施,但我认为可以自己设置
  • 我认为只有选项1是最简单的。选项2具有重大的安全影响(我相信有一些方法可以保护集群服务器之间的连接,但据我所知,rabbitmq网站上没有记录这些方法)。选项3很复杂,但如果需要多个区域,可能是最佳选项


    请注意,rabbitmq集群并不意味着要在广泛的地理区域上运行,因为它们在面对网络分区时不太可靠。请参见此处:

    您可以尝试使用sudorabbitmq服务器启动一个代理-分离并从那里获取if