rocketmq集群sync模式

四臺服務器

nameIP服務?配置

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

運行初始化腳本

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

RocketMQ部署類型

單個Master

? ??單機模式, 即只有一個Broker, 如果Broker宕機了, 會導致RocketMQ服務不可用, 不推薦使用.

多Master模式

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

多Master多Slave模式,異步復制

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

多Master多Slave模式,同步雙寫

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

由于項目對于安全性要求較高,所以選擇多Master多Slave模式,同步雙寫模式

首先編譯源碼包

rocketmq-a節(jié)點

```

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é)點

```

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#默認沒有這個文件,新建一個

listenPort=5432

#配置broker

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

vimbroker-a.properties

#集群名字,識別標識,必須統(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是單臺,如果nameserver是多臺集群的話,就用分號分割(即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#默認9876,修改只為驗證配置文件

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

defaultTopicQueueNums=4

#是否允許 Broker 自動創(chuàng)建Topic,建議線下開啟,線上關閉

autoCreateTopicEnable=true

#是否允許 Broker 自動創(chuàng)建訂閱組,建議線下開啟,線上關閉

autoCreateSubscriptionGroup=true

#Broker 對外服務的監(jiān)聽端口

listenPort=10911

#刪除文件時間點,默認凌晨 4點

deleteWhen=04

#文件保留時間,默認 48 小時

fileReservedTime=120

#commitLog每個文件的大小默認1G

mapedFileSizeCommitLog=1073741824

#ConsumeQueue每個文件默認存30W條,根據(jù)業(yè)務情況調(diào)整

mapedFileSizeConsumeQueue=300000

#destroyMapedFileIntervalForcibly=120000

#redeleteHangedFileInterval=120000

#檢測物理文件磁盤空間

diskMaxUsedSpaceRatio=80

#存儲路徑

storePathRootDir=/data/rocketmq/store

#commitLog 存儲路徑

storePathCommitLog=/data/rocketmq/store/commitlog

#消費隊列存儲路徑存儲路徑

storePathConsumeQueue=/data/rocketmq/store/consumequeue

#消息索引存儲路徑

storePathIndex=/data/rocketmq/store/index

#checkpoint 文件存儲路徑

storeCheckpoint=/data/rocketmq/store/checkpoint

#abort 文件存儲路徑

abortFile=/data/rocketmq/store/abort

#限制的消息大小

maxMessageSize=65536

#Broker 的角色

#- ASYNC_MASTER 異步復制Master

#- SYNC_MASTER 同步雙寫Master

#- SLAVE

brokerRole=SYNC_MASTER

#刷盤方式

#- ASYNC_FLUSH 異步刷盤

#- SYNC_FLUSH 同步刷盤

flushDiskType=ASYNC_FLUSH

#checkTransactionMessageEnable=false

#發(fā)消息線程池數(shù)量

#sendMessageThreadPoolNums=128

#拉消息線程池數(shù)量

#pullMessageThreadPoolNums=128

?

?

?

#編寫service文件

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

[Unit]

After=network-online.target

?

[Service]

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

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/

?

#修改日志目錄,默認在用戶家目錄下

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

```

?

rocketqm-a-s節(jié)點

```

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#默認沒有這個文件,新建一個

listenPort=5432

#配置broker

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

vimbroker-a-s.properties#僅三個地方不一樣

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

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é)點

```

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#默認沒有這個文件,新建一個

listenPort=5432

#配置broker

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

vimbroker-b.properties#僅三個地方不一樣

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

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é)點

```

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#默認沒有這個文件,新建一個

listenPort=5432

#配置broker

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

vimbroker-b-s.properties#僅三個地方不一樣

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

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

```

四臺服務器首先啟動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/

```


其他幾臺服務器啟動namesrv.service

```

systemctl enable? namesrv.service

systemctlstartnamesrv.service

```

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

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

```

vim/data/rocketmq/bin/runbroker.sh

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

```

所有節(jié)點啟動rocketmq.service

``

systemctlenablerocketmq&&systemctlstartrocketmq

```

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

rocketmq-a節(jié)點

高可用設想,在所有節(jié)點上部署rocketmq-console,使用F5進行調(diào)度實現(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服務器未啟動端口10909,則報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

```

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容