作者信息
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的选项。
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
3、查看效果
此策略会同步所在同一VHost中的交换器和队列数据。设置好policy之后,使用 http://ip:15672 再次进行访问,可以看到队列镜像同步。