Docker 如何设置一个简单的停靠RabbitMQ集群?
我一直在读一些关于设置停靠RabbitMQ集群的文章,google在同一台机器上显示了这样做的各种结果 我正在尝试跨多台计算机设置RabbitMQ群集 我有三台机器的名称分别为Docker 如何设置一个简单的停靠RabbitMQ集群?,docker,rabbitmq,cluster-computing,ubuntu-16.04,Docker,Rabbitmq,Cluster Computing,Ubuntu 16.04,我一直在读一些关于设置停靠RabbitMQ集群的文章,google在同一台机器上显示了这样做的各种结果 我正在尝试跨多台计算机设置RabbitMQ群集 我有三台机器的名称分别为dockerswarmodemaster1,dockerswarmodemaster2和dockerswarmodemaster3 在第一台机器(dockerswarmmodemaster1)上,我发出以下命令: docker run -d -p 4369:4369 -p 5671:5671 -p 5672:5672 -p
dockerswarmodemaster1
,dockerswarmodemaster2
和dockerswarmodemaster3
在第一台机器(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
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,我可以转到15672的管理页面,看到它按照预期工作
然后我SSH到我的第二台机器(dockerswarmodemaster2),这就是我一直坚持的一点。我一直在尝试以下命令的变体:
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
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机器上的网页都会显示“集群链接”部分下没有集群。我还没试过使用第三台机器
所以-更多信息:
etcd2
或consul
作为服务发现,这样您就不需要使用rabbitmqctl
命令行
我和docker swarm一起使用它,但它不是必需的
结果是官方容器似乎不支持环境变量
CLUSTERED
和clustereu WITH
。它只支持在中指定的列表变量。
据这位官员介绍,可能的解决方案之一是通过配置文件。因此,您可以只向容器提供自己的配置。
在您的情况下,修改后的默认配置如下所示:
[
{ 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,您还需要考虑设置环境变量RabByMQUESULNMENT.
< P>。为了创建集群,所有要组成集群的RabBMQ节点必须通过节点名(主机名)访问(每个人都可以访问)。 您需要使用--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容器
- IPs分别为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
拉邦也是如此,就这样