網站首頁 編程語言 正文
集群模式介紹
RabbitMQ集群模式有兩種:普通模式和鏡像模式
- 普通模式:默認模式,多個節點組成的普通集群,消息隨機發送到其中一個節點的隊列上,其他節點僅保留元數據,各個節點僅有相同的元數據,即隊列結構、交換器結構、交換器與隊列綁定關系、vhost。消費者消費消息時,會從各個節點拉取消息,如果保存消息的節點故障,則無法消費消息,如果做了消息持久化,那么得等該節點恢復,然后才可被消費;如果沒有持久化的話,就會產生消息丟失的現象。
- 鏡像模式:它是在普通模式的基礎上,把需要的隊列做成鏡像隊列,存在于多個節點來實現高可用(HA)。該模式解決了上述問題,Broker會主動地將消息實體在各鏡像節點間同步,在consumer取數據時無需臨時拉取。該模式帶來的副作用也很明顯,除了降低系統性能外,如果鏡像隊列數量過多,加之大量的消息進入,集群內部的網絡帶寬將會被大量消耗。通常地,對可靠性要求較高的場景建議采用鏡像模式。
1、普通集群的搭建
1.1、普通集群架構介紹
架構圖
1.2、環境準備
拉取RabbitMQ鏡像
docker pull rabbitmq:3.7-management
創建并運行三個RabbitMQ容器節點,一主兩從
命令如下:
#rabbitmqCluster01 主節點 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 從節點 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 從節點 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 后臺運行容器;
–name 指定容器名;
-p 指定服務運行的端口(5672:應用訪問端口;15672:控制臺Web端口號),控制臺端口用于管理rabbitmq,應用訪問端口號為rabbitclient等應用訪問。;
-v 映射目錄或文件,pwd 當前目錄;
–hostname 主機名(RabbitMQ的一個重要注意事項是它根據所謂的 “節點名稱” 存儲數據,默認為主機名);
-e 指定環境變量;(RABBITMQ_DEFAULT_VHOST:默認虛擬機名;RABBITMQ_DEFAULT_USER:默認的用戶名;RABBITMQ_DEFAULT_PASS:默認用戶名的密碼,RABBITMQ_ERLANG_COOKIE 節點認證作用,部署集成時 需要同步該值)
–link 用于容器的鏈接
查看運行中的三個RabbitMQ容器:
登錄 RabbitMQ 控制臺界面:
rabbitmq01 節點:
rabbitmq02 節點:
rrabbitmq03 節點
1.3、集群搭建
將rabbitmqCluster02 節點和 rabbitmqCluster03 節點加入 rabbitmqCluster01 創建集群
進入 rabbitmqCluster02 節點和 rabbitmqCluster03 節點,在兩個節點分別執行一下加入集群的命令:
rabbitmqctl stop_app rabbitmqctl reset #rabbitmq01為rabbitmqCluster01容器中的hostname rabbitmqctl join_cluster --ram rabbit@rabbitmq01 rabbitmqctl start_app
rabbitmqCluster02 節點:
rabbitmq-slave1 節點:
執行完后在任意節點查看集群狀態:
rabbitmqctl cluster_status
如果出現如下顯示,集群搭建成功:
之后我們在主節點的web管理頁可以看到兩個從節點了:
2、鏡像集群的搭建
鏡像集群的結構圖
2.1、配置鏡像集群的策略
1、使用命令配置策略:
rabbitmqctl set_policy [-p Vhost] [--priority <priority>] [--apply-to <apply-to>] Name Pattern Definition
參數說明:
-p Vhost: 可選參數,針對指定 vhost 下的 queue 進行設置
Name: policy 的名稱
Pattern: queue 的匹配模式(正則表達式)
Definition:鏡像定義,包括三個部分 ha-mode, ha-params, ha-sync-mode
ha-mode:指明鏡像隊列的模式,有效值為 all/exactly/nodes
all:表示在集群中所有的節點上進行鏡像
exactly:表示在指定個數的節點上進行鏡像,節點的個數由 ha-params 指定
nodes:表示在指定的節點上進行鏡像,節點名稱通過 ha-params 指定
ha-params:作為參數,為 ha-mode 的補充
ha-sync-mode:進行隊列中消息的同步方式,有效值為 automatic 和 manual
pririty:可選參數,policy的優先級
在任意節點上添加策略:
#^hello 匹配hello開頭的隊列 rabbitmqctl set_policy ha-all "^hello" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
在所有節點的以hello開頭的隊列上都添加了策略:以后當主節點宕機時,hello隊列里未消費的消息也不會丟失,會復制到其他節點上。
刪除策略:
#rabbitmqctl clear_policy 策略名稱 rabbitmqctl clear_policy ha-all
2、管理界面配置策略
登錄 rabbitmq 管理頁面 ——> Admin ——> Policies ——> Add / update a policy
name:策略名稱
Pattern:^
匹配符,只有一個^
代表匹配所有。^
message指同步“message”開頭的隊列名稱
Definition:ha-mode=all 為匹配類型,分為3種模式:all(表示所有的queue)
Priority:優先級,首先根據priority
排序,值越大的優先級越高;相同priority
則根據創建時間排序,越晚創建的優先級越高。
Operator Policy 和 User Policy 的區別:
- Operator Policy 是給服務提供商或公司基礎設施部門用來設置某些需要強制執行的通用規則
- User Policy 是給業務應用用來設置的規則
原文鏈接:https://blog.csdn.net/wpc2018/article/details/122479486
相關推薦
- 2022-10-11 云服務器搭建redis主從復制以及哨兵模式(附踩坑記錄)
- 2022-03-28 Python中三種條件語句示例介紹_python
- 2022-09-22 vant tab組件動態改變van-tab title后顯示不全問題,需要手動滑動
- 2022-08-12 Linux?中ls命令的使用詳細介紹_linux shell
- 2022-05-26 C++?棧和隊列的實現超詳細解析_C 語言
- 2022-06-13 ASP.NET?Core?MVC路由(Routing)的用法_基礎應用
- 2022-03-15 ...has been blocked by CORS policy: Response to pr
- 2022-11-17 C++中的函數返回值問題_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支