RocketMQ主從搭建


RocketMQ主從搭建

部署環境

作為測試環境,我們使用兩台虛擬機來部署雙主雙從環境,具體結構如下:

集群
整個集群由兩個 name server 實例和四個 broker 實例組成

name server:

  • 兩台服務器分別啟動兩個name server

broker A 主從:

  • 服務器1部署 broker A 主服務
  • 服務器2部署 broker A 從服務

broker B 主從:

  • 服務器2部署 broker B 主服務
  • 服務器1部署 broker B 從服務

安裝 Rocketmq

首先參照《RocketMQ (一) 安裝》筆記,在兩台虛擬機上安裝 Rocketmq。或在一台虛擬機上裝好后進行克隆。

建文件夾

在一台服務器上啟動兩個 broker 實例,需要為不同實例設置單獨的數據存儲目錄。

為了方便起見,我們在兩台服務器上都創建這四個實例所需要的的目錄。

mkdir /usr/local/rocketmq/store/
mkdir /usr/local/rocketmq/store/broker-a
mkdir /usr/local/rocketmq/store/broker-a/commitlog
mkdir /usr/local/rocketmq/store/broker-b
mkdir /usr/local/rocketmq/store/broker-b/commitlog
mkdir /usr/local/rocketmq/store/broker-as
mkdir /usr/local/rocketmq/store/broker-as/commitlog
mkdir /usr/local/rocketmq/store/broker-bs
mkdir /usr/local/rocketmq/store/broker-bs/commitlog

配置

rocketmq/conf 目錄下提供了四種集群方案的配置樣例

  • 2m-2s-async:雙主雙從異步復制
  • 2m-2s-sync:雙主雙從同步復制
  • 2m-noslave:雙主
  • dledger: raft主從切換

這里我們選擇雙主雙從同步復制方案。

1. broker-a,a主服務器配置

a

服務器1修改樣例配置文件:rocketmq/conf/2m-2s-sync/broker-a.properties

在樣例配置文件中,添加三項配置:

  • listenPort:我們在一台服務器上要運行兩個broker實例,所以兩個實例的端口要有所區分。這里broker-a主服務器的端口使用默認的10911。
  • storePathRootDir:數據存儲目錄
  • storePathCommitLog:提交日志存儲目錄
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=SYNC_MASTER
flushDiskType=ASYNC_FLUSH

listenPort=10911
storePathRootDir=/usr/local/rocketmq/store/broker-a
storePathCommitLog=/usr/local/rocketmq/store/broker-a/commitlog

2. broker-a slave,a從服務器配置

as

服務器2修改樣例配置文件:rocketmq/conf/2m-2s-sync/broker-a-s.properties

在樣例配置文件中,添加三項配置:

  • listenPort:我們在一台服務器上要運行兩個broker實例,所以兩個實例的端口要有所區分。這里broker-a slave從服務器的端口使用11911。
  • storePathRootDir:數據存儲目錄
  • storePathCommitLog:提交日志存儲目錄
brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH

listenPort=11911
storePathRootDir=/usr/local/rocketmq/store/broker-as
storePathCommitLog=/usr/local/rocketmq/store/broker-as/commitlog

3. broker-b,b主服務器配置

b

服務器2修改樣例配置文件:rocketmq/conf/2m-2s-sync/broker-b.properties

在樣例配置文件中,添加三項配置:

  • listenPort:我們在一台服務器上要運行兩個broker實例,所以兩個實例的端口要有所區分。這里broker-b主服務器的端口使用默認的10911。
  • storePathRootDir:數據存儲目錄
  • storePathCommitLog:提交日志存儲目錄
brokerClusterName=DefaultCluster
brokerName=broker-b
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=SYNC_MASTER
flushDiskType=ASYNC_FLUSH

listenPort=10911
storePathRootDir=/usr/local/rocketmq/store/broker-b
storePathCommitLog=/usr/local/rocketmq/store/broker-b/commitlog

4. broker-b slave,b從服務器配置

bs

服務器1修改樣例配置文件:rocketmq/conf/2m-2s-sync/broker-b-s.properties

在樣例配置文件中,添加三項配置:

  • listenPort:我們在一台服務器上要運行兩個broker實例,所以兩個實例的端口要有所區分。這里broker-b slave從服務器的端口使用11911。
  • storePathRootDir:數據存儲目錄
  • storePathCommitLog:提交日志存儲目錄
brokerClusterName=DefaultCluster
brokerName=broker-b
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH

listenPort=11911
storePathRootDir=/usr/local/rocketmq/store/broker-bs
storePathCommitLog=/usr/local/rocketmq/store/broker-bs/commitlog

配置要點說明

  1. 四台服務器的集群名 brokerClusterName 相同。集群名稱相同的服務器共同組成服務集群 。
  2. 從服務器通過名字與主服務器關聯在一起,brokerName 與主服務器相同。
  3. brokerId為0是主服務器。從服務器的值是非零值,例如如果有四個從服務器,他們的 brokerId 應該是 1,2,3,4。
  4. brokerRole的值為 SYNC_MASTER 是同步復制的主服務器。如果是 ASYNC_MASTER 則為異步復制的主服務器。
  • 同步復制:消息復制到從服務器后才向生產者發回反饋信息。
  • 異步復制:消息發到主服務器就向生產者發回反饋信息,之后再向從服務器復制。

啟動

1. 啟動兩個 name server

namesrv

在兩台服務器上啟動兩個 name server,它們不用做任何集群的配置,都是作為獨立服務運行,它們之間也不會進行數據復制。

所有broker服務啟動后,要同時連接這兩個 name server,向兩個 name server 進行注冊。

在兩台服務器上都啟動 name server

nohup sh mqnamesrv &

2. 啟動 broker a 的主從兩台服務器

a

在服務器1上啟動 broker a 主服務器

參數說明:

  • -n參數:指定name server地址列表,多個地址用分號分隔
  • -c參數:指定配置文件,使用指定的配置文件啟動 broker
nohup sh mqbroker \
-n '192.168.64.151:9876;192.168.64.152:9876' \
-c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-a.properties \
&

在服務器2上啟動 broker a 從服務器

nohup sh mqbroker \
-n '192.168.64.151:9876;192.168.64.152:9876' \
-c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-a-s.properties \
&

3. 啟動 broker b 的主從兩台服務器

b

在服務器2上啟動 broker b 主服務器

nohup sh mqbroker \
-n '192.168.64.151:9876;192.168.64.152:9876' \
-c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-b.properties \
&

在服務器1上啟動 broker b 從服務器

nohup sh mqbroker \
-n '192.168.64.151:9876;192.168.64.152:9876' \
-c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-b-s.properties \
&

檢查啟動的服務

在兩台服務器上分別查看java進程,確認兩台服務器上是否各啟動了三個java進程,分別運行name server和兩個broker。

## 查看 java 進程
jps 

---------------------
12081 NamesrvStartup
15745 BrokerStartup
15595 BrokerStartup
16655 Jps

啟動管理界面

## 進入 rocketmq-console 項目打包文件目錄
cd /usr/local/rocketmq/RocketMQ-Externals/rocketmq-console/target/

## 啟動管理界面
nohup java -jar rocketmq-console-ng-1.0.1.jar \
--server.port=8080 \
--rocketmq.config.namesrvAddr='192.168.64.151:9876;192.168.64.152:9876' \
&

查看集群狀態

在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM