Docker搭建RabbitMQ集群的方法步驟
集群模式介紹
RabbitMQ集群模式有兩種:普通模式和鏡像模式
- 普通模式:默認(rèn)模式,多個(gè)節(jié)點(diǎn)組成的普通集群,消息隨機(jī)發(fā)送到其中一個(gè)節(jié)點(diǎn)的隊(duì)列上,其他節(jié)點(diǎn)僅保留元數(shù)據(jù),各個(gè)節(jié)點(diǎn)僅有相同的元數(shù)據(jù),即隊(duì)列結(jié)構(gòu)、交換器結(jié)構(gòu)、交換器與隊(duì)列綁定關(guān)系、vhost。消費(fèi)者消費(fèi)消息時(shí),會(huì)從各個(gè)節(jié)點(diǎn)拉取消息,如果保存消息的節(jié)點(diǎn)故障,則無法消費(fèi)消息,如果做了消息持久化,那么得等該節(jié)點(diǎn)恢復(fù),然后才可被消費(fèi);如果沒有持久化的話,就會(huì)產(chǎn)生消息丟失的現(xiàn)象。
- 鏡像模式:它是在普通模式的基礎(chǔ)上,把需要的隊(duì)列做成鏡像隊(duì)列,存在于多個(gè)節(jié)點(diǎn)來實(shí)現(xiàn)高可用(HA)。該模式解決了上述問題,Broker會(huì)主動(dòng)地將消息實(shí)體在各鏡像節(jié)點(diǎn)間同步,在consumer取數(shù)據(jù)時(shí)無需臨時(shí)拉取。該模式帶來的副作用也很明顯,除了降低系統(tǒng)性能外,如果鏡像隊(duì)列數(shù)量過多,加之大量的消息進(jìn)入,集群內(nèi)部的網(wǎng)絡(luò)帶寬將會(huì)被大量消耗。通常地,對(duì)可靠性要求較高的場(chǎng)景建議采用鏡像模式。
1、普通集群的搭建
1.1、普通集群架構(gòu)介紹
架構(gòu)圖
1.2、環(huán)境準(zhǔn)備
拉取RabbitMQ鏡像
docker pull rabbitmq:3.7-management
創(chuàng)建并運(yùn)行三個(gè)RabbitMQ容器節(jié)點(diǎn),一主兩從
命令如下:
#rabbitmqCluster01 主節(jié)點(diǎn) docker run -d --hostname rabbitmq01 --name rabbitmqCluster01 -v `pwd`/rabbitmq01:/var/lib/rabbitmq -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitmqCookie' rabbitmq:3.7-management #rabbitmqCluster02 從節(jié)點(diǎn) docker run -d --hostname rabbitmq02 --name rabbitmqCluster02 -v `pwd`/rabbitmq02:/var/lib/rabbitmq -p 7002:15672 -p 5673:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitmqCookie' --link rabbitmqCluster01:rabbitmq01 rabbitmq:3.7-management #rabbitmqCluster03 從節(jié)點(diǎn) docker run -d --hostname rabbitmq03 --name rabbitmqCluster03 -v `pwd`/rabbitmq03:/var/lib/rabbitmq -p 8002:15672 -p 5674:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitmqCookie' --link rabbitmqCluster01:rabbitmq01 --link rabbitmqCluster02:rabbitmq02 rabbitmq:3.7-management
-d 后臺(tái)運(yùn)行容器;
–name 指定容器名;
-p 指定服務(wù)運(yùn)行的端口(5672:應(yīng)用訪問端口;15672:控制臺(tái)Web端口號(hào)),控制臺(tái)端口用于管理rabbitmq,應(yīng)用訪問端口號(hào)為rabbitclient等應(yīng)用訪問。;
-v 映射目錄或文件,pwd 當(dāng)前目錄;
–hostname 主機(jī)名(RabbitMQ的一個(gè)重要注意事項(xiàng)是它根據(jù)所謂的 “節(jié)點(diǎn)名稱” 存儲(chǔ)數(shù)據(jù),默認(rèn)為主機(jī)名);
-e 指定環(huán)境變量;(RABBITMQ_DEFAULT_VHOST:默認(rèn)虛擬機(jī)名;RABBITMQ_DEFAULT_USER:默認(rèn)的用戶名;RABBITMQ_DEFAULT_PASS:默認(rèn)用戶名的密碼,RABBITMQ_ERLANG_COOKIE 節(jié)點(diǎn)認(rèn)證作用,部署集成時(shí) 需要同步該值)
–link 用于容器的鏈接
查看運(yùn)行中的三個(gè)RabbitMQ容器:
登錄 RabbitMQ 控制臺(tái)界面:
rabbitmq01 節(jié)點(diǎn):
rabbitmq02 節(jié)點(diǎn):
rrabbitmq03 節(jié)點(diǎn)
1.3、集群搭建
將rabbitmqCluster02 節(jié)點(diǎn)和 rabbitmqCluster03 節(jié)點(diǎn)加入 rabbitmqCluster01 創(chuàng)建集群
進(jìn)入 rabbitmqCluster02 節(jié)點(diǎn)和 rabbitmqCluster03 節(jié)點(diǎn),在兩個(gè)節(jié)點(diǎn)分別執(zhí)行一下加入集群的命令:
rabbitmqctl stop_app rabbitmqctl reset #rabbitmq01為rabbitmqCluster01容器中的hostname rabbitmqctl join_cluster --ram rabbit@rabbitmq01 rabbitmqctl start_app
rabbitmqCluster02 節(jié)點(diǎn):
rabbitmq-slave1 節(jié)點(diǎn):
執(zhí)行完后在任意節(jié)點(diǎn)查看集群狀態(tài):
rabbitmqctl cluster_status
如果出現(xiàn)如下顯示,集群搭建成功:
之后我們?cè)谥鞴?jié)點(diǎn)的web管理頁可以看到兩個(gè)從節(jié)點(diǎn)了:
2、鏡像集群的搭建
鏡像集群的結(jié)構(gòu)圖
2.1、配置鏡像集群的策略
1、使用命令配置策略:
rabbitmqctl set_policy [-p Vhost] [--priority <priority>] [--apply-to <apply-to>] Name Pattern Definition
參數(shù)說明:
-p Vhost: 可選參數(shù),針對(duì)指定 vhost 下的 queue 進(jìn)行設(shè)置
Name: policy 的名稱
Pattern: queue 的匹配模式(正則表達(dá)式)
Definition:鏡像定義,包括三個(gè)部分 ha-mode, ha-params, ha-sync-mode
ha-mode:指明鏡像隊(duì)列的模式,有效值為 all/exactly/nodes
all:表示在集群中所有的節(jié)點(diǎn)上進(jìn)行鏡像
exactly:表示在指定個(gè)數(shù)的節(jié)點(diǎn)上進(jìn)行鏡像,節(jié)點(diǎn)的個(gè)數(shù)由 ha-params 指定
nodes:表示在指定的節(jié)點(diǎn)上進(jìn)行鏡像,節(jié)點(diǎn)名稱通過 ha-params 指定
ha-params:作為參數(shù),為 ha-mode 的補(bǔ)充
ha-sync-mode:進(jìn)行隊(duì)列中消息的同步方式,有效值為 automatic 和 manual
pririty:可選參數(shù),policy的優(yōu)先級(jí)
在任意節(jié)點(diǎn)上添加策略:
#^hello 匹配hello開頭的隊(duì)列 rabbitmqctl set_policy ha-all "^hello" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
在所有節(jié)點(diǎn)的以hello開頭的隊(duì)列上都添加了策略:以后當(dāng)主節(jié)點(diǎn)宕機(jī)時(shí),hello隊(duì)列里未消費(fèi)的消息也不會(huì)丟失,會(huì)復(fù)制到其他節(jié)點(diǎn)上。
刪除策略:
#rabbitmqctl clear_policy 策略名稱 rabbitmqctl clear_policy ha-all
2、管理界面配置策略
登錄 rabbitmq 管理頁面 ——> Admin ——> Policies ——> Add / update a policy
name:策略名稱
Pattern:^
匹配符,只有一個(gè)^
代表匹配所有。^
message指同步“message”開頭的隊(duì)列名稱
Definition:ha-mode=all 為匹配類型,分為3種模式:all(表示所有的queue)
Priority:優(yōu)先級(jí),首先根據(jù)priority
排序,值越大的優(yōu)先級(jí)越高;相同priority
則根據(jù)創(chuàng)建時(shí)間排序,越晚創(chuàng)建的優(yōu)先級(jí)越高。
Operator Policy 和 User Policy 的區(qū)別:
- Operator Policy 是給服務(wù)提供商或公司基礎(chǔ)設(shè)施部門用來設(shè)置某些需要強(qiáng)制執(zhí)行的通用規(guī)則
- User Policy 是給業(yè)務(wù)應(yīng)用用來設(shè)置的規(guī)則
到此這篇關(guān)于Docker搭建RabbitMQ集群的方法步驟的文章就介紹到這了,更多相關(guān)Docker搭建RabbitMQ集群內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Linux服務(wù)器安裝Docker,啟動(dòng)失敗問題的解決
這篇文章主要介紹了Linux服務(wù)器安裝Docker,啟動(dòng)失敗問題的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2023-04-04使用Docker的NFS-Ganesha鏡像搭建nfs服務(wù)器的詳細(xì)過程
這篇文章主要介紹了使用Docker的NFS-Ganesha鏡像搭建nfs服務(wù)器,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08Docker使用Dockerfile來創(chuàng)建鏡像
本篇文章主要介紹了Docker使用Dockerfile來創(chuàng)建鏡像,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-04-04Docker安裝和基礎(chǔ)用法 Docker入門教程第二篇
這篇文章主要介紹了Docker安裝和基礎(chǔ)用法,Docker入門教程第二篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10docker啟動(dòng)elasticsearch時(shí)內(nèi)存不足問題及解決方法
這篇文章主要介紹了docker啟動(dòng)elasticsearch時(shí)內(nèi)存不足問題,本文給大家分享安裝過程及解決方法,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07使用docker-compose.yml構(gòu)建鏡像的方法
docker-compose是docker提供的一個(gè)命令行工具,用來定義和運(yùn)行由多個(gè)容器組成的應(yīng)用,這篇文章主要介紹了使用docker-compose.yml構(gòu)建鏡像的方法,需要的朋友可以參考下2023-05-05詳解如何修改 Docker 默認(rèn)網(wǎng)橋地址
這篇文章主要介紹了詳解如何修改 Docker 默認(rèn)網(wǎng)橋地址,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05