搭建RocketMQ集群


一、環境及准備

集群環境:

軟件版本:

部署前操作:

關閉防火牆,關閉selinux(生產環境按需關閉或打開) 同步服務器時間,選擇公網ntpd服務器或者自建ntpd服務器 [root@es1 ~]# crontab -l #為了方便直接使用公網服務器 #update time */5 * * * *  /usr/bin/rdate -s time-b.nist.gov &>/dev/null

安裝配置Java環境

配置hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.16.150.134 rocketmq-nameserver1 172.16.150.134 rocketmq-master1 172.16.150.135 rocketmq-nameserver2 172.16.150.135 rocketmq-master2 172.16.150.136 rocketmq-nameserver3 172.16.150.136 rocketmq-master3

二、RocketMQ簡介

1.集群方式:

單Master方式

風險比較大, 一旦Broker重啟或者宕機, 將導致整個環境不可用, 不建議線上使用.

多Master模式

一個集群中沒有slave, 全是master, 例如2個master或者3個master. 
優點:配置簡單, 性能最好,單個Master宕機或重啟對應用無影響, 磁盤配置為RAID10時, 即使機器宕機不可恢復, 由於RAID10磁盤非常可靠, 消息也不會丟(異步刷盤丟失少量信息, 同步刷盤一條不丟) 
缺點 : 單台機器宕機期間, 這個機器上未被消費消息在機器恢復之前不可訂閱, 消息實時性受到影響 .

多Master多Slave模式, 異步復制

每個 Master 配置一個 Slave,有多對Master-Slave,采用異步復制方式,主備有短暫消息延遲,毫秒級。 優點:即使磁盤損壞,消息丟失的非常少,且消息實時性不會受影響,因為Master 宕機后,消費者仍然可以從 Slave消費,此過程對應用透明。不需要人工干預。性能同Master 模式幾乎一樣。 缺點:Master 宕機,磁盤損壞情況,會丟失少量消息。

多Master多Slave模式, 同步雙寫

每個 Master 配置一個 Slave,有多對Master-Slave,采用同步雙寫方式,主備都寫成功,向應用返回成功。 優點:數據與服務都無單點,Master宕機情況下,消息無延遲,服務可用性與數據可用性都非常高 缺點:性能比異步復制模式略低,大約低 10%左右,發送單個消息的 RT會略高。目前主宕機后,備機不能自動切換為主機,后續會支持自動切換功能。

2.名詞解釋

NameServer

NameServer顧名思義,在系統中肯定是做命名服務,服務治理方面的工作,功能應該是和zookeeper差不多,據說RocketMq的早期版本確實是使用的zookeeper,后來改為了自己實現的NameServer。
NameServer在RocketMQ中的兩個主要作用:
  NameServer維護了一份Broker的地址列表和,broker在啟動的時候會去NameServer進行注冊,會維護Broker的存活狀態。
  NameServer維護了一份Topic和Topic對應隊列的地址列表,broker每次發送心跳過來的時候都會把Topic信息帶上。

NameServer的穩定性非常高。原因有二:
  NameServer互相獨立,彼此沒有通信關系,單台NameServer掛掉,不影響其他NameServer,即使全部掛掉,也不影響業務系統使用。無狀態。
  NameServer不會有頻繁的讀寫,所以性能開銷非常小,穩定性很高。

Broker

broker是消息接收處理,落地的核心模塊。這個模塊用於接收producer發送的消息以及consumer。
與NameServer關系

連接
  單個broker和所有nameServer保持長連接

心跳
  心跳間隔:每隔30秒(此時間無法更改)向所有nameserver發送心跳,心跳包含了自身的topic配置信息。
  心跳超時:nameserver每隔10秒鍾(此時間無法更改),掃描所有還存活的broker連接,若某個連接2分鍾內(當前時間與最后更新時間差值超過2分鍾,此時間無法更改)沒有發送心跳數據,則斷開連接。

斷開
  時機:broker掛掉;心跳超時導致nameserver主動關閉連接
  動作:一旦連接斷開,nameserver會立即感知,更新topc與隊列的對應關系,但不會通知生產者和消費者

負載均衡
  一個topic分布在多個broker上,一個broker可以配置多個topic,它們是多對多的關系。
  如果某個topic消息量很大,應該給它多配置幾個隊列,並且盡量多分布在不同broker上,減輕某個broker的壓力。
  topic消息量都比較均勻的情況下,如果某個broker上的隊列越多,則該broker壓力越大。

 三、RocketMQ集群部署(多master方式)

1.下載軟件(這里采用二進制安裝,由於是實驗環境,所以安裝的版本為最新版本,如果生產不建議使用最新版本,但是建議使用4.3+版本,4.3之后RocketMQ開始支持事務)

[root@rocketmq-master1 ~]#  wget http://mirrors.tuna.tsinghua.edu.cn/apache/rocketmq/4.5.1/rocketmq-all-4.5.1-bin-release.zip

2.解壓RocketMQ

[root@rocketmq-master1 ~]#unzip rocketmq-all-4.5.1-bin-release.zip [root@rocketmq-master1 ~]#mv rocketmq-all-4.5.1-bin-release /usr/local [root@rocketmq-master1 ~]#cd /usr/local [root@rocketmq-master1 local]#ln -sv rocketmq-all-4.5.1-bin-release  rocketmq

3.創建相關數據及日志目錄

mkdir -p /mnt/store/{commitlog,consumequeue,index,logs}

4.目錄解析(根據部署的架構進入對應的目錄)

[root@rocketmq-master1 local]# cd rocketmq/conf/ [root@rocketmq-master1 conf]# ll 總用量 36 drwxr-xr-x 2 root root   118 2019-03-28 17:08 2m-2s-async #多主多從異步刷新參考配置文件 drwxr-xr-x 2 root root   118 2019-03-28 17:08 2m-2s-sync  #多主多從同步刷新參考配置文件 drwxr-xr-x 2 root root   118 2019-06-04 10:10 2m-noslave  #多master參考配置文件 ....
[root@rocketmq-master1 conf]# cd 2m-noslave/ #由於我們使用的是多master架構,進入2m-noslave目錄

5.創建配置文件

#所屬集群名字 brokerClusterName=rocketmq-cluster #broker名字,注意此處不同的配置文件填寫的不一樣,a.properties,就寫broker-a,b的就填寫b brokerName=broker-a #0 表示 Master,>0 表示 Slave brokerId=0 #nameServer地址,分號分割 namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;rocketmq-nameserver3:9876 #在發送消息時,自動創建服務器不存在的topic,默認創建的隊列數 defaultTopicQueueNums=4 #是否允許 Broker 自動創建Topic,建議線下開啟,線上關閉 autoCreateTopicEnable=true #是否允許 Broker 自動創建訂閱組,建議線下開啟,線上關閉 autoCreateSubscriptionGroup=true #Broker 對外服務的監聽端口 listenPort=10911 #刪除文件時間點,默認凌晨 4點 deleteWhen=04 #文件保留時間,默認 48 小時 fileReservedTime=120 #commitLog每個文件的大小默認1G mapedFileSizeCommitLog=1073741824 #ConsumeQueue每個文件默認存30W條,根據業務情況調整 mapedFileSizeConsumeQueue=300000 #destroyMapedFileIntervalForcibly=120000 #redeleteHangedFileInterval=120000 #檢測物理文件磁盤空間 diskMaxUsedSpaceRatio=88 #存儲路徑 storePathRootDir=/mnt/store #commitLog 存儲路徑 storePathCommitLog=/mnt/store/commitlog #消費隊列存儲路徑存儲路徑 storePathConsumeQueue=/mnt/store/consumequeue #消息索引存儲路徑 storePathIndex=/mnt/store/index #checkpoint 文件存儲路徑 storeCheckpoint=/mnt/store/checkpoint #abort 文件存儲路徑 abortFile=/mnt/store/abort #限制的消息大小 maxMessageSize=65536 #flushCommitLogLeastPages=4 #flushConsumeQueueLeastPages=2 #flushCommitLogThoroughInterval=10000 #flushConsumeQueueThoroughInterval=60000 #Broker 的角色 #- ASYNC_MASTER 異步復制Master #- SYNC_MASTER 同步雙寫Master #- SLAVE brokerRole=ASYNC_MASTER #刷盤方式 #- ASYNC_FLUSH 異步刷盤 #- SYNC_FLUSH 同步刷盤 flushDiskType=ASYNC_FLUSH #checkTransactionMessageEnable=false #發消息線程池數量 #sendMessageThreadPoolNums=128 #拉消息線程池數量 #pullMessageThreadPoolNums=128
brokerIP1=172.16.150.134 #綁定本地IP,如果主機有多塊網卡則需要配置,否則報錯

拷貝配置文件(注意要修改brokerName的名稱)

[root@rocketmq-master1 2m-noslave]# cp broker-a.properties broker-b.properties  #第二台配置文件,注意要修改brokerName的名稱和綁定地址 !!! [root@rocketmq-master1 2m-noslave]# cp broker-a.properties broker-c.properties #第三台配置文件 [root@rocketmq-master1 2m-noslave]# scp broker-a.properties broker-b.properties broker-c.properties 172.16.150.135:/usr/local/rocketmq/conf/ [root@rocketmq-master1 2m-noslave]# scp broker-a.properties broker-b.properties broker-c.properties 172.16.150.136:/usr/local/rocketmq/conf/

6.修改log路徑

[root@rocketmq-master1 2m-noslave]# cd .. [root@rocketmq-master1 conf]# pwd /usr/local/rocketmq/conf [root@rocketmq-master1 conf]#  sed -i 's#${user.home}#/mnt#g' *.xml   #默認位置為用戶家目錄下logs目錄

7.修改服務啟動腳本參數 

[root@rocketmq-master1 conf]# cd ../bin/ [root@rocketmq-master1 bin]# pwd /usr/local/rocketmq/bin [root@rocketmq-master1 bin]# vim runbroker.sh  

[root@rocketmq-master1 bin]# vim runserver.sh 

8.先啟動nameserver服務(必須)

[root@rocketmq-master1 bin]# nohup sh mqnamesrv & [root@rocketmq-master1 logs]# cd /mnt/logs/rocketmqlogs/ [root@rocketmq-master1 rocketmqlogs]# tailf namesrv.log 

9.啟動broker服務

[root@rocketmq-master1 bin]#nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-noslave/broker-a.properties  &  #注意,每台服務啟動時指定的配置文件也要同時改變 [root@rocketmq-master2 bin]# nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-noslave/broker-b.properties  & [root@rocketmq-master3 bin]# nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-noslave/broker-c.properties  & [root@rocketmq-master1 bin]# tailf /mnt/logs/rocketmqlogs/broker.log  
[root@rocketmq-master1 bin]# tailf /mnt/logs/rocketmqlogs/broker.log

 四、部署rockmq-console

Git地址:https://github.com/apache/rocketmq-externals/tree/release-rocketmq-console-1.0.0

[root@rocketmq-master1 bin]#cd /mnt/ [root@rocketmq-master1 mnt]#git clone -b release-rocketmq-console-1.0.0 https://github.com/apache/rocketmq-externals.git
[root@rocketmq-master1 mnt]# cd /mnt/rocketmq-externals/rocketmq-console/src/main/resources [root@rocketmq-master1 resources]#vim application.properties 

 編輯配置文件,按照實際情況修改

編譯源代碼(需要maven環境)

[root@rocketmq-master1 resources]# cd /mnt/rocketmq-externals/rocketmq-console/ [root@rocketmq-master1 rocketmq-console]# mvn clean package -Dmaven.test.skip=true

啟動服務

[root@rocketmq-master1 rocketmq-console]# cd target/ [root@rocketmq-master1 target]# java -jar target/rocketmq-console-ng-1.0.0.jar

瀏覽器訪問

編譯過程中出現的報錯:

-source 1.6 中不支持 diamond 運算符
[ERROR] (請使用 -source 7 或更高版本以啟用 diamond 運算符)

解決方法:pom.xml的plugins下添加:

在pom.xml的plugins下添加以下內容(全部內容):

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>2.3.2</version>
  <configuration>
    <source>1.8</source>
    <target>1.8</target>
  </configuration>
</plugin>

拷貝時注意中文空格,否則會報錯

或者使用容器的方式部署,步驟如下:

docker pull styletang/rocketmq-console-ng
docker run -d -e "JAVA_OPTS=-Drocketmq.namesrv.addr=127.0.0.1:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 8080:8080 -t styletang/rocketmq-console-ng   #將127.0.0.1修改為nameserver地址

如果當前環境已經存在rockmq,且為3.x版本時,使用最新的console時,在頁面會有部分信息不展示,可以使用對應版本的console,下面的鏈接為3.2.6版本,使用Tomcat部署即可

步驟:

1.unzip解壓war包 -d指定到某個目錄, 2.進入解壓目錄下WEB-INF/classes/目錄中 3.修改config.properties配置文件,添加name server地址 格式IP(域名):port 如果有多個,已;為分割 4將目錄移動到Tomcat docBase目錄下,並啟動
鏈接:https://pan.baidu.com/s/10NeEeBH8eugdYcDn6e02aQ 提取碼:aq1t 

打開的界面略有不同,如下圖

注意事項:

1.配置文件名稱和服務器對應,a:master1 b:master2 .. 2.注意不同主機配置文件名稱不同,brokerNam也不同 3.每台briker服務啟動時,注意要指定正確的配置文件 4.建議生產每個服務使用screen命令啟動,不要使用nohup

參考文檔:

https://github.com/apache/rocketmq-externals/tree/release-rocketmq-console-1.0.0/rocketmq-console

https://github.com/apache/rocketmq-externals/blob/master/rocketmq-console/doc/1_0_0/UserGuide_CN.md

http://rocketmq.apache.org/docs/quick-start/

https://juejin.im/post/5a911ea16fb9a0633f0e36a1

https://blog.csdn.net/sybnfkn040601/article/details/64920062

https://www.cnblogs.com/buyige/p/9437054.html


免責聲明!

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



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