如何设置一个简单的 Docker 化 RabbitMQ 集群?

问题描述 投票:0回答:4

我一直在阅读一些有关设置 dockerized RabbitMQ 集群的信息,并且 google 找到了在同一台机器上执行此操作的各种结果。

我正在尝试跨多台机器设置 RabbitMQ 集群。

我有三台机器,名称分别为

dockerswarmmodemaster1
dockerswarmmodemaster2
dockerswarmmodemaster3

在第一台机器(dockerswarmmodemaster1)上,我发出以下命令:

docker run -d -p 4369:4369 -p 5671:5671 -p 5672:5672 -p 15671:15671 -p 15672:15672 \
    -p 25672:25672 --hostname dockerswarmmodemaster1 --name roger_rabbit \
    -e RABBITMQ_ERLANG_COOKIE='secret cookie here' rabbitmq:3-management

现在,rabbitMQ 启动得很好,我可以转到 15672 上的管理页面,看看它是否按预期工作。

然后我通过 SSH 连接到我的第二台机器(dockerswarmmodemaster2),这就是我遇到的问题。我一直在尝试以下命令的变体:

docker run -d -p 4369:4369 -p 5671:5671 -p 5672:5672 -p 15671:15671  \
    -p 15672:15672 -p 25672:25672 --name jessica_rabbit -e CLUSTERED=true \
    -e CLUSTER_WITH=rabbit@dockerswarmmodemaster1 \
    -e RABBITMQ_ERLANG_COOKIE='secret cookie here' \
    rabbitmq:3-management

无论我尝试什么,两台 RabbitMQ 机器上的网页都显示“集群链接”部分下没有集群。我还没有尝试过涉及第三台机器。

所以 - 更多信息:

  1. 机器名称可通过 DNS 解析。
  2. 我尝试在两台机器上的 docker run 命令中使用 --net=host 开关;没有变化。
  3. 我没有使用 docker swarm 或 swarm 模式。
  4. 我没有安装 docker compose。如果可能的话我宁愿不使用它。

有什么方法可以通过 docker run 命令执行此操作,还是我必须下载rabbit admin cli 并手动加入集群?

docker rabbitmq cluster-computing ubuntu-16.04
4个回答
2
投票

您可以使用此插件https://github.com/aweber/rabbitmq-autocluster来创建 RabbitMQ docker 集群。

插件使用

etcd2
consul
作为服务发现,这样你就不需要使用
rabbitmqctl
命令行。

我用了docker swarm,但是没有必要。

这是结果


2
投票
官方容器似乎不支持环境变量

CLUSTERED

CLUSTER_WITH
。它仅支持在
RabbitMQ Configuration中指定的列表变量。 根据官方集群指南,可能的解决方案之一是通过配置文件。因此,您只需向容器提供您自己的配置即可。 在您的情况下修改后的默认配置将如下所示:

[ { rabbit, [ { loopback_users, [ ] }, { cluster_nodes, {['rabbit@dockerswarmmodemaster1'], disc }} ]} ].

将此片段保存到,例如,

/home/user/rmq/rabbitmq.config

。
提示:如果你想在管理控制台中看到节点,你需要添加另一个文件
/home/user/rmq/enabled_plugins
,只有字符串

[rabbitmq_management].

之后,您的命令将如下所示

docker run -d -p 4369:4369 -p 5671:5671 -p 5672:5672 -p 15671:15671 \ -p 15672:15672 -p 25672:25672 --name jessica_rabbit \ -v /home/user/rmq:/etc/rabbmitmq \ -e RABBITMQ_ERLANG_COOKIE='secret cookie here' \ rabbitmq:3-management

PS 您可能还需要考虑设置环境变量 RABBITMQ_USE_LONGNAME。


2
投票
为了创建集群,要形成集群的所有rabbitmq节点都必须可以通过节点名称(主机名)访问(每个节点都可以由其他节点访问)。 您需要使用

--hostname

 选项为每个 docker 容器指定主机名,并为所有其他容器添加 /etc/host 条目,您可以使用 
--add-host
 选项或手动编辑 /etc/hosts 文件来完成此操作。
因此,这里是带有 docker 容器的 3 个rabbitmq 节点集群的示例(rabbitmq:3-管理镜像)。

首先,创建一个网络,以便您可以分配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 中也是如此,仅此而已。


0
投票
为了完整起见(最后一个答案是 8 年前),这里是

2024 中的一个可能的解决方案,使用 bitnami/rabbitmq Docker 映像轻松创建带有 Docker 撰写文件的完整 RabbitMQ 集群

来自

自述文件

services: stats: image: bitnami/rabbitmq environment: - RABBITMQ_NODE_TYPE=stats - RABBITMQ_NODE_NAME=rabbit@stats - RABBITMQ_ERL_COOKIE=s3cr3tc00ki3 ports: - '15672:15672' volumes: - 'rabbitmqstats_data:/bitnami/rabbitmq/mnesia' queue-disc1: image: bitnami/rabbitmq environment: - RABBITMQ_NODE_TYPE=queue-disc - RABBITMQ_NODE_NAME=rabbit@queue-disc1 - RABBITMQ_CLUSTER_NODE_NAME=rabbit@stats - RABBITMQ_ERL_COOKIE=s3cr3tc00ki3 volumes: - 'rabbitmqdisc1_data:/bitnami/rabbitmq/mnesia' queue-ram1: image: bitnami/rabbitmq environment: - RABBITMQ_NODE_TYPE=queue-ram - RABBITMQ_NODE_NAME=rabbit@queue-ram1 - RABBITMQ_CLUSTER_NODE_NAME=rabbit@stats - RABBITMQ_ERL_COOKIE=s3cr3tc00ki3 volumes: - 'rabbitmqram1_data:/bitnami/rabbitmq/mnesia' volumes: rabbitmqstats_data: driver: local rabbitmqdisc1_data: driver: local rabbitmqram1_data: driver: local

    
© www.soinside.com 2019 - 2024. All rights reserved.