Docker 部署 RabbitMQ集群

作者信息


Author:Vincent

E-Mail:[email protected]

去查看RabbitMQ最新的Docker镜像Tag


https://hub.docker.com/_/rabbitmq?tab=tags

计划规划集群规模信息


192.168.1.221 rabbit1

192.168.1.222 rabbit2

192.168.1.223 rabbit3

分别在分布式集群三台机器拉取最新Tag的image,management是集成管理页面的镜像


docker pull rabbitmq:3.7.27-rc.1-management

在集群三台服务器都创建rabbitmq的持久化目录


mkdir -p /home/data/rabbitmq

在集群三台服务器写入集群配置配置信息到持久化目录


cat <>/home/data/rabbitmq/hosts

192.168.1.221 rabbit1

192.168.1.222 rabbit2

192.168.1.223 rabbit3

EOF

rabbit1 执行启动

--net=host是直列利用宿主机网络,大家可以-p 5672:5672 -p 15672:15672

-e RABBITMQ_DEFAULT_USER=root 指定账号

-e RABBITMQ_DEFAULT_PASS=12345 指定密码


docker run -d \

--name rabbit1 \

--net=host \

-h rabbit1 \

--log-opt max-size=10m \

--log-opt max-file=3 \

-v /home/data/rabbitmq:/var/lib/rabbitmq:z \

-v /home/data/rabbitmq/hosts:/etc/hosts \

-e RABBITMQ_DEFAULT_USER=root \

-e RABBITMQ_DEFAULT_PASS=12345 \

-e RABBITMQ_ERLANG_COOKIE='cookie' \

rabbitmq:3.7.27-rc.1-management

rabbit2 执行启动


docker run -d \

--name rabbit2 \

--net=host \

-h rabbit2 \

--log-opt max-size=10m \

--log-opt max-file=3 \

-v /home/data/rabbitmq:/var/lib/rabbitmq:z \

-v /home/data/rabbitmq/hosts:/etc/hosts \

-e RABBITMQ_DEFAULT_USER=root \

-e RABBITMQ_DEFAULT_PASS=12345 \

-e RABBITMQ_ERLANG_COOKIE='cookie' \

rabbitmq:3.7.27-rc.1-management

rabbit3 执行启动


docker run -d \

--name rabbit3 \

--net=host \

-h rabbit3 \

--log-opt max-size=10m \

--log-opt max-file=3 \

-v /home/data/rabbitmq:/var/lib/rabbitmq:z \

-v /home/data/rabbitmq/hosts:/etc/hosts \

-e RABBITMQ_DEFAULT_USER=root \

-e RABBITMQ_DEFAULT_PASS=12345 \

-e RABBITMQ_ERLANG_COOKIE='cookie' \

rabbitmq:3.7.27-rc.1-management

假设为了效果节点都是内存型节点而非硬盘存储型

--ram指定此节点加入集群方式为内存类型,非硬盘节点不持久化数据到硬盘


rabbitmqctl join_cluster --ram rabbit@rabbit1

节点2加入到集群


docker exec -it rabbit2 /bin/bash

rabbitmqctl stop_app

rabbitmqctl reset

rabbitmqctl join_cluster rabbit@rabbit1

rabbitmqctl start_app

exit

节点3加入到集群


docker exec -it rabbit3 /bin/bash

rabbitmqctl stop_app

rabbitmqctl reset

rabbitmqctl join_cluster rabbit@rabbit1

rabbitmqctl start_app

exit

开启 policy(策略)

  • 1、策略policy概念

使用RabbitMQ镜像功能,需要基于RabbitMQ策略来实现,策略policy是用来控制和修改群集范围的某个vhost队列行为和Exchange行为。策略policy就是要设置哪些Exchange或者queue的数据需要复制、同步,以及如何复制同步。

为了使队列成为镜像队列,需要创建一个策略来匹配队列,设置策略有两个键“ha-mode和 ha-params(可选)”。ha-params根据ha-mode设置不同的值,下表说明这些key的选项。

Docker 部署 RabbitMQ集群_第1张图片
image.png

name:随便取,策略名称

Pattern:^ 匹配符,只有一个^代表匹配所有

Definition:ha-mode=all 为匹配类型,分为3种模式:all(表示所有的queue)

或者使用命令:

rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

  • 2、添加策略

登录rabbitmq管理页面 ——> Admin ——> Policies ——> Add / update a policy

Docker 部署 RabbitMQ集群_第2张图片
image
  • 3、查看效果

此策略会同步所在同一VHost中的交换器和队列数据。设置好policy之后,使用 http://ip:15672 再次进行访问,可以看到队列镜像同步。

Docker 部署 RabbitMQ集群_第3张图片
image

你可能感兴趣的:(Docker 部署 RabbitMQ集群)