1

我试图在每台机器上使用 Dockers 来创建一个带有不同机器上的节点的 RabbitMQ 集群,并且我在连接节点时遇到了一些问题。当我获得rabbitMQ主机名时,它仅指容器,因此当我尝试将节点加入集群时它会失败,因为它找不到域。我如何告诉 RabbitMQ 主机名实际服务器的 IP?

我试图将一台服务器中的节点与另一台外部服务器的节点连接起来,两者都是 EC2 实例,但是关于 EC2 实例主机的 RabbitMQ 主机名应该有哪些信息才能从外部连接?

如果我使用 ip-172-31-12-135.us-west-1.compute.internal,它会失败......

4

1 回答 1

3

为了创建一个集群,所有要组成集群的rabbitmq节点必须可以通过节点名(主机名)访问。您需要使用--hostname选项为每个 docker 容器指定主机名,并为所有其他容器添加 /etc/host 条目,这可以使用--add-host选项或手动编辑 /etc/hosts 文件来完成。因此,这里是一个带有 docker 容器的 3 个 rabbitmq 节点集群的示例(rabbitmq:3-management 映像):

首先创建一个网络,以便您可以分配 IP docker network create --subnet=172.18.0.0/16 mynet1:. 我们将有以下内容:

  • 3 个名为 rab1con、rab2con 和 rab3con 的 docker 容器
  • IP 分别为 172.18.0.11 、 -12 和 -13
  • 它们中的每一个都将分别具有主机名 rab1、rab2 和 rab3
  • 所有必须共享相同的 erlang cookie

启动第一个

docker run -d --net mynet1 --ip 172.18.0.11 --hostname rab1 --add-host rab2:172.18.0.12 --add-host rab3:172.18.0.13 --name rab1con -e RABBITMQ_ERLANG_COOKIE='secret cookie here' rabbitmq:3-management

第二个

docker run -d --net mynet1 --ip 172.18.0.12 --hostname rab2 --add-host rab1:172.18.0.11 --add-host rab3:172.18.0.13 --name rab2con -e RABBITMQ_ERLANG_COOKIE='secret cookie here' rabbitmq:3-management

最后一个

docker run -d --net mynet1 --ip 172.18.0.13 --hostname rab3 --add-host rab2:172.18.0.12 --add-host rab1:172.18.0.11 --name rab3con -e RABBITMQ_ERLANG_COOKIE='secret cookie here' rabbitmq:3-management

比在容器 rab2con 中做

rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@rab1
rabbitmqctl start_app

在 rab3con 中也是如此,仅此而已。

编辑:由于问题是关于 milti-host docker 网络,因此应该使用覆盖网络。

于 2016-02-26T14:00:16.707 回答