RocketMQ快速入門:主從、集群模式原理及搭建實操(十一)

目錄

  • 0. 引言
  • 1. 前備知識
    • 1.1 namesrv集群模式
    • 1.2 broker集群模式
    • 1.2 broker主從復制原理
  • 2. 集群部署
    • 2.1 環境準備
    • 2.2 配置講解
    • 2.3 一主多從模式部署
    • 2.4 多主無從模式部署
    • 2.5 多主多從模式部署
  • 3. 總結

0. 引言

在學習完rocketmq的基礎知識后,我們進入rocketmq高可用保障的章節,即從服務部署架構角度,探索其支持的多節點部署模式。

1. 前備知識

1.1 namesrv集群模式

我們知道rocketmq主要由namesrv和broker組成,其集群的部署自然就是兩個服務的集群部署。而大部分我們談到其集群模式時,其實都是指的broker, 這是因為namesrv是無狀態的,什么是無狀態的呢? 簡單說就是namesrv之間不互相通信,其集群部署只要部署多個節點,broker中配置上多個namesrv的地址信息,只要其中一個namesrv可用,整體就依然可用。

那么這種無狀態機制是怎么實現的呢?

其實要聊到namesrv與broker的通信機制,之前我們也簡單說明過,具體如下:
1、nameserver 每隔 10s 會掃描一次 Broker,對于沒有超過120s都沒有回應的broker做剔除處理
2、broker 每隔 30 秒會向集群中所有的 NameServer 發送心跳包(這里發送的namesrv列表,就是寫在broker配置文件中的所有namesrv地址),namesrv收到心跳包后會更新狀態信息和路由表

所以可以看到broker會像所有的namesrv發送心跳,所以每個namesrv自然不用相互通信了。

1.2 broker集群模式

broker支持的集群模式包括三種:

  • 單主模式

包含一個主節點,一個或多個從節點,主節點負責寫操作,從節點負責讀操作,主從節點之間通過主從復制機制同步數據,優點是部署維護簡單,缺點是當主節點宕機時整個集群將無法工作,所以也沒有完整的實現高可用
在這里插入圖片描述

  • 多主模式

包含多個主節點,沒有從節點,單個節點宕機時對整體集群可用性無影響,但在該節點上還未消費的消息在宕機期間就無法被消費了,短期內對有限的數據消費有影響。
在這里插入圖片描述

  • 多主多從模式

包含多個主節點,多個從節點,主節點負責寫,每個主節點有自己的一組從節點,從節點負責讀,彌補多主模式宕機期間消息無法消費的問題,無單點故障,但相對性能會有所下降
在這里插入圖片描述

1.2 broker主從復制原理

主從復制可以基于以下兩種機制實現:同步復制和異步復制。

  • 同步復制: 同步復制模式下,主節點會等待至少一個從節點返回確認接收的回執后,才會給生產者發送成功接收回執,該模式強調數據的強一致性,缺點是降低了性能。其執行流程如下:
  1. 生產者會先發送消息到主broker,主broker會將消息寫入到commit log中
  2. 主broker寫入數據時,會喚醒WriteSocketService線程,查詢commit log,將數據發送到從broker
  3. 從接收到消息后,將數據寫入到自身的commit log,復制完成后返回新的更新偏移量給主
  4. 主broker同步等待到偏移量返回后,更新偏移量,如果消息偏移量大于等于主從復制請求的偏移量,則說明復制完成,然后返回消息發送成功的回執給生產者
  • 異步復制:主 Broker 發送消息后,不需要等待從 Broker 的確認,即可向生產者返回成功標識。異步復制可以提高性能,但是可能會有數據丟失的風險。
  1. 主broker啟動,監聽指定端口
  2. 從broker啟動,與主broker建立連接
  3. 從broker每5s向主broker拉取消息,從broker收到消息后將數據寫入到commit log中,同時返回偏移量給主broker,且更新自身存儲的當前最大偏移量

可以看到同步異步的差別,主要是同步由主節點發起復制,異步由從節點發起復制

2. 集群部署

2.1 環境準備

兩臺部署了rocketmq的服務器,rocketmq在linux中的安裝可參考我之前的文章:
linux安裝RocketMQ并配置開機自啟(一)

2.2 配置講解

我們通過broker自帶的conf目錄下的配置文件2m-*,實際就可以知道如何進行配置

在這里插入圖片描述
其配置項主要有以下幾項:

  1. brokerClusterName=DefaultCluster # 集群名稱,同一集群保持一致
  2. brokerName=broker-a # broker組名稱,同一主從保持一致
  3. brokerId=1 # brokerid, 每個broker節點唯一,0 表示 Master,>0 表示 Slave
  4. deleteWhen=04 # 刪除策略,通常配合時間使用,如每天的“04”點
  5. fileReservedTime=48 # 文件保留時間,單位為小時
  6. brokerRole=SLAVE # 角色,SLAVE從節點,ASYNC_MASTER 異步主節點,SYNC_MASTER 同步主節點
    當為同步主節點時,生產者發送消息給主節點成功,也要發送給從節點成功之后,集群才會返回成功給生產者;當為異步主節點,生產者發送給主節點,主節點寫入成功后就會返回成功回執給生產者。
  7. flushDiskType=ASYNC_FLUSH # 主從復制模式,ASYNC_FLUSH異步刷盤,SYNC_FLUSH同步刷盤

2.3 一主多從模式部署

1、提前部署3個namesrv服務節點,3個broker服務節點,其中計劃1個為主節點,2個從節點

broker服務節點角色
192.168.244.27
192.168.244.28
192.168.244.29

2、修改主節點服務器的broker.conf配置

brokerClusterName = DefaultCluster # 集群名稱
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
# namesrv集群直接配置多個namesrv地址即可,分號隔開
namesrvAddr=192.168.244.27:9876;192.168.244.28:9876;192.168.244.29:9876
# 開啟topic自動創建
autoCreateTopicEnable = true
brokerIP1 = 192.168.244.27

3、修改兩個從節點的broker.conf配置

brokerClusterName = DefaultCluster # 集群名稱
brokerName = broker-a
brokerId = 1 # 注意這里三個broker節點的id都要不一致
deleteWhen = 04
fileReservedTime = 48
brokerRole = SLAVE
flushDiskType = ASYNC_FLUSH
# namesrv集群直接配置多個namesrv地址即可,分號隔開
namesrvAddr=192.168.244.27:9876;192.168.244.28:9876;192.168.244.29:9876
# 開啟topic自動創建
autoCreateTopicEnable = true
brokerIP1 = 192.168.244.28 # 節點ip
brokerClusterName = DefaultCluster # 集群名稱
brokerName = broker-a
brokerId = 2 # 注意這里三個broker節點的id都要不一致
deleteWhen = 04
fileReservedTime = 48
brokerRole = SLAVE
flushDiskType = ASYNC_FLUSH
# namesrv集群直接配置多個namesrv地址即可,分號隔開
namesrvAddr=192.168.244.27:9876;192.168.244.28:9876;192.168.244.29:9876
# 開啟topic自動創建
autoCreateTopicEnable = true
brokerIP1 = 192.168.244.29 # 節點ip

4、啟動3個namesrv

5、啟動3個broker

6、查詢集群狀態

# 進入rocektmq安裝目錄
cd /data/rocketmq-4.8.0 
# 執行查詢
./bin/mqadmin clusterList -n "192.168.244.27:9876;192.168.244.28:9876;192.168.244.29:9876"

在這里插入圖片描述

7、也可以通過管理后臺查看集群節點
在這里插入圖片描述
8、使用之前的代碼測試消息發送
在這里插入圖片描述
消息消費也正常
在這里插入圖片描述

2.4 多主無從模式部署

1、提前部署2個namesrv服務節點,2個broker服務節點,其中計劃2個為主節點,無從節點

broker服務節點角色
192.168.244.27
192.168.244.28

2、修改其中一個節點服務器的broker.conf配置

brokerClusterName = DefaultCluster # 集群名稱
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
# namesrv集群直接配置多個namesrv地址即可,分號隔開
namesrvAddr=192.168.244.27:9876;192.168.244.28:9876
# 開啟topic自動創建
autoCreateTopicEnable = true
brokerIP1 = 192.168.244.27

3、修改另一個節點的broker.conf配置

brokerClusterName = DefaultCluster # 集群名稱
brokerName = broker-b
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
# namesrv集群直接配置多個namesrv地址即可,分號隔開
namesrvAddr=192.168.244.27:9876;192.168.244.28:9876
# 開啟topic自動創建
autoCreateTopicEnable = true
brokerIP1 = 192.168.244.27

4、啟動2個namesrv

5、啟動2個broker

6、查詢集群狀態

# 進入rocektmq安裝目錄
cd /data/rocketmq-4.8.0 
# 執行查詢
./bin/mqadmin clusterList -n "192.168.244.27:9876;192.168.244.28:9876"

在這里插入圖片描述

2.5 多主多從模式部署

1、提前部署3個namesrv服務節點,4個broker服務節點,其中計劃2個為主節點,2個從節點

broker服務節點角色
192.168.244.27主1
192.168.244.28主2
192.168.244.29從1
192.168.244.30從2

2、修改主1節點服務器的broker.conf配置

brokerClusterName = DefaultCluster # 集群名稱
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
# namesrv集群直接配置多個namesrv地址即可,分號隔開
namesrvAddr=192.168.244.27:9876;192.168.244.28:9876;192.168.244.29:9876
# 開啟topic自動創建
autoCreateTopicEnable = true
brokerIP1 = 192.168.244.27

3、修改主2節點的broker.conf配置

brokerClusterName = DefaultCluster # 集群名稱
brokerName = broker-b
brokerId = 0 # 注意這里三個broker節點的id都要不一致
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
# namesrv集群直接配置多個namesrv地址即可,分號隔開
namesrvAddr=192.168.244.27:9876;192.168.244.28:9876;192.168.244.29:9876
# 開啟topic自動創建
autoCreateTopicEnable = true
brokerIP1 = 192.168.244.28 # 節點ip, 另一個是192.168.244.29

4、修改兩個從節點的配置分別為

brokerClusterName = DefaultCluster # 集群名稱
brokerName = broker-a
brokerId = 1
deleteWhen = 04
fileReservedTime = 48
brokerRole = SLAVE
flushDiskType = ASYNC_FLUSH
# namesrv集群直接配置多個namesrv地址即可,分號隔開
namesrvAddr=192.168.244.27:9876;192.168.244.28:9876;192.168.244.29:9876
# 開啟topic自動創建
autoCreateTopicEnable = true
brokerIP1 = 192.168.244.29
brokerClusterName = DefaultCluster # 集群名稱
brokerName = broker-b
brokerId = 1
deleteWhen = 04
fileReservedTime = 48
brokerRole = SLAVE
flushDiskType = ASYNC_FLUSH
# namesrv集群直接配置多個namesrv地址即可,分號隔開
namesrvAddr=192.168.244.27:9876;192.168.244.28:9876;192.168.244.29:9876
# 開啟topic自動創建
autoCreateTopicEnable = true
brokerIP1 = 192.168.244.30

4、啟動3個namesrv

5、啟動4個broker

6、查詢集群狀態

# 進入rocektmq安裝目錄
cd /data/rocketmq-4.8.0 
# 執行查詢
./bin/mqadmin clusterList -n "192.168.244.27:9876;192.168.244.28:9876;192.168.244.29:9876"

顯示有2個主節點,2個從節點
在這里插入圖片描述

3. 總結

綜上,我們針對rocketmq的三種集群模式部署就講解完成了,如果需要調整刷盤模式,調整flushDiskType參數即可。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/42250.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/42250.shtml
英文地址,請注明出處:http://en.pswp.cn/web/42250.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

痙攣性斜頸對生活有哪些影響?

痙攣性斜頸,這個名字聽起來可能并不熟悉,但它實際上是一種神經系統疾病,影響著全球數百萬人的生活質量。它以一種無法控制的方式,使患者的頸部肌肉發生不自主的收縮,導致頭部姿勢異常。對于患者來說,痙攣性…

和Bug較勁的第n天:[Error: Unable to open snapshot file: No such file or directory]

問題描述 最近做了一個小demo,基于parcel的,在遷移倉庫的時候發生了一個報錯 [Error: Unable to open snapshot file: No such file or directory] 原因分析: 在遷移倉庫的時候,我將項目放入了一個以中文命名的文件夾里&#xf…

模電基礎 - 信號的運算和處理

目錄 一. 簡介 二. 加法 三. 減法 四. 乘法 五. 除法 六. 總結 一. 簡介 在模電基礎中,信號的運算和處理是非常重要的內容。 信號的運算包括加法、減法、乘法、除法等。通過使用集成運放,可以很容易地實現這些運算。例如,利用反相輸入…

算法的幾種常見形式

算法(Algorithm) 算法(Algorithm)是指解決問題或完成任務的一系列明確的步驟或規則。在計算機科學中,算法是程序的核心部分,它定義了如何執行特定的任務或解決特定的問題。算法可以用多種方式來表示和實現…

宜春旅游集散中心展廳OLED透明屏方案設計

一、項目概述 為提升宜春旅游集散中心展廳的現代化展示水平,增強游客的參觀體驗,我們計劃在展廳的核心區域引入OLED透明屏技術。該方案旨在通過高科技的視覺呈現方式,將展品信息以虛擬與現實相結合的方式展現,打造出一個既具科技感…

谷粒商城學習筆記-22-分布式組件-SpringCloud-OpenFeign測試遠程調用

文章目錄 一,OpenFeign的簡介二,OpenFeign的使用步驟1,場景說明2,引入依賴2,開啟OpenFeign3,編寫Feign接口4,使用feign調用遠程接口5,驗證 錯誤記錄 上一節學習了注冊中心&#xff0…

鼠標錄制工具|鍵鼠軌跡錄制,實現自動辦公

利用鍵鼠錄制工具錄制固定的鼠標點擊、鍵盤輸入等操作,實現自動化執行固定操作,節省時間。鼠標錄制功能可以錄制多步驟的操作,將錄制的動作保存并命名,甚至可以編輯操作速度。下面將演示幾種生活中常見的案例,詳細講解…

企業微信hook接口協議,移除群成員通知

移除群成員通知 返回示例 {"flag": 0, "receiver": 0, "sender_name": "", "is_room": 1, "server_id": 15318083, "send_time": 1687688952, "sender": 1688855749266556, "referid&…

k8s中使用cert-manager生成自簽名證書

一、安裝 cert-manager 注意查看cert-manager和K8S支持的對應版本 我的 k8sv1.28.2,cert-manager v1.12.11 下載 cert-manager.yaml 文件,執行 kubectl apply -f cert-manager.yaml二、生成自簽名證書 cert-selfsigned.yaml apiVersion: cert-manage…

【SpringBoot】隨機鹽值+雙重SHA256加密實戰

目錄: 1.SHA-256和隨機鹽值 2.前端實現 3.后端實現 1.SHA-256和Salt 1.1.什么是SHA-256 SHA-256是一種信息摘要算法,也是一種密碼散列函數。對于任意長度的消息,SHA256都會產生一個256bit長的散列值(哈希值)&…

插件更新了!

最近花了點時間,給網頁插件添加了新功能,下面簡單給大家介紹一下如何使用 我們安裝好插件后,進入網頁就可以看到一個帶logo的按鈕了,我們可以點一下就可以跳出快捷操作 不同頁面點擊會出現不同的功能,大家可以根據自己…

dy商品評論采集

摘要 本文將詳細介紹如何通過抖音商品評論采集來獲取精準的用戶反饋,從而優化產品和營銷策略。通過這個指南,您將學會如何設置評論采集系統,分析用戶評論數據,以及如何利用這些數據來吸引更多粉絲,增加商品銷量。 返…

跨境傳輸需要遵守哪些準則,如何做到有效管控?

在全球化的商業環境中,跨國企業面臨著數據跨境傳輸的挑戰。隨著業務的擴展,企業需要在不同國家和地區之間高效、安全地傳輸大量數據。選擇合適的跨境傳輸方案對于保障數據安全、提高業務效率、遵守法律法規至關重要。 跨境傳輸數據需要遵守的準則和規定主…

Nginx:關于實現跨域代理

運維專題 Nginx:關于實現跨域代理 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.ne…

數據賦能(142)——開發:數據合并——技術方法、主要工具

技術方法 數據合并的技術方法主要包括以下幾種: 軸向連接(Concatenation): 使用pd.concat()函數,沿一個軸(通常是行或列)將多個DataFrame對象連接在一起,形成一個新的DataFrame對…

html自學筆記與面試會問到問題

第一章 1.1什么是JavaScript? 一各跨平臺的腳本語言1.2ECMA特點: 由三大部分組成:核心語法(關鍵字、核心對象、語法)、DOM、BOM1.3 取余運算(又叫取模運算): 取余:整除后,除不盡的…

發那科機床聯網串口配置

本文章僅針對無網口,需要通過串口輸出采集數據情況。跟這篇文章互為參考,一個理論,一個實戰。 Fanuc DPRNT宏程序串口采集-CSDN博客 一、禁用機器串口監控 選擇System、monit 二、設置參數可寫 在MDI模式中字符面板上按OFS/SET鍵,連按致屏…

終于搞定了通過兩路藍牙接收數據

一直想做無線傳感器,通過藍牙來接收數據,無奈因為arduino接收串口數據的一些問題,一直擱到現在。因為學校里給學生開了選修課,所以手邊有一些nano和mega可以使用,所以就做了用兩個nano加上兩個藍牙模塊來發射數據&…

經常用借唄和花唄對征信有影響嗎?

說起支付寶里的花唄和借唄,大伙兒肯定都不陌生,它們倆就像是支付寶里的信用貸款雙胞胎,名字相近,性格卻大相徑庭。現在,這倆兄弟都乖乖地接入了央行的征信大家庭,你的每一次使用,都會被記錄得清…

GEE代碼實例教程詳解:湖泊水位變化監測

簡介 本篇博客將介紹如何使用Google Earth Engine (GEE) 對湖泊水位變化進行監測。通過MODIS數據集,我們可以識別2001年和2023年的湖泊范圍,并計算湖泊的高程變化。 背景知識 MODIS數據集 MODIS/061/MOD09Q1數據集提供了MODIS的地表反射數據&#xf…