1. 程式人生 > >rocketMQ4.2.0版本編譯及雙主雙從同步雙寫模式搭建

rocketMQ4.2.0版本編譯及雙主雙從同步雙寫模式搭建

一、基礎環境

       系統:centos 7.4

       硬體配置:4臺  2Cpu7G記憶體

二、基礎工具安裝

   lrzsz和net-tools可以不用裝的,只是個人習慣傳檔案和ifconfig命令

    yum install java-1.8.0-openjdk.x86_64
    yum install lrzsz
    yum install net-tools
    yum install wget
    yum install vim
CentOS 6.5關閉防火牆
servcie iptables stop 
CentOS 7關閉防火牆:
systemctl stop firewalld.service

    ps:防火牆生產環境開發埠,不能直接拉掉

三、下載編譯mq

     本次我們編譯最新的4.2.0版本,官方要求如下

       1、64位作業系統

       2、64位jdk 1.8+

       3、maven 3.2.x以上版本

       4、Git (我們通過wget拉取,可以不用安裝)

    1、下載 

       a) 新建資料夾mq,下載,解壓

mkdir mq
cd mq
wget http://mirrors.hust.edu.cn/apache/rocketmq/4.2.0/rocketmq-all-4.2.0-source-release.zip
unzip rocketmq-all-4.2.0-source-release.zip



    b)確定編譯環境是否ok

cd rocketmq-all-4.2.0/

確認編譯機器maven是否安裝(即是否存在mvn命令),如未安裝,執行如下命令安裝maven

wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo
yum -y install apache-maven


 預設安裝3.5.2版本

    c)執行編譯打包

  mvn -Prelease-all -DskipTests clean package -U


[INFO] Building tar: /usr/mq/rocketmq-all-4.2.0/distribution/target/apache-rocketmq.tar.gz

由此資訊可得知輸出路徑為:/usr/mq/rocketmq-all-4.2.0/distribution/target/

4)拷貝apache-rocketmq.tar.gz到/usr/local,並通過scp到其他三臺機器的/usr/local

cp apache-rocketmq.tar.gz /usr/local/
cd /usr/local
scp apache-rocketmq.tar.gz [email protected]:/home/wy/

上面的scp,本人上傳至使用者資料夾下後,在三臺機器分別執行(大家也可以使用root使用者,直接傳/usr/local目錄)

 cp /home/wy/apache-rocketmq.tar.gz /usr/local/


四、配置mq

1、解壓mq(每臺機器都執行)

mkdir /usr/local/rocketmq-4.2.0
cd /usr/local
tar -zxvf apache-rocketmq.tar.gz -C /usr/local/rocketmq-4.2.0
ln -s rocketmq-4.2.0/ rocketmq
解壓並建立軟連線(可以理解為windows的快捷方式)


2、建立儲存路徑(每臺機器都執行)

mkdir /usr/local/rocketmq/store
mkdir /usr/local/rocketmq/store/commitlog
mkdir /usr/local/rocketmq/store/consumequeue
mkdir /usr/local/rocketmq/store/index

3、配置4個主機的主從關係

序號IP角色修改配置檔案nameserver名broker名
140.125.171.200masterbroker-a.propertiesrocketmq-nameserver1rocketmq-maste1
240.125.201.109masterbroker-b.propertiesrocketmq-nameserver2rocketmq-maste2
340.125.160.62slavebroker-a-s.propertiesrocketmq-nameserver3rocketmq-master1-slave1
4139.219.110.31slavebroker-b-s.propertiesrocketmq-nameserver4rocketmq-master2-slave1

    a)在rocketmq-maste1 即 40.125.171.200 執行

vim /usr/local/rocketmq/conf/2m-2s-sync/broker-a.properties
內容為:
#所屬叢集名字
brokerClusterName=rocketmq-wy
#broker名字,注意此處不同的配置檔案填寫的不一樣
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分號分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;rocketmq-nameserver3:9876;rocketmq-nameserver4:9876
#在傳送訊息時,自動建立伺服器不存在的topic,預設建立的佇列數
defaultTopicQueueNums=4
#是否允許 Broker 自動建立Topic,建議線下開啟,線上關閉
autoCreateTopicEnable=true
#是否允許 Broker 自動建立訂閱組,建議線下開啟,線上關閉
autoCreateSubscriptionGroup=true
#Broker 對外服務的監聽埠
listenPort=10911
#刪除檔案時間點,預設凌晨 4點
deleteWhen=01
#檔案保留時間,預設 48 小時
fileReservedTime=72
#commitLog每個檔案的大小預設1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個檔案預設存30W條,根據業務情況調整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理檔案磁碟空間
diskMaxUsedSpaceRatio=88
#儲存路徑
storePathRootDir=/usr/local/rocketmq/store
#commitLog 儲存路徑
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消費佇列儲存路徑儲存路徑
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#訊息索引儲存路徑
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 檔案儲存路徑
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 檔案儲存路徑
abortFile=/usr/local/rocketmq/store/abort
#限制的訊息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 非同步複製Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盤方式
#- ASYNC_FLUSH 非同步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#發訊息執行緒池數量
#sendMessageThreadPoolNums=128
#拉訊息執行緒池數量
#pullMessaeThreadPoolNums=128

    b)在rocketmq-maste2 即 40.125.201.109 執行

vim /usr/local/rocketmq/conf/2m-2s-sync/broker-b.properties

內容為:

#所屬叢集名字
brokerClusterName=rocketmq-wy
#broker名字,注意此處不同的配置檔案填寫的不一樣
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分號分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;rocketmq-nameserver3:9876;rocketmq-nameserver4:9876
#在傳送訊息時,自動建立伺服器不存在的topic,預設建立的佇列數
defaultTopicQueueNums=4
#是否允許 Broker 自動建立Topic,建議線下開啟,線上關閉
autoCreateTopicEnable=true
#是否允許 Broker 自動建立訂閱組,建議線下開啟,線上關閉
autoCreateSubscriptionGroup=true
#Broker 對外服務的監聽埠
listenPort=10911
#刪除檔案時間點,預設凌晨 4點
deleteWhen=01
#檔案保留時間,預設 48 小時
fileReservedTime=72
#commitLog每個檔案的大小預設1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個檔案預設存30W條,根據業務情況調整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理檔案磁碟空間
diskMaxUsedSpaceRatio=88
#儲存路徑
storePathRootDir=/usr/local/rocketmq/store
#commitLog 儲存路徑
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消費佇列儲存路徑儲存路徑
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#訊息索引儲存路徑
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 檔案儲存路徑
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 檔案儲存路徑
abortFile=/usr/local/rocketmq/store/abort
#限制的訊息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 非同步複製Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盤方式
#- ASYNC_FLUSH 非同步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#發訊息執行緒池數量
#sendMessageThreadPoolNums=128
#拉訊息執行緒池數量
#pullMessaeThreadPoolNums=128

    c)在rocketmq-master1-slave1 即 40.125.160.62 執行

vim /usr/local/rocketmq/conf/2m-2s-sync/broker-a-s.properties

內容為:

#所屬叢集名字
brokerClusterName=rocketmq-wy
#broker名字,注意此處不同的配置檔案填寫的不一樣
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分號分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;rocketmq-nameserver3:9876;rocketmq-nameserver4:9876
#在傳送訊息時,自動建立伺服器不存在的topic,預設建立的佇列數
defaultTopicQueueNums=4
#是否允許 Broker 自動建立Topic,建議線下開啟,線上關閉
autoCreateTopicEnable=true
#是否允許 Broker 自動建立訂閱組,建議線下開啟,線上關閉
autoCreateSubscriptionGroup=true
#Broker 對外服務的監聽埠
listenPort=10911
#刪除檔案時間點,預設凌晨 4點
deleteWhen=01
#檔案保留時間,預設 48 小時
fileReservedTime=72
#commitLog每個檔案的大小預設1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個檔案預設存30W條,根據業務情況調整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理檔案磁碟空間
diskMaxUsedSpaceRatio=88
#儲存路徑
storePathRootDir=/usr/local/rocketmq/store
#commitLog 儲存路徑
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消費佇列儲存路徑儲存路徑
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#訊息索引儲存路徑
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 檔案儲存路徑
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 檔案儲存路徑
abortFile=/usr/local/rocketmq/store/abort
#限制的訊息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 非同步複製Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=SLAVE
#刷盤方式
#- ASYNC_FLUSH 非同步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#發訊息執行緒池數量
#sendMessageThreadPoolNums=128
#拉訊息執行緒池數量
#pullMessaeThreadPoolNums=128

 d)在rocketmq-master2-slave1 即 139.219.110.31 執行

vim /usr/local/rocketmq/conf/2m-2s-sync/broker-b-s.properties

內容為:

#所屬叢集名字
brokerClusterName=rocketmq-wy
#broker名字,注意此處不同的配置檔案填寫的不一樣
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分號分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;rocketmq-nameserver3:9876;rocketmq-nameserver4:9876
#在傳送訊息時,自動建立伺服器不存在的topic,預設建立的佇列數
defaultTopicQueueNums=4
#是否允許 Broker 自動建立Topic,建議線下開啟,線上關閉
autoCreateTopicEnable=true
#是否允許 Broker 自動建立訂閱組,建議線下開啟,線上關閉
autoCreateSubscriptionGroup=true
#Broker 對外服務的監聽埠
listenPort=10911
#刪除檔案時間點,預設凌晨 4點
deleteWhen=01
#檔案保留時間,預設 48 小時
fileReservedTime=72
#commitLog每個檔案的大小預設1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個檔案預設存30W條,根據業務情況調整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理檔案磁碟空間
diskMaxUsedSpaceRatio=88
#儲存路徑
storePathRootDir=/usr/local/rocketmq/store
#commitLog 儲存路徑
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消費佇列儲存路徑儲存路徑
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#訊息索引儲存路徑
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 檔案儲存路徑
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
#abort 檔案儲存路徑
abortFile=/usr/local/rocketmq/store/abort
#限制的訊息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 非同步複製Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=SLAVE
#刷盤方式
#- ASYNC_FLUSH 非同步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#發訊息執行緒池數量
#sendMessageThreadPoolNums=128
#拉訊息執行緒池數量
#pullMessaeThreadPoolNums=128

e)配置hosts(每臺主機都需要配置)

vi /etc/hosts

新增內容如下

40.125.171.200 rocketmq-nameserver1
40.125.171.200 rocketmq-master1
40.125.201.109 rocketmq-nameserver2
40.125.201.109 rocketmq-master2
40.125.160.62 rocketmq-nameserver3
40.125.160.62 rocketmq-master1-slave1
139.219.110.31 rocketmq-nameserver4
139.219.110.31 rocketmq-master2-slave1
f)修改日誌配置檔案(每臺主機都需要配置)
mkdir -p /usr/local/rocketmq/logs
cd /usr/local/rocketmq/conf && sed -i 's#${user.home}#/usr/local/rocketmq#g' *.xml
g)修改啟動指令碼
vim /usr/local/rocketmq/bin/runbroker.sh

將該引數修改為如下(注意:本次部署的都是7G記憶體,所以Xmx最大記憶體使用設定為6g了,最小設為2g,年輕代大小為1g,大家根據自己配置調整,但mq建議不要在1G及以下記憶體執行)


五、啟動MQ

1、啟動nameserver(每臺主機都需要啟動)

cd /usr/local/rocketmq/bin
nohup sh mqnamesrv &

2、啟動brokerserver

    a)在rocketmq-maste1 即 40.125.171.200 執行

nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-sync/broker-a.properties >/dev/null 2>&1 &

    b)在rocketmq-maste2 即 40.125.201.109 執行

nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-sync/broker-b.properties >/dev/null 2>&1 &

    c)在rocketmq-master1-slave1 即 40.125.160.62 執行

nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-sync/broker-a-s.properties >/dev/null 2>&1 &

    d)在rocketmq-master2-slave1 即 139.219.110.31 執行

nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-2s-sync/broker-b-s.properties >/dev/null 2>&1 &

六、部署rocketmq-console.war

yum install tomcat
cd /usr/share/tomcat/webapps/
wget https://github.com/duomu/rocketmq-console/raw/master/rocketmq-console.war
tomcat start

這個時候,我們沒有配rocketmq-console的nameserver地址,啟動僅為war解壓

tomcat stop
vim /usr/share/tomcat/webapps/rocketmq-console/WEB-INF/classes/config.properties

將該檔案如下引數改為:

rocketmq.namesrv.addr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;rocketmq-nameserver3:9876;rocketmq-nameserver4:9876

再次啟動tomcat

tomcat start

訪問http://40.125.171.200:8080/rocketmq-console

    (注意ip換成自己tomcat的ip)


細心的小夥伴可能已經發現了,天吶,居然臺機器一個ip,那我們接著看這三臺ip相同的機器




三臺獨立的虛擬主機,居然同一個內網IP(ipv4),這4臺主機使用的是微軟雲,那我們來看下阿里雲是不是也有同樣的問題。



然而阿里雲並不相同,在實際的刀片機伺服器上也沒有出現此類問題,顯然是跟微軟雲的網路配置有關,正好可以藉此來學習另一個知識點,就是多網絡卡狀態下或ip不對的狀態下,如何指定broker的ip。(正常單網絡卡內網部署使用,不會用到下述配置)

在4臺機器執行如下指令,先後停止broker和nameserver

cd /usr/local/rocketmq/bin
sh mqshutdown broker
sh mqshutdown namesrv
依次修改4臺主機的/usr/local/rocketmq/conf/2m-2s-sync/broker-*.properties的IP為真實IP

參考 第四節,第3項,每臺機器都新增 brokerIP1配置


重啟nameserver和broker(參考 第五節,第2項)


至此rocketMQ4.2.0版本編譯、雙主雙從同步雙寫模式搭建完成。

Ps:如有錯誤或不足之處,煩請各位大神指正。謝謝。