我一直在阅读有关设置dockerized RabbitMQ群集的一些内容,谷歌会在同一台机器上显示各种结果。
我正在尝试在多台计算机上设置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的管理页面,看看它是否正常运行。
然后我连接到我的第二台机器(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.我尝试在两台机器上的docuker run命令中使用--net = host开关;没有变化。
3.我没有使用docker swarm或swarm模式
4.我没有安装docker compose。如果可能,我不想使用它。
有没有办法从docker run命令执行此操作,还是我必须下载rabbit admin cli并手动加入群集?
答案 0 :(得分:2)
您可以使用此插件https://github.com/aweber/rabbitmq-autocluster创建RabbitMQ泊坞窗群集。
该插件使用etcd2
或consul
作为服务发现,这样您就不需要使用rabbitmqctl
命令行。
我将它与docker swarm一起使用,但没有必要。
Here是结果
答案 1 :(得分:2)
官方容器似乎不支持环境变量CLUSTERED
和CLUSTER_WITH
。它仅支持RabbitMQ Configuration中指定的列表变量。
根据官方Clustering Guide,可能的解决方案之一是通过配置文件。因此,您可以只为容器提供自己的配置。
您的案例中修改后的默认配置如下所示:
[
{ 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 :(得分:2)
为了创建集群,所有要构成集群的rabbitmq节点必须按节点名称(主机名)访问(每个节点都由其他节点)。
您需要为每个具有--hostname
选项的docker容器指定主机名,并为所有其他容器添加/ etc / host条目,这可以使用--add-host
选项或手动编辑/ etc / hosts文件。
所以,这是一个带有docker容器的3个rabbitmq节点集群的示例(rabbitmq:3-management image):
首先创建一个网络,以便您可以分配IP:docker network create --subnet=172.18.0.0/16 mynet1
。我们将有以下内容:
旋转第一个
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一样,就是这样。