Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon ec2 如何连接EC2上的两个rabbitmq节点-_Amazon Ec2_Rabbitmq_Cluster Computing - Fatal编程技术网

Amazon ec2 如何连接EC2上的两个rabbitmq节点-

Amazon ec2 如何连接EC2上的两个rabbitmq节点-,amazon-ec2,rabbitmq,cluster-computing,Amazon Ec2,Rabbitmq,Cluster Computing,我在EC2中有两个Ubuntu实例,我想对它们进行集群 一个ip将被称为-X(配置显示的“净地址”ip),其公共ip将被称为PX。 另一个ip是Y,它的公共ip是Y 所以现在我在两台机器上都做了以下操作 已安装最新的rabbbitmq 安装了管理插件 为5672(兔子)和15672(管理插件)打开端口 已通过我的测试应用程序连接到兔子 已连接到ui 现在来看集群。 我执行了以下命令 在X上 rabbitmqctl cluster_status 获取的节点名为'rabbit@ip-X'(其中X是

我在EC2中有两个Ubuntu实例,我想对它们进行集群

一个ip将被称为-X(配置显示的“净地址”ip),其公共ip将被称为PX。
另一个ip是Y,它的公共ip是Y

所以现在我在两台机器上都做了以下操作

  • 已安装最新的rabbbitmq
  • 安装了管理插件
  • 为5672(兔子)和15672(管理插件)打开端口
  • 已通过我的测试应用程序连接到兔子
  • 已连接到ui
  • 现在来看集群。 我执行了以下命令

    在X上

    rabbitmqctl cluster_status
    
    获取的节点名为'rabbit@ip-X'(其中X是内部IP) 在Y上

    rabbitmqctl stop_app
    rabbitmqctl join_cluster --ram rabbit@ip-X
    
    我得到

    "The nodes provided are either offline or not running"
    
    显然,这是私有ip,因此其他实例无法连接。 我如何告诉第二个实例第一个位于何处

    编辑
    防火墙完全关闭,我有一个从一个远程到另一个远程的telnet连接
    (至端口5672(rmq)、15672(ui)、4369(群集端口))。 两台服务器上的cookie(日志中cookie的哈希相同)

    在运行join cluster命令时录制tcp,并在wireshark中监视。我看到了以下内容(没有确认)

    所以我用电脑关闭了防火墙 sudoufw禁用 (只是为了考试)我重新打字了 sudo rabbitmqctl加入集群--ramrabbit@ip-XX 连接已创建,但被远程兔子终止 在这里:

    消息仍然是
    “提供的节点脱机或未运行”


    (远程兔子应用程序肯定正在运行)

    您需要确保节点可以相互访问。RabbitMQ使用分布式Erlang原语跨节点通信,因此您还必须在防火墙中打开几个端口。见:

    详情请参阅

    您还应该为集群中的节点使用相同的数据中心,因为RabbitMQ在网络分区上可能会变得非常sad。如果您的节点位于不同的数据中心,您应该使用Solve或federation插件,而不是群集来复制数据


    编辑:不要忘记在所有节点上使用相同的Erlang cookie,有关详细信息,请参阅。

    问题可能是应该打开的TCP端口。 您应该执行以下操作:

    1) 为兔子服务器创建一个安全组(双方都将使用它) 我们称之为:兔子sg

    2) 在安全组中,定义以下端口:

    All TCP            TCP          0 - 65535     sg-xxxx (rabbit-sg)
    SSH                TCP             22         0.0.0.0/0
    Custom TCP Rule    TCP            4369        0.0.0.0/0
    Custom TCP Rule    TCP            5672        0.0.0.0/0
    Custom TCP Rule    TCP            15672       0.0.0.0/0
    Custom TCP Rule    TCP            25672       0.0.0.0/0
    Custom TCP Rule    TCP            35197       0.0.0.0/0
    Custom TCP Rule    TCP            55672       0.0.0.0/0
    
    3) 确保两个EC2都使用此安全组, 注意,我们打开了EC2之间的所有TCP

    4) 确保兔子cookie是相同的,并且您重新启动了EC2
    在从属EC2中更改后

    谢谢。防火墙完全关闭,我有一个从一个远程到另一个远程的telnet连接(到端口5672(rmq)、15672(ui)、4399(群集端口)),cookie(日志中cookie的哈希相同)。更新应答。另一件事是默认的初始化脚本将使用
    -sname
    选项启动erlang,因此FQDNs或IP地址不能用于引用节点。您能否将另一个节点的短主机名放入每个节点上的/etc/hosts中,并尝试使用短主机名创建集群?如果我在Wireshark中看到连接已创建并随后终止,这是否仍然相关?屏幕截图显示epmd正在响应-似乎无法根据您的IP找到您的节点。如上所述,尝试使用hosts文件的技巧。