在上一期中我們提到了RocketMQ的一些基礎(chǔ)知識(shí),在本篇博客中基于理論實(shí)戰(zhàn)部署一下吧~
由RocketMQ網(wǎng)絡(luò)部署圖得知,RocketMQ中主要涉及到四種角色:NameServer注冊(cè)服務(wù)器、Broker服務(wù)器、Producer生產(chǎn)者、Consumer消費(fèi)者。每種角色都可以單獨(dú)搭建集群,下面我們?cè)敿?xì)介紹一個(gè)NameServer集群、Broker集群、Producer集群、Consumer集群。
NameServer通常會(huì)有多個(gè)實(shí)例部署,不過 NameServer 是無(wú)狀態(tài)的,即 NameServer 集群中的各個(gè)節(jié)點(diǎn)間是無(wú)差異的,各節(jié)點(diǎn)間相互不進(jìn)行信息通訊。在 NameServer 內(nèi)部維護(hù)著一個(gè) Broker 列表,用來(lái)動(dòng)態(tài)存儲(chǔ) Broker的信息。當(dāng) Broker 節(jié)點(diǎn)啟動(dòng)時(shí),會(huì)輪詢 NameServer 列表,與每個(gè) NameServer 節(jié)點(diǎn)建立長(zhǎng)連接,并發(fā)起 注冊(cè)請(qǐng)求。所以每一個(gè)NameServer實(shí)例上面都保存一份完整的路由信息。當(dāng)某個(gè)NameServer因某種原因下線了,客戶端仍然可以向其它NameServer獲取路由信息。
2. Producer集群Producer 與 NameServer集群中的其中一個(gè)節(jié)點(diǎn)(隨機(jī)選擇)建立長(zhǎng)連接,定期從 NameServer 取 Topic 路由信息,并向提供 Topic 服務(wù)的 Master 建立長(zhǎng)連接,且定時(shí)向Master發(fā)送心跳。Producer完全無(wú)狀態(tài),可集群部署。
3. Consumer集群Consumer 與 NameServer 集群中的其中一個(gè)節(jié)點(diǎn)(隨機(jī)選擇)建立長(zhǎng)連接,定期從 NameServer 取 Topic 路由信息,并向提供 Topic服務(wù)的Master、Slave建立長(zhǎng)連接,且定時(shí)向Master、Slave發(fā)送心跳。Consumer既可以從Master訂閱消息,也可以從 Slave 訂閱消息,訂閱規(guī)則由 Broker 配置決定。
4. Broker集群對(duì)于整個(gè)RocketMQ集群的部署,Name server、producer、consumer之間都是無(wú)狀態(tài)的,集群中的每個(gè)節(jié)點(diǎn)都是一樣的。
Broker 的部署相對(duì)復(fù)雜,Broker分為Master與Slave,一個(gè)Master可以對(duì)應(yīng)多個(gè)Slave,但是一個(gè)Slave只能對(duì)應(yīng)一個(gè)Master。Master與Slave的對(duì)應(yīng)關(guān)系通過指定相同的BrokerName,即多個(gè)節(jié)點(diǎn)指定相同的BrokerName表示是同一組的。節(jié)點(diǎn)的區(qū)分是由不同的BrokerId來(lái)定義,BrokerId為0表示Master,非0表示Slave。Master也可以部署多個(gè)。每個(gè)Broker與NameServer集群中的所有節(jié)點(diǎn)建立長(zhǎng)連接,定期注冊(cè)Topic信息到所有NameServer。
4.1 節(jié)點(diǎn)間數(shù)據(jù)同步 以及 消息的持久化復(fù)制策略
既然 Broker 分為主從節(jié)點(diǎn),那么Master與Slave 之間是如何進(jìn)行數(shù)據(jù)同步呢?
關(guān)于 Broker 的Master與Slave間的數(shù)據(jù)同步方式我們稱為復(fù)制策略,分為同步復(fù)制與異步復(fù)制兩種方式。
其中異步復(fù)制策略會(huì)降低系統(tǒng)的寫入延遲,RT變小,提高了系統(tǒng)的吞吐量。
刷盤策略
當(dāng)消息發(fā)送到broker內(nèi)存后消息如何持久化到磁盤呢?
刷盤策略,指的是Broker中消息的落盤方式,即消息發(fā)送到Broker內(nèi)存后消息持久化到磁盤的方式。也分為同步刷盤與異步刷盤兩種方式。
消息寫入到Broker的內(nèi)存,一般是寫入了PageCache。對(duì)于異步刷盤策略,消息會(huì)寫入到PageCache后立即返回成功ACK,但并不會(huì)立即做落盤操作,而是當(dāng)PageCache到達(dá)一定量時(shí)才會(huì)自動(dòng)進(jìn)行落盤。異步刷盤策略會(huì)降低系統(tǒng)的寫入延遲,RT變小,提高了系統(tǒng)的吞吐量。
4.2 Broker的集群模式根據(jù)Broker集群中各個(gè)節(jié)點(diǎn)間關(guān)系的不同,Broker集群可以分為以下幾類:
4.2.1、單Master模式只有一個(gè) Broker (其本質(zhì)上就不能稱為集群) .
這種方式風(fēng)險(xiǎn)較大,一旦Broker重啟或者宕機(jī)時(shí),會(huì)導(dǎo)致整個(gè)服務(wù)不可用。不建議線上環(huán)境使用,可以用于本地測(cè)試。
4.2.2、多Master模式broker集群僅由多個(gè)master構(gòu)成,不存在Slave。
同一Topic的各個(gè)Queue會(huì)平均分布在各個(gè)master節(jié)點(diǎn)上。
? broker集群由多個(gè)master構(gòu)成,每個(gè)master又配置了多個(gè)slave(在配置了RAID磁盤陣列的情況下,一 個(gè)master一般配置一個(gè)slave即可)。
master與slave的關(guān)系是主備關(guān)系:
HA采用異步復(fù)制方式,主備之間有短暫消息延遲(毫秒級(jí)),這種模式的優(yōu)缺點(diǎn)如下:
?異步復(fù)制即前面所講的復(fù)制策略中的異步復(fù)制策略,即消息寫入master成功后,master立即向producer返回成功ACK,無(wú)需等待slave同步數(shù)據(jù)成功。 該模式的大特點(diǎn)之一是,當(dāng)master宕機(jī)后slave能夠自動(dòng)切換為master。不過由于slave從master的同步具有短暫的延遲(毫秒級(jí)),所以當(dāng)master宕機(jī)后,這種異步復(fù)制方式可能會(huì)存在少量消息的丟失問題。( Slave從Master同步的延遲越短,其可能丟失的消息就越少對(duì)于Master的RAID磁盤陣列,若使用的也是異步復(fù)制策略,同樣也存在延遲問題,同樣也可能會(huì)丟失消息。但RAID陣列的秘訣是微秒級(jí)的(因?yàn)槭怯捎脖P支持的),所以其丟失的數(shù)據(jù)量會(huì)更少。)
4.2.4、多Master多Slave模式-同步雙寫? 該模式是多Master多Slave模式的 同步復(fù)制 實(shí)現(xiàn)。所謂同步雙寫,指的是消息寫入master成功后, master會(huì)等待slave同步數(shù)據(jù)成功后才向producer返回成功ACK,即: master與slave都要寫入成功后才會(huì)返回成功ACK,也即雙寫。
? 該模式與異步復(fù)制模式相比,優(yōu)點(diǎn)是消息的安全性更高,不存在消息丟失的情況。但單個(gè)消息的RT略高,從而導(dǎo)致性能要略低(大約低10%)。 該模式存在一個(gè)大的問題:對(duì)于目前的版本,Master宕機(jī)后,Slave不會(huì)自動(dòng)切換到Master。
最佳實(shí)踐一般會(huì) 為Master配置RAID10磁盤陣列,然后再為其配置一個(gè)Slave。 即利用了RAID10磁盤陣列的高效、安全性,又解決了可能會(huì)影響訂閱的問題。
關(guān)于RAID相關(guān)的知識(shí)科班同學(xué)可以跳過啦~
RAID歷史
? 1988 年美國(guó)加州大學(xué)伯克利分校的 D. A. Patterson 教授等首次在論文 “A Case of Redundant Array of Inexpensive Disks” 中提出RAID 概念 ,即廉價(jià)冗余磁盤陣列( Redundant Arrayof Inexpensive Disks )。由于當(dāng)時(shí)大容量磁盤比較昂貴, RAID 的基本思想是將多個(gè)容量較小、相對(duì)廉價(jià)的磁盤進(jìn)行有機(jī)組合,從而以較低的成本獲得與昂貴大容量磁盤相當(dāng)?shù)娜萘?、性能、可靠性。隨著磁盤成本和價(jià)格的不斷降低, “廉價(jià)” 已經(jīng)毫無(wú)意義。因此, RAID咨詢委員會(huì)( RAID Advisory Board, RAB )決定用 “ 獨(dú)立 ” 替代 “ 廉價(jià) ” ,于時(shí) RAID 變成了獨(dú)立磁盤冗余陣列( Redundant Array of Independent Disks )。但這僅僅是名稱的變化,實(shí)質(zhì)內(nèi)容沒有改變。
RAID等級(jí)
? RAID這種設(shè)計(jì)思想很快被業(yè)界接納, RAID技術(shù)作為高性能、高可靠的存儲(chǔ)技術(shù),得到了非常廣泛的應(yīng)用。 RAID主要利用鏡像、數(shù)據(jù)條帶和數(shù)據(jù)校驗(yàn)三種技術(shù)來(lái)獲取高性能、可靠性、容錯(cuò)能力和擴(kuò)展性,根據(jù)對(duì)這三種技術(shù)的使用策略和組合架構(gòu),可以把 RAID分為不同的等級(jí),以滿足不同數(shù)據(jù)應(yīng)用的需求。
? D. A. Patterson 等的論文中定義了 RAID0 ~ RAID6 原始 RAID 等級(jí)。隨后存儲(chǔ)廠商又不斷推出 RAID7 、 RAID10、RAID01 、 RAID50 、 RAID53 、 RAID100 等 RAID 等級(jí),但這些并無(wú)統(tǒng)一的標(biāo)準(zhǔn)。目前業(yè)界與學(xué)術(shù)界公認(rèn)的標(biāo)準(zhǔn)是 RAID0 ~ RAID6 ,而在實(shí)際應(yīng)用領(lǐng)域中使用最多的 RAID 等級(jí)是 RAID0 、 RAID1 、 RAID3 、 RAID5 、 RAID6 和 RAID10。 RAID每一個(gè)等級(jí)代表一種實(shí)現(xiàn)方法和技術(shù),等級(jí)之間并無(wú)高低之分。在實(shí)際應(yīng)用中,應(yīng)當(dāng)根據(jù)用戶的數(shù)據(jù)應(yīng)用特點(diǎn),綜合考慮可用性、性能和成本來(lái)選擇合適的RAID 等級(jí),以及具體的實(shí)現(xiàn)方式。
鏡像技術(shù)
? 鏡像技術(shù)是一種冗余技術(shù),為磁盤提供數(shù)據(jù)備份功能,防止磁盤發(fā)生故障而造成數(shù)據(jù)丟失。
? 對(duì)于 RAID 而言,采用鏡像技術(shù)最典型地的用法就是,同時(shí)在磁盤陣列中產(chǎn)生兩個(gè)完全相同的數(shù)據(jù)副本,并且分布在兩個(gè)不同的磁盤上。鏡像提供了完全的數(shù)據(jù)冗余能力,當(dāng)一個(gè)數(shù)據(jù)副本失效不可用時(shí),外部系統(tǒng)仍可 正常訪問另一副本,不會(huì)對(duì)應(yīng)用系統(tǒng)運(yùn)行和性能產(chǎn)生影響。而且,鏡像不需要額外的計(jì)算和校驗(yàn),故障修復(fù)非???,直接復(fù)制即可。鏡像技術(shù)可以從多個(gè)副本進(jìn)行并發(fā)讀取數(shù)據(jù),提供更高的讀 I/O 性能,但不能并行寫數(shù)據(jù),寫多個(gè)副本通常會(huì)導(dǎo)致一定的 I/O 性能下降。 鏡像技術(shù)提供了非常高的數(shù)據(jù)安全性,其代價(jià)也是非常昂貴的,需要至少雙倍的存儲(chǔ)空間。高成本限制了鏡像的廣泛應(yīng)用,主要應(yīng)用于至關(guān)重要的數(shù)據(jù)保護(hù),這種場(chǎng)合下的數(shù)據(jù)丟失可能會(huì)造成非常巨大的損失。
數(shù)據(jù)條帶技術(shù)
? 數(shù)據(jù)條帶化技術(shù)是一種自動(dòng)將 I/O操作負(fù)載均衡到多個(gè)物理磁盤上的技術(shù)。更具體地說就是,將一塊連續(xù)的數(shù)據(jù)分成很多小部分并把它們分別存儲(chǔ)到不同磁盤上。這就能使多個(gè)進(jìn)程可以并發(fā)訪問數(shù)據(jù)的多個(gè)不同部分,從而獲得大程度上的 I/O 并行能力,極大地提升性能。
數(shù)據(jù)校驗(yàn)技術(shù)
? 數(shù)據(jù)校驗(yàn)技術(shù)是指, RAID 要在寫入數(shù)據(jù)的同時(shí)進(jìn)行校驗(yàn)計(jì)算,并將得到的校驗(yàn)數(shù)據(jù)存儲(chǔ)在 RAID 成員 磁盤中。校驗(yàn)數(shù)據(jù)可以集中保存在某個(gè)磁盤或分散存儲(chǔ)在多個(gè)不同磁盤中。當(dāng)其中一部分?jǐn)?shù)據(jù)出錯(cuò)時(shí), 就可以對(duì)剩余數(shù)據(jù)和校驗(yàn)數(shù)據(jù)進(jìn)行反校驗(yàn)計(jì)算重建丟失的數(shù)據(jù)。
數(shù)據(jù)校驗(yàn)技術(shù)相對(duì)于鏡像技術(shù)的優(yōu)勢(shì)在于節(jié)省大量開銷,但由于每次數(shù)據(jù)讀寫都要進(jìn)行大量的校驗(yàn)運(yùn)算,對(duì)計(jì)算機(jī)的運(yùn)算速度要求很高,且必須使用硬件 RAID 控制器。在數(shù)據(jù)重建恢復(fù)方面,檢驗(yàn)技術(shù)比鏡像技術(shù)復(fù)雜得多且慢得多。
本次基于兩臺(tái)云服務(wù)器搭建RocketMQ集群,Broker采取雙主雙從,同步雙寫方式。先看看總體架構(gòu):
RocketMQ集群工作流程
首先我們需要準(zhǔn)備兩臺(tái)云服務(wù)器,小編使用的分別是兩核4G的騰訊云 和 1核兩G的阿里云 ,系統(tǒng)都是 CentOS7。
序號(hào) | IP | 角色 | 架構(gòu)模式 | 服務(wù)器商 |
---|---|---|---|---|
1 | 124.222.223.222 | Nameserver、Broker | Master1、Slave2 | 騰訊云 |
2 | 47.96.232.192 | Nameserver、Broker | Master2、Slave1 | 阿里云 |
服務(wù)器需要具備java環(huán)境、RocketMQ包,以及足夠的空閑內(nèi)存。關(guān)于java、RocketMQ的下載不是本文的重點(diǎn)就不再一一演示了~
1、需要在兩臺(tái)Host添加以下信息:
vim /etc/hosts
配置如下:
# nameserver
124.222.223.222 rocketmq-nameserver1
47.96.232.192 rocketmq-nameserver2
# broker
124.222.223.222 rocketmq-master1
124.222.223.222 rocketmq-slave2
47.96.232.192 rocketmq-master2
47.96.232.192 rocketmq-slave1
配置完成后,重啟網(wǎng)卡:
systemctl restart network
大家根據(jù)自己的服務(wù)器ip更換以上hosts文件內(nèi)容。
第二步、配置防火墻節(jié)點(diǎn)之間需要通信,需要開放相關(guān)的端口,或者簡(jiǎn)單粗暴的方式——直接關(guān)閉防火墻。小編為了安全,只開放特定的端口號(hào),RocketMQ默認(rèn)使用3個(gè)端口:8976
、10911
、11011
、11009
。
vim /etc/profile
在profile文件的末尾加入以下命令:
# rocketMQ
ROCKETMQ_HOME=/soft/RocketMQ/rocketmq-all-4.9.0-bin-release
PATH=$PATH:$ROCKETMQ_HOME/bin
export ROCKETMQ_HOME PATH
輸入:wq!
保存并推出,并使得配置立刻生效:
source /etc/profile
這一步僅是方便在服務(wù)器任何路徑下都可以執(zhí)行rocketmq的bin目錄下的命令,可跳過。
第四步、創(chuàng)建消息存儲(chǔ)路徑RocketMQ消息持久化的位置默認(rèn)是在/root/store/commitlog
,為了方便操作我們自定義消息的存儲(chǔ)路徑~
# 在第一臺(tái)服務(wù)器執(zhí)行
mkdir /soft/RocketMQ/store-a
mkdir /soft/RocketMQ/store-a/commitlog
mkdir /soft/RocketMQ/store-a/consumequeue
mkdir /soft/RocketMQ/store-a/index
mkdir /soft/RocketMQ/store-b-s
mkdir /soft/RocketMQ/store-b-s/commitlog
mkdir /soft/RocketMQ/store-b-s/consumequeue
mkdir /soft/RocketMQ/store-b-s/index
# 在第二臺(tái)服務(wù)器執(zhí)行
mkdir /soft/RocketMQ/store-b
mkdir /soft/RocketMQ/store-b/commitlog
mkdir /soft/RocketMQ/store-b/consumequeue
mkdir /soft/RocketMQ/store-b/index
mkdir /soft/RocketMQ/store-a-s
mkdir /soft/RocketMQ/store-a-s/commitlog
mkdir /soft/RocketMQ/store-a-s/consumequeue
mkdir /soft/RocketMQ/store-a-s/index
提示:以上操作兩臺(tái)服務(wù)器都執(zhí)行一遍~
我們查看一下conf
下的文件,我們本次搭建雙主雙從的方式故選擇2m-2s-sync
進(jìn)入2m-2s-sync
,在對(duì)應(yīng)的服務(wù)器上配置對(duì)應(yīng)的配置文件。如在124.222.223.222
服務(wù)器上實(shí)現(xiàn)Master1、Slave2,修改broker-a.properties
與broker-b-s.properties
即可。
在124.222.223.222
服務(wù)器上修改broker-a.properties配置文件
vim /soft/RocketMQ/rocketmq-all-4.9.0-bin-release/conf/2m-2s-sync/broker-a.properties
修改配置如下:
#暴露外網(wǎng)的IP
brokerIP1=124.222.223.222
brokerIP2=124.222.223.222
#所屬集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分號(hào)分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在發(fā)送消息時(shí),自動(dòng)創(chuàng)建服務(wù)器不存在的topic,默認(rèn)創(chuàng)建的隊(duì)列數(shù)
defaultTopicQueueNums=4
#是否允許 Broker 自動(dòng)創(chuàng)建Topic,建議線下開啟,線上關(guān)閉
autoCreateTopicEnable=true
#是否允許 Broker 自動(dòng)創(chuàng)建訂閱組,建議線下開啟,線上關(guān)閉
autoCreateSubscriptionGroup=true
#Broker 對(duì)外服務(wù)的監(jiān)聽端口
listenPort=10911
#刪除文件時(shí)間點(diǎn),默認(rèn)凌晨 4點(diǎn)
deleteWhen=04
#文件保留時(shí)間,默認(rèn) 48 小時(shí)
fileReservedTime=120
#commitLog每個(gè)文件的大小默認(rèn)1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個(gè)文件默認(rèn)存30W條,根據(jù)業(yè)務(wù)情況調(diào)整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測(cè)物理文件磁盤空間
diskMaxUsedSpaceRatio=88
#存儲(chǔ)路徑
storePathRootDir=/soft/RocketMQ/store-a
#commitLog 存儲(chǔ)路徑
storePathCommitLog=/soft/RocketMQ/store-a/commitlog
#消費(fèi)隊(duì)列存儲(chǔ)路徑存儲(chǔ)路徑
storePathConsumeQueue=/soft/RocketMQ/store-a/consumequeue
#消息索引存儲(chǔ)路徑
storePathIndex=/soft/RocketMQ/store-a/index
#checkpoint 文件存儲(chǔ)路徑
storeCheckpoint=/soft/RocketMQ/store-a/checkpoint
#abort 文件存儲(chǔ)路徑
abortFile=/soft/RocketMQ/store-a/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 異步復(fù)制Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#發(fā)消息線程池?cái)?shù)量
#sendMessageThreadPoolNums=128
#拉消息線程池?cái)?shù)量
#pullMessageThreadPoolNums=128
在124.222.223.222
服務(wù)器上修改broker-b-s.properties配置文件
vim /soft/RocketMQ/rocketmq-all-4.9.0-bin-release/conf/2m-2s-sync/broker-b-s.properties
修改配置如下:
#暴露外網(wǎng)的IP
brokerIP1=124.222.223.222
brokerIP2=124.222.223.222
#所屬集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分號(hào)分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在發(fā)送消息時(shí),自動(dòng)創(chuàng)建服務(wù)器不存在的topic,默認(rèn)創(chuàng)建的隊(duì)列數(shù)
defaultTopicQueueNums=4
#是否允許 Broker 自動(dòng)創(chuàng)建Topic,建議線下開啟,線上關(guān)閉
autoCreateTopicEnable=true
#是否允許 Broker 自動(dòng)創(chuàng)建訂閱組,建議線下開啟,線上關(guān)閉
autoCreateSubscriptionGroup=true
#Broker 對(duì)外服務(wù)的監(jiān)聽端口
listenPort=11011
#刪除文件時(shí)間點(diǎn),默認(rèn)凌晨 4點(diǎn)
deleteWhen=04
#文件保留時(shí)間,默認(rèn) 48 小時(shí)
fileReservedTime=120
#commitLog每個(gè)文件的大小默認(rèn)1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個(gè)文件默認(rèn)存30W條,根據(jù)業(yè)務(wù)情況調(diào)整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測(cè)物理文件磁盤空間
diskMaxUsedSpaceRatio=88
#存儲(chǔ)路徑
storePathRootDir=/soft/RocketMQ/store-b-s
#commitLog 存儲(chǔ)路徑
storePathCommitLog=/soft/RocketMQ/store-b-s/commitlog
#消費(fèi)隊(duì)列存儲(chǔ)路徑存儲(chǔ)路徑
storePathConsumeQueue=/soft/RocketMQ/store-b-s/consumequeue
#消息索引存儲(chǔ)路徑
storePathIndex=/soft/RocketMQ/store-b-s/index
#checkpoint 文件存儲(chǔ)路徑
storeCheckpoint=/soft/RocketMQ/store-b-s/checkpoint
#abort 文件存儲(chǔ)路徑
abortFile=/soft/RocketMQ/store-b-s/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 異步復(fù)制Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=SLAVE
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#發(fā)消息線程池?cái)?shù)量
#sendMessageThreadPoolNums=128
#拉消息線程池?cái)?shù)量
#pullMessageThreadPoolNums=128
在47.96.232.192
服務(wù)器上修改broker-b.properties配置文件
vim /soft/RocketMQ/rocketmq-all-4.9.0-bin-release/conf/2m-2s-sync/broker-b.properties
修改配置如下:
#暴露外網(wǎng)的IP
brokerIP1=47.96.232.192
brokerIP2=47.96.232.192
#所屬集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分號(hào)分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在發(fā)送消息時(shí),自動(dòng)創(chuàng)建服務(wù)器不存在的topic,默認(rèn)創(chuàng)建的隊(duì)列數(shù)
defaultTopicQueueNums=4
#是否允許 Broker 自動(dòng)創(chuàng)建Topic,建議線下開啟,線上關(guān)閉
autoCreateTopicEnable=true
#是否允許 Broker 自動(dòng)創(chuàng)建訂閱組,建議線下開啟,線上關(guān)閉
autoCreateSubscriptionGroup=true
#Broker 對(duì)外服務(wù)的監(jiān)聽端口
listenPort=10911
#刪除文件時(shí)間點(diǎn),默認(rèn)凌晨 4點(diǎn)
deleteWhen=04
#文件保留時(shí)間,默認(rèn) 48 小時(shí)
fileReservedTime=120
#commitLog每個(gè)文件的大小默認(rèn)1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個(gè)文件默認(rèn)存30W條,根據(jù)業(yè)務(wù)情況調(diào)整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測(cè)物理文件磁盤空間
diskMaxUsedSpaceRatio=88
#存儲(chǔ)路徑
storePathRootDir=/soft/RocketMQ/store-b
#commitLog 存儲(chǔ)路徑
storePathCommitLog=/soft/RocketMQ/store-b/commitlog
#消費(fèi)隊(duì)列存儲(chǔ)路徑存儲(chǔ)路徑
storePathConsumeQueue=/soft/RocketMQ/store-b/consumequeue
#消息索引存儲(chǔ)路徑
storePathIndex=/soft/RocketMQ/store-b/index
#checkpoint 文件存儲(chǔ)路徑
storeCheckpoint=/soft/RocketMQ/store-b/checkpoint
#abort 文件存儲(chǔ)路徑
abortFile=/soft/RocketMQ/store-b/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 異步復(fù)制Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#發(fā)消息線程池?cái)?shù)量
#sendMessageThreadPoolNums=128
#拉消息線程池?cái)?shù)量
#pullMessageThreadPoolNums=128
在47.96.232.192
服務(wù)器上修改broker-a-s.properties配置文件
vim /soft/RocketMQ/rocketmq-all-4.9.0-bin-release/conf/2m-2s-sync/broker-a-s.properties
修改配置如下:
#暴露外網(wǎng)的IP
brokerIP1=47.96.232.192
brokerIP2=47.96.232.192
#所屬集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分號(hào)分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在發(fā)送消息時(shí),自動(dòng)創(chuàng)建服務(wù)器不存在的topic,默認(rèn)創(chuàng)建的隊(duì)列數(shù)
defaultTopicQueueNums=4
#是否允許 Broker 自動(dòng)創(chuàng)建Topic,建議線下開啟,線上關(guān)閉
autoCreateTopicEnable=true
#是否允許 Broker 自動(dòng)創(chuàng)建訂閱組,建議線下開啟,線上關(guān)閉
autoCreateSubscriptionGroup=true
#Broker 對(duì)外服務(wù)的監(jiān)聽端口
listenPort=11011
#刪除文件時(shí)間點(diǎn),默認(rèn)凌晨 4點(diǎn)
deleteWhen=04
#文件保留時(shí)間,默認(rèn) 48 小時(shí)
fileReservedTime=120
#commitLog每個(gè)文件的大小默認(rèn)1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個(gè)文件默認(rèn)存30W條,根據(jù)業(yè)務(wù)情況調(diào)整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測(cè)物理文件磁盤空間
diskMaxUsedSpaceRatio=88
#存儲(chǔ)路徑
storePathRootDir=/soft/RocketMQ/store-a-s
#commitLog 存儲(chǔ)路徑
storePathCommitLog=/soft/RocketMQ/store-a-s/commitlog
#消費(fèi)隊(duì)列存儲(chǔ)路徑存儲(chǔ)路徑
storePathConsumeQueue=/soft/RocketMQ/store-a-s/consumequeue
#消息索引存儲(chǔ)路徑
storePathIndex=/soft/RocketMQ/store-a-s/index
#checkpoint 文件存儲(chǔ)路徑
storeCheckpoint=/soft/RocketMQ/store-a-s/checkpoint
#abort 文件存儲(chǔ)路徑
abortFile=/soft/RocketMQ/store-a-s/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 異步復(fù)制Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=SLAVE
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#發(fā)消息線程池?cái)?shù)量
#sendMessageThreadPoolNums=128
#拉消息線程池?cái)?shù)量
#pullMessageThreadPoolNums=128
分別在 124.222.223.222、47.96.232.192服務(wù)器上啟動(dòng)NameServer
創(chuàng)建用來(lái)存放nameserver日志的文件
[root@hgwtencent /]# cd /soft/RocketMQ/
[root@hgwtencent RocketMQ]# mkdir -p store/log
[root@hgwtencent RocketMQ]# touch store/log/namesrv.log
[root@hgwtencent RocketMQ]# touch store/log/broker1.log
[root@hgwtencent RocketMQ]# touch store/log/broker2.log
啟動(dòng) NameServer~
[root@hgwtencent RocketMQ]# cd /soft/RocketMQ/rocketmq-all-4.9.0-bin-release/bin
[root@hgwtencent rocketmq-all-4.9.0-bin-release]# nohup sh mqnamesrv >../../store/log/namesrv.log 2>&1 &
第二步、啟動(dòng)Broker集群1、在124.222.223.222上啟動(dòng)master1和slave2
[root@hgwtencent bin]# cd /soft/RocketMQ/rocketmq-all-4.9.0-bin-release/bin/
[root@hgwtencent bin]# nohup sh mqbroker -c /soft/RocketMQ/rocketmq-all-4.9.0-bin-release/conf/2m-2s-sync/broker-a.properties >../../store/log/broker1.log 2>&1 &
[root@hgwtencent bin]# nohup sh mqbroker -c /soft/RocketMQ/rocketmq-all-4.9.0-bin-release/conf/2m-2s-sync/broker-b-s.properties >../../store/log/broker2.log 2>&1 &
2、在47.96.232.192 上啟動(dòng)master2和slave1
[root@hgwalibabacloud 2m-2s-sync]# cd /soft/RocketMQ/rocketmq-all-4.9.0-bin-release/bin/
[root@hgwalibabacloud bin]# nohup sh mqbroker -c /soft/RocketMQ/rocketmq-all-4.9.0-bin-release/conf/2m-2s-sync/broker-b.properties >../../store/log/broker1.log 2>&1 &
[root@hgwalibabacloud bin]# nohup sh mqbroker -c /soft/RocketMQ/rocketmq-all-4.9.0-bin-release/conf/2m-2s-sync/broker-a-s.properties >../../store/log/broker2.log 2>&1 &
第三步、驗(yàn)收啟動(dòng)后通過JPS查看啟動(dòng)進(jìn)程
查看日志
# 查看nameServer日志
tail -500f ~/logs/rocketmqlogs/namesrv.log
# 查看broker日志
tail -500f ~/logs/rocketmqlogs/broker.log
關(guān)閉命令
mqshutdown broker
mqshutdown namesrv
這里需要將兩臺(tái)服務(wù)器的11009
端口開放,rocketmq-Dashboard管理頁(yè)面默認(rèn)端口為8080,小偉這因?yàn)?080被占用故調(diào)整為7777
。
rocketmq-console已經(jīng)不在原先的倉(cāng)庫(kù)了,已經(jīng)被遷移到RocketMQ Dashboard。進(jìn)入到這個(gè)dashboard倉(cāng)庫(kù):https://github.com/apache/rocketmq-dashboard。下載zip包并解壓。
修改rocketmq.config.namesrvAddr=
后面為你的NameServer集群地址
進(jìn)入/rocketmq-dashboard-master
目錄
cd /Users/gwh/Documents/Software/tools/rocketmq/rocketmq-dashboard-master
執(zhí)行編輯打包命令:mvn clean package -Dmaven.test.skip=true
mvn clean package -Dmaven.test.skip=true
等待命令執(zhí)行完成之后在/rocketmq-dashboard-master/target
目錄下就可以看到打好的jar包啦!上傳到服務(wù)器run起來(lái)~
nohup java -jar rocketmq-dashboard-1.0.1-SNAPSHOT.jar &>store/log.log &
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧