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名 |
1 | 40.125.171.200 | master | broker-a.properties | rocketmq-nameserver1 | rocketmq-maste1 |
2 | 40.125.201.109 | master | broker-b.properties | rocketmq-nameserver2 | rocketmq-maste2 |
3 | 40.125.160.62 | slave | broker-a-s.properties | rocketmq-nameserver3 | rocketmq-master1-slave1 |
4 | 139.219.110.31 | slave | broker-b-s.properties | rocketmq-nameserver4 | rocketmq-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:如有錯誤或不足之處,煩請各位大神指正。謝謝。