对不起,我甚至应该问这个问题,但在这个问题上浪费了一天时间,感觉我已经阅读了所有内容。
我无法在分布在三个不同区域的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 classic中-您没有提到是否使用VPC)。这意味着他们不能通过自己的私有IP进行通信(例如,不同地区的EC2实例可以通过自己的私人IP地址进行通信吗?)
ping 172.31.36.111将从其他服务器之一发生故障。使用主机名Ping可能甚至会在DNS查找中失败。
您的选择是:
- 将它们放在单个区域的单独区域中(在EC2经典中,它们将能够通信)。在这种情况下,您也可以使用VPC,将放在单独的子网中,但允许通过适当设置的安全组进行互连
- 在每台服务器上设置/etc/hosts,以指向其他服务器的相关公共IP(您可以将弹性IP连接到每台服务器,以确保服务器重新启动时的稳定性)。为了清楚起见,您还可以设置每个服务器的主机名。将您的安全组设置为允许访问rabbitmq使用的相关端口。这样做可能会带来安全隐患,因为数据将通过公共互联网传输
- 在群集中的每个服务器之间设置一个VPN。亚马逊专有网络有一个VPN设施,但我认为有一些方法可以自己设置
我认为只有选项1是最简单的。选项2具有重大的安全影响(我相信有一些方法可以保护集群服务器之间的连接,但据我所知,rabbitmq网站上没有记录这些方法)。选项3很复杂,但如果您需要多个区域,则可能是最佳选项。
请注意,rabbitmqcluster并不意味着要在广阔的地理区域上运行,因为它们在面对网络分区时不太可靠。请参见此处:https://www.rabbitmq.com/clustering.html