作者信息
Author:Vincent
E-Mail:46603415@qq.com
去查看RabbitMQ最新的Docker鏡像Tag
https://hub.docker.com/_/rabbitmq?tab=tags
計劃規(guī)劃集群規(guī)模信息
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
在集群三臺服務(wù)器都創(chuàng)建rabbitmq的持久化目錄
mkdir -p /home/data/rabbitmq
在集群三臺服務(wù)器寫入集群配置配置信息到持久化目錄
cat <<EOF >>/home/data/rabbitmq/hosts
192.168.1.221 rabbit1
192.168.1.222 rabbit2
192.168.1.223 rabbit3
EOF
rabbit1 執(zhí)行啟動
--net=host是直列利用宿主機網(wǎng)絡(luò),大家可以-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 執(zhí)行啟動
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 執(zhí)行啟動
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
假設(shè)為了效果節(jié)點都是內(nèi)存型節(jié)點而非硬盤存儲型
--ram指定此節(jié)點加入集群方式為內(nèi)存類型雕拼,非硬盤節(jié)點不持久化數(shù)據(jù)到硬盤
rabbitmqctl join_cluster --ram rabbit@rabbit1
節(jié)點2加入到集群
docker exec -it rabbit2 /bin/bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@rabbit1
rabbitmqctl start_app
exit
節(jié)點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策略來實現(xiàn)胜榔,策略policy是用來控制和修改群集范圍的某個vhost隊列行為和Exchange行為猪钮。策略policy就是要設(shè)置哪些Exchange或者queue的數(shù)據(jù)需要復(fù)制好爬、同步即彪,以及如何復(fù)制同步味抖。
為了使隊列成為鏡像隊列评甜,需要創(chuàng)建一個策略來匹配隊列,設(shè)置策略有兩個鍵“ha-mode和 ha-params(可選)”仔涩。ha-params根據(jù)ha-mode設(shè)置不同的值忍坷,下表說明這些key的選項。
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
image
3旬薯、查看效果
此策略會同步所在同一VHost中的交換器和隊列數(shù)據(jù)。設(shè)置好policy之后适秩,使用 http://ip:15672 再次進行訪問绊序,可以看到隊列鏡像同步些侍。
image