Docker搭建RabbitMq镜像集群

Docker搭建RabbitMq镜像集群

创建容器

  • 创建三个RabbitMq容器
docker run -d -e RABBITMQ_DEFAULT_USER=root -e RABBITMQ_DEFAULT_PASS=123456 --hostname rabbitmq1 -p 5672:5672 -p 15672:15672 --name rabbitmq1 rabbitmq:3-management 
docker run -d -e RABBITMQ_DEFAULT_USER=root -e RABBITMQ_DEFAULT_PASS=123456 --hostname rabbitmq2 -p 5673:5672 -p 15673:15672 --name rabbitmq2 --link rabbitmq1:rabbitmq1  rabbitmq:3-management 
docker run -d -e RABBITMQ_DEFAULT_USER=root -e RABBITMQ_DEFAULT_PASS=123456 --hostname rabbitmq3 -p 5674:5672 -p 15674:15672 --name rabbitmq3 --link rabbitmq1:rabbitmq1  --link rabbitmq2:rabbitmq2 rabbitmq:3-management 

把 .erlang.cookie文件调制相同

  • 选取一个容器的.erlang.cookie文件复制到主机的/home/rabbitmq/.erlang.cookie下面
docker cp rabbitmq1:/var/lib/rabbitmq/.erlang.cookie /home/rabbitmq/.erlang.cookie
  • 将另外两个容器的.erlang.cookie更新
docker cp /home/rabbitmq/.erlang.cookie rabbitmq2:/var/lib/rabbitmq/.erlang.cookie
docker cp /home/rabbitmq/.erlang.cookie rabbitmq3:/var/lib/rabbitmq/.erlang.cookie
  • 重启容器
docker restart rabbitmq1
docker restart rabbitmq2
docker restart rabbitmq3

加入集群

docker exec -it rabbitmq1 /bin/bash
rabbitmq-server -detached 
exit
docker exec -it rabbitmq2 /bin/bash
rabbitmq-server -detached 
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@rabbitmq1
rabbitmqctl start_app
exit
docker exec -it rabbitmq3 /bin/bash
rabbitmq-server -detached 
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@rabbitmq1
rabbitmqctl start_app
exit

Docker搭建RabbitMq镜像集群_第1张图片
此时加入集群成功

镜像集群

  • 命令参数含义
rabbitmqctl set_policy [-p <vhost>] [--priority <priority>] [--apply-to <apply-to>] <name> <pattern>  <definition>
#-p Vhost: 可选参数,针对指定vhost下的queue进行设置
#Name:     policy的名称
#Pattern: queue的匹配模式(正则表达式)	
#Definition:镜像定义,包括三个部分ha-mode, ha-params, ha-sync-mode
#         		ha-mode:指明镜像队列的模式,有效值为 all/exactly/nodes
#                      all:表示在集群中所有的节点上进行镜像
#                      exactly:表示在指定个数的节点上进行镜像,节点的个#数由ha-params指定
#                      nodes:表示在指定的节点上进行镜像,节点名称通过ha-#params指定
#          	 ha-params:ha-mode模式需要用到的参数
 #             ha-sync-mode:进行队列中消息的同步方式,有效值为automatic#和manual
#              priority:可选参数,policy的优先级
  • 查看当前策略
rabbitmqctl list_policies
  • 添加策略
rabbitmqctl set_policy -p /ems myall '^' '{"ha-mode":"all","ha-sync-mode":"automatic"}' 
#说明:策略名字为myall,虚拟主机/ems,正则表达式为 “^” 表示所有匹配所有队列名称  ^所有队列

成功之后队列为
在这里插入图片描述

你可能感兴趣的:(中间件,rabbitmq,docker,linux,队列)