rocketmq集群sync模式

四臺(tái)服務(wù)器

nameIP服務(wù)?配置

rocketmq-a

192.168.33.11broker-a,namesrv,consolecpu:2,內(nèi)存:2G

rocketmq-a-s

192.168.33.12broker-a-s,namesrv,console

cpu:2,內(nèi)存:2G

rocketmq-b

192.168.33.13

broker-b,namesrv,console

cpu:2,內(nèi)存:2G

rocketmq-b-s

192.168.33.14

broker-b-s,namesrv,console

cpu:2,內(nèi)存:2G

運(yùn)行初始化腳本

搭建java-1.8環(huán)境,略

RocketMQ部署類型

單個(gè)Master

? ??單機(jī)模式, 即只有一個(gè)Broker, 如果Broker宕機(jī)了, 會(huì)導(dǎo)致RocketMQ服務(wù)不可用, 不推薦使用.

多Master模式

? ??組成一個(gè)集群, 集群每個(gè)節(jié)點(diǎn)都是Master節(jié)點(diǎn), 配置簡(jiǎn)單, 性能也是最高, 某節(jié)點(diǎn)宕機(jī)重啟不會(huì)影響RocketMQ服務(wù), 缺點(diǎn)就是如果某個(gè)節(jié)點(diǎn)宕機(jī)了, 會(huì)導(dǎo)致該節(jié)點(diǎn)未被消費(fèi)的消息在在節(jié)點(diǎn)恢復(fù)前不可訂閱.

多Master多Slave模式,異步復(fù)制

? ??每個(gè)Master配置一個(gè)Slave, 多對(duì)Master-Slave, Master與Slave消息采用異步復(fù)制方式, 主從消息一致會(huì)有毫秒級(jí)的延遲. 優(yōu)點(diǎn)是彌補(bǔ)了多Master模式下節(jié)點(diǎn)宕機(jī)后在恢復(fù)前不可訂閱的問題, 在Master宕機(jī)后, 消費(fèi)者還可以從Slave節(jié)點(diǎn)進(jìn)行消費(fèi), 缺點(diǎn)就是如果Master宕機(jī), 磁盤損壞的情況下, 如果沒有即使將消息復(fù)制到Slave, 會(huì)導(dǎo)致有少量消息丟失.

多Master多Slave模式,同步雙寫

? ??每個(gè)Master配置一個(gè)Slave,有多對(duì)Master-Slave,HA采用同步雙寫方式,主備都寫成功,向應(yīng)用返回成功。數(shù)據(jù)與服務(wù)都無單點(diǎn),Master宕機(jī)情況下,消息無延遲,服務(wù)可用性與數(shù)據(jù)可用性都非常高。缺點(diǎn)就是性能比異步復(fù)制模式略低,大約低10%左右,發(fā)送單個(gè)消息的RT會(huì)略高。

由于項(xiàng)目對(duì)于安全性要求較高,所以選擇多Master多Slave模式,同步雙寫模式

首先編譯源碼包

rocketmq-a節(jié)點(diǎn)

```

mkdir/data/

cd/data

#maven環(huán)境

wgethttp://mirrors.hust.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

tarxvfapache-maven-3.6.3-bin.tar.gz-C/data

cat>>/etc/profile<<EOF

exportMAVEN_HOME=/data/maven

exportPATH=\$PATH:\$MAVEN_HOME/bin

EOF

source/etc/profile

mvn--version

?

#rocketmqlogs路徑在這里寫死了,需要改源碼:user.home改為/data,根據(jù)自己需要? ? ? ? ? 未能解決

#vim /data/rocketmq-release-4.5.2/client/src/main/java/org/apache/rocketmq/client/log/ClientLogger.java

#String clientLogRoot = System.getProperty(CLIENT_LOG_ROOT, System.getProperty("/data") + "/logs/rocketmqlogs")

?

#編譯

wgethttps://codeload.github.com/apache/rocketmq/zip/release-4.5.2

unziprocketmq-release-4.5.2.zip

cdrocketmq-release-4.5.2

mvn-Prelease-all-DskipTestscleaninstall-U

#編譯完成后文件路徑:./distribution/target/rocketmq-4.5.2.tar.gz

#分發(fā)文件

scp./distribution/target/rocketmq-4.5.2.tar.gz192.168.33.12:/data

scp./distribution/target/rocketmq-4.5.2.tar.gz192.168.33.13:/data

scp./distribution/target/rocketmq-4.5.2.tar.gz192.168.33.14:/data

mv./distribution/target/rocketmq-4.5.2.tar.gz/data

```

配置broker,namesrv

rocketmq-a節(jié)點(diǎn)

```

useradd-s/sbin/nologinrocketmq

?

tarxvfrocketmq-4.5.2.tar.gz

ln-srocketmq-4.5.2rocketmq

mkdir-pv/data/rocketmq/store/{commitlog,consumequeue,index}

#配置namesrv

cd/data/rocketmq/conf

vimnamesrv.properties#默認(rèn)沒有這個(gè)文件,新建一個(gè)

listenPort=5432

#配置broker

cd/data/rocketmq/conf/2m-2s-sync

vimbroker-a.properties

#集群名字,識(shí)別標(biāo)識(shí),必須統(tǒng)一

brokerClusterName=Ty-rocketmq-cluster

#broker名字,注意此處不同的配置文件填寫的不一樣? 例如:在a.properties 文件中寫 broker-a? 在b.properties 文件中寫 broker-b

brokerName=broker-a

#0 表示 Master,>0 表示 Slave

brokerId=0

#nameServer地址,這里nameserver是單臺(tái),如果nameserver是多臺(tái)集群的話,就用分號(hào)分割(即namesrvAddr=ip1:port1;ip2:port2;ip3:port3)

namesrvAddr=192.168.33.11:5432;192.168.33.12:5432;192.168.33.13:5432;192.168.33.14:5432#默認(rèn)9876,修改只為驗(yàn)證配置文件

#在發(fā)送消息時(shí),自動(dòng)創(chuàng)建服務(wù)器不存在的topic,默認(rèn)創(chuàng)建的隊(duì)列數(shù)。由于是4個(gè)broker節(jié)點(diǎn),所以設(shè)置為4

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=80

#存儲(chǔ)路徑

storePathRootDir=/data/rocketmq/store

#commitLog 存儲(chǔ)路徑

storePathCommitLog=/data/rocketmq/store/commitlog

#消費(fèi)隊(duì)列存儲(chǔ)路徑存儲(chǔ)路徑

storePathConsumeQueue=/data/rocketmq/store/consumequeue

#消息索引存儲(chǔ)路徑

storePathIndex=/data/rocketmq/store/index

#checkpoint 文件存儲(chǔ)路徑

storeCheckpoint=/data/rocketmq/store/checkpoint

#abort 文件存儲(chǔ)路徑

abortFile=/data/rocketmq/store/abort

#限制的消息大小

maxMessageSize=65536

#Broker 的角色

#- ASYNC_MASTER 異步復(fù)制Master

#- SYNC_MASTER 同步雙寫Master

#- SLAVE

brokerRole=SYNC_MASTER

#刷盤方式

#- ASYNC_FLUSH 異步刷盤

#- SYNC_FLUSH 同步刷盤

flushDiskType=ASYNC_FLUSH

#checkTransactionMessageEnable=false

#發(fā)消息線程池?cái)?shù)量

#sendMessageThreadPoolNums=128

#拉消息線程池?cái)?shù)量

#pullMessageThreadPoolNums=128

?

?

?

#編寫service文件

vim/usr/lib/systemd/system/rocketmq.service

[Unit]

After=network-online.target

?

[Service]

#配置文件的名字,根據(jù)每個(gè)服務(wù)器的角色更改

ExecStart=/data/rocketmq/bin/mqbroker-c/data/rocketmq/conf/2m-2s-sync/broker-a.properties

StandardOutput=journal

StandardError=inherit

LimitNOFILE=65536

TimeoutStopSec=0

KillSignal=SIGTERM

SendSIGKILL=no

SuccessExitStatus=0

Restart=always

User=rocketmq

Group=rocketmq

WorkingDirectory=/data/rocketmq/

?

[Install]

WantedBy=multi-user.target

?

scp/usr/lib/systemd/system/rocketmq.service192.168.33.12:/usr/lib/systemd/system/

scp/usr/lib/systemd/system/rocketmq.service192.168.33.13:/usr/lib/systemd/system/

scp/usr/lib/systemd/system/rocketmq.service192.168.33.14:/usr/lib/systemd/system/

?

#修改日志目錄,默認(rèn)在用戶家目錄下

sed-i's#${user.home}#/data#g'/data/rocketmq/conf/*.xml

```

?

rocketqm-a-s節(jié)點(diǎn)

```

cd/data

useradd-s/sbin/nologinrocketmq

tarxvfrocketmq-4.5.2.tar.gz

ln-srocketmq-4.5.2rocketmq

mkdir-pv/data/rocketmq/store/{commitlog,consumequeue,index}

#配置namesrv,不配置沒所謂

cd/data/rocketmq/conf

vimnamesrv.properties#默認(rèn)沒有這個(gè)文件,新建一個(gè)

listenPort=5432

#配置broker

cd/data/rocketmq/conf/2m-2s-sync

vimbroker-a-s.properties#僅三個(gè)地方不一樣

brokerName=broker-a#名稱需要和主節(jié)點(diǎn)保持一致?

brokerId=1#ID=0為master,大于0為slave

brokerRole=SLAVE#配置為從

?

vim/usr/lib/systemd/system/rocketmq.service

ExecStart=/data/rocketmq/bin/mqbroker-c/data/rocketmq/conf/2m-2s-sync/broker-a-s.properties#修改配置文件為a-s


sed-i's#${user.home}#/data#g'/data/rocketmq/conf/*.xml

```

rocketqm-b節(jié)點(diǎn)

```

cd/data

tarxvfrocketmq-4.5.2.tar.gz

ln-srocketmq-4.5.2rocketmq

mkdir-pv/data/rocketmq/store/{commitlog,consumequeue,index}

#配置namesrv

cd/data/rocketmq/conf

vimnamesrv.properties#默認(rèn)沒有這個(gè)文件,新建一個(gè)

listenPort=5432

#配置broker

cd/data/rocketmq/conf/2m-2s-sync

vimbroker-b.properties#僅三個(gè)地方不一樣

brokerName=broker-b#名稱需要和主節(jié)點(diǎn)保持一致?

brokerId=0#ID=0為master,大于0為slave

brokerRole=SYNC_MASTER#配置為主

?

vim/usr/lib/systemd/system/rocketmq.service

ExecStart=/data/rocketmq/bin/mqbroker-c/data/rocketmq/conf/2m-2s-sync/broker-b.properties#修改配置文件為a-s

?

sed-i's#${user.home}#/data#g'/data/rocketmq/conf/*.xml? #日志路徑

```

rocketqm-b-s節(jié)點(diǎn)

```

cd/data

tarxvfrocketmq-4.5.2.tar.gz

ln-srocketmq-4.5.2rocketmq

mkdir-pv/data/rocketmq/store/{commitlog,consumequeue,index}

#配置namesrv

cd/data/rocketmq/conf

vimnamesrv.properties#默認(rèn)沒有這個(gè)文件,新建一個(gè)

listenPort=5432

#配置broker

cd/data/rocketmq/conf/2m-2s-sync

vimbroker-b-s.properties#僅三個(gè)地方不一樣

brokerName=broker-b#名稱需要和主節(jié)點(diǎn)保持一致?

brokerId=1#ID=0為master,大于0為slave

brokerRole=SLAVE#配置為從

?

vim/usr/lib/systemd/system/rocketmq.service

ExecStart=/bin/sh-c'/data/rocketmq/bin/mqbroker -c /data/rocketmq/conf/2m-2s-sync/broker-b-s.properties'#修改配置文件為a-s

?

sed-i's#${user.home}#/data/rocketmq#g'/data/rocketmq/conf/*.xml

```

四臺(tái)服務(wù)器首先啟動(dòng)namesrv

rocketmq-a

```

vim/usr/lib/systemd/system/namesrv.service

[Unit]

After=network-online.target

?

[Service]

ExecStart=/data/rocketmq/bin/mqnamesrv

StandardOutput=journal

StandardError=inherit

LimitNOFILE=65536

TimeoutStopSec=0

KillSignal=SIGTERM

SendSIGKILL=no

SuccessExitStatus=0

Restart=always

User=rocketmq

Group=rocketmq

WorkingDirectory=/data/rocketmq/

?

[Install]

WantedBy=multi-user.target

?

systemctlenablenamesrv.service&&systemctlstartnamesrv.service

?

scp/usr/lib/systemd/system/namesrv.service192.168.33.12:/usr/lib/systemd/system/

scp/usr/lib/systemd/system/namesrv.service192.168.33.13:/usr/lib/systemd/system/

scp/usr/lib/systemd/system/namesrv.service192.168.33.14:/usr/lib/systemd/system/

```


其他幾臺(tái)服務(wù)器啟動(dòng)namesrv.service

```

systemctl enable? namesrv.service

systemctlstartnamesrv.service

```

所有節(jié)點(diǎn),修改broker內(nèi)存使用

根據(jù)環(huán)境決定,這是本機(jī)測(cè)試內(nèi)存較小使用的數(shù)值

```

vim/data/rocketmq/bin/runbroker.sh

JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m"

```

所有節(jié)點(diǎn)啟動(dòng)rocketmq.service

``

systemctlenablerocketmq&&systemctlstartrocketmq

```

rocketMq監(jiān)控平臺(tái)rocketmq-console高可用部署

rocketmq-a節(jié)點(diǎn)

高可用設(shè)想,在所有節(jié)點(diǎn)上部署rocketmq-console,使用F5進(jìn)行調(diào)度實(shí)現(xiàn)高可用

```

cd/data

wgethttps://github.com/apache/rocketmq-externals/archive/rocketmq-console-1.0.0.tar.gz

tarxvfrocketmq-console-1.0.0.tar.gz

vim/data/rocketmq-externals-rocketmq-console-1.0.0/rocketmq-console/src/main/resources/application.properties

server.contextPath=

server.port=8080#監(jiān)聽端口

#spring.application.index=true

spring.application.name=rocketmq-console

spring.http.encoding.charset=UTF-8

spring.http.encoding.enabled=true

spring.http.encoding.force=true

logging.config=classpath:logback.xml

#if this value is empty,use env value rocketmq.config.namesrvAddr? NAMESRV_ADDR | now, you can set it in ops page.default localhost:9876

rocketmq.config.namesrvAddr=192.168.33.11:5432;192.168.33.12:5432;192.168.33.13:5432;192.168.33.14:5432#namesrv的地址ip:port;

#if you use rocketmq version < 3.5.8, rocketmq.config.isVIPChannel should be false.default true

rocketmq.config.isVIPChannel=#Rocket如果開啟了VIP通道,VIP通道端口為10911-2=10909。若Rocket服務(wù)器未啟動(dòng)端口10909,則報(bào)connect to <:10909> failed。

#rocketmq-console's data path:dashboard/monitor

rocketmq.config.dataPath=/tmp/rocketmq-console/data

#set it false if you don't want use dashboard.default true

rocketmq.config.enableDashBoardCollect=true

?

#修改日志路徑

vim/data/rocketmq-externals-rocketmq-console-1.0.0/rocketmq-console/src/main/resources/logback.xml

<file>/data/logs/consolelogs/rocketmq-console.log</file>

<fileNamePattern>/data/logs/consolelogs/rocketmq-console-%d{yyyy-MM-dd}.%i.log

</fileNamePattern>

?

cd/data/rocketmq-externals-rocketmq-console-1.0.0/rocketmq-console

mvncleanpackage-Dmaven.test.skip=true

#編譯好的包:/data/rocketmq-externals-rocketmq-console-1.0.0/rocketmq-console/target/rocketmq-console-ng-1.0.0.jar

?

?

?

vim/usr/lib/systemd/system/rocketmq-console.service

[Unit]

After=network-online.target

?

[Service]

ExecStart=java-jar/data/rocketmq-externals-rocketmq-console-1.0.0/rocketmq-console/target/rocketmq-console-ng-1.0.0.jar

StandardOutput=journal

StandardError=inherit

LimitNOFILE=65536

TimeoutStopSec=0

KillSignal=SIGTERM

SendSIGKILL=no

SuccessExitStatus=0

Restart=always

User=rocketmq

Group=rocketmq

WorkingDirectory=/data//rocketmq-console/

?

[Install]

WantedBy=multi-user.target

?

systemctlenablerocketmq-console.service

systemctlstartrocketmq-console.service

```

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,923評(píng)論 6 535
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,740評(píng)論 3 420
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,856評(píng)論 0 380
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,175評(píng)論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,931評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,321評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,383評(píng)論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,533評(píng)論 0 289
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,082評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,891評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,067評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,618評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,319評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,732評(píng)論 0 27
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,987評(píng)論 1 289
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,794評(píng)論 3 394
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,076評(píng)論 2 375