Docker RabbitMQ 镜像集群

环境搭建:

Docker启动3个RabbitMQ,第一个MQ为主节点,同时指定 RABBITMQ_ERLANG_COOKIE

后面两个镜像为第一个MQ的节点,RABBITMQ_ERLANG_COOKIE` 保持一致,通过 --link 指定关联。

链式关联。

docker run -d --hostname mq1 --name mes_queue_1 -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.7.7-management 
docker run -d --hostname mq2 --name mes_queue_2 -p 5673:5672 --link mes_queue_1:mq1 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.7.7-management 
docker run -d --hostname mq3 --name mes_queue_3 -p 5674:5672 --link mes_queue_1:mq1 --link mes_queue_2:mq2 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie'  rabbitmq:3.7.7-management 

 

成功启动3个MQ服务,端口从 5672 - 5674。

进入第一个MQ容器:

docker exec -it 4aee53ed687b /bin/bash

 

执行以下命令:

root@mq1:/# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@mq1 ...
root@mq1:/# rabbitmqctl reset
Resetting node rabbit@mq1 ...
root@mq1:/# rabbitmqctl start_app
Starting node rabbit@mq1 ...
 completed with 3 plugins.
root@mq1:/#

 


进入第二个MQ容器:

PS C:\Users\chaojie> docker exec -it cc178e06ac2f /bin/bash
root@mq2:/# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@mq2 ...
root@mq2:/# rabbitmqctl reset
Resetting node rabbit@mq2 ...
root@mq2:/# rabbitmqctl join_cluster --ram rabbit@mq1
Clustering node rabbit@mq2 with rabbit@mq1 <---- 加入集群
root@mq2:/# rabbitmqctl start_app
Starting node rabbit@mq2 ...
 completed with 3 plugins.
root@mq2:/#

 

进入第三个MQ容器:

PS C:\Users\chaojie> docker exec -it 7cc63aeaf35d /bin/bash
root@mq3:/# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@mq3 ...
root@mq3:/# rabbitmqctl reset
Resetting node rabbit@mq3 ...
root@mq3:/# rabbitmqctl join_cluster --ram rabbit@mq1
Clustering node rabbit@mq3 with rabbit@mq1
root@mq3:/#

 

同步消息队列:所以节点数据同步,队列同步。消息消费同步:任意节点执行

root@mq3:/# rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
Setting policy "ha-all" for pattern "^" to "{"ha-mode":"all"}" with priority "0" for vhost "/" ...

 

打开MQ管理界面:

三个MQ已经关联了。

数据已同步。

其中第一个节点 info 中的 disc 表示磁盘节点,磁盘节点会将消息持久化到硬盘,另外的节点持久化到内存,当磁盘节点宕机,消息依然可以收发,,但是不能执行创建队列、交换机、绑定关系、用户,以及更改权限、添加或者删除集群节点的操作。

内存节点宕机没事。

测试:

停止主节点。

docker stop e55a0eff0d36

其他节点不受影响。

 

打开节点,数据已同步。

 

posted @ 2020-09-11 23:18  杨超杰  阅读(212)  评论(0编辑  收藏  举报