Docker|Docker 部署 RabbitMQ集群

作者信息

Author:VincentE-Mail:46603415@qq.com

去查看RabbitMQ最新的Docker镜像Tag
https://hub.docker.com/_/rabbitmq?tab=tags

计划规划集群规模信息
192.168.1.221 rabbit1192.168.1.222 rabbit2192.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/hosts192.168.1.221 rabbit1192.168.1.222 rabbit2192.168.1.223 rabbit3EOF

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/bashrabbitmqctl stop_apprabbitmqctl resetrabbitmqctl join_cluster rabbit@rabbit1rabbitmqctl start_appexit

节点3加入到集群
docker exec -it rabbit3 /bin/bashrabbitmqctl stop_apprabbitmqctl resetrabbitmqctl join_cluster rabbit@rabbit1rabbitmqctl start_appexit

开启 policy(策略)
  • 1、策略policy概念
使用RabbitMQ镜像功能,需要基于RabbitMQ策略来实现,策略policy是用来控制和修改群集范围的某个vhost队列行为和Exchange行为。策略policy就是要设置哪些Exchange或者queue的数据需要复制、同步,以及如何复制同步。
为了使队列成为镜像队列,需要创建一个策略来匹配队列,设置策略有两个键“ha-mode和 ha-params(可选)”。ha-params根据ha-mode设置不同的值,下表说明这些key的选项。
Docker|Docker 部署 RabbitMQ集群
文章图片
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|Docker 部署 RabbitMQ集群
文章图片
image
  • 3、查看效果
【Docker|Docker 部署 RabbitMQ集群】此策略会同步所在同一VHost中的交换器和队列数据。设置好policy之后,使用 http://ip:15672 再次进行访问,可以看到队列镜像同步。
Docker|Docker 部署 RabbitMQ集群
文章图片
image

    推荐阅读