消息隊列——rocketmq——搭建集羣(linux)

目錄

1、集羣方案:

(1)多master模式:

(2)多master多slave異步複製模式:

(3)(推薦)多master多slave同步複製模式:

2、集羣說明:

3、集羣規劃:

4、集羣架構圖:

5、關閉防火牆:

6、JDK環境安裝:

7、軟件下載:

8、軟件安裝:

9、配置環境變量:

10、修改日誌存儲位置:

11、修改配置文件:

(1)創建namesrv.properties配置文件:

(2)修改broker-master配置文件:

(3)修改broker-slave配置文件:

12、創建文件夾:

13、修改腳本啓動內存:

(1)修改nameserver啓動內存:

(2)修改broker啓動內存:

14、編寫啓動腳本:

(1)編寫nameserver啓動腳本:

(2)編寫broker啓動腳本:

15、啓動集羣:

(1)啓動nameserver節點:

(2)啓動broker-master節點:

(3)啓動broker-slave節點:

16、查看集羣節點狀態:

17、Rocketmq-console控制檯連接集羣:

(1)修改配置文件連接集羣:

(2)命令啓動指定集羣地址:

(3)查看集羣信息:

18、關閉集羣:

(1)關閉nameserver:

(2)關閉broker:

19、優雅重啓個別broker:

(1)清除broker寫權限:

(2)關閉broker:


1、集羣方案:

爲了消除單點故障,增加可靠性或增大吞吐量,可以在多臺機器上部署多個nameserver和broker,並且爲每個broker部署1個或多個slave形成集羣。集羣的模式大概有以下三種,推薦生產環境使用多master多slave同步複製模式,本文也使用此模式進行搭建集羣。

(1)多master模式:

一個集羣無 Slave,全是 Master。

優點:配置簡單,單個Master 宕機或重啓維護對應用無影響,在磁盤配置爲RAID10 時,即使機器宕機不可恢復情況下,由與 RAID10磁盤非常可靠,消息也不會丟(異步刷盤丟失少量消息,同步刷盤一條不丟)。

缺點:單臺機器宕機期間,這臺機器上未被消費的消息在機器恢復之前不可訂閱,消息實時性會受到受到影響。

(2)多master多slave異步複製模式:

每個 Master 配置一個 Slave,有多對Master-Slave, HA,採用異步複製方式,主備有短暫消息延遲,毫秒級。

優點:即使磁盤損壞,消息丟失的非常少,且消息實時性不會受影響,因爲Master 宕機後,消費者仍然可以從 Slave消費,此過程對應用透明。不需要人工干預。性能同多 Master 模式幾乎一樣。

缺點: Master 宕機,磁盤損壞情況,會丟失少量消息。

(3)(推薦)多master多slave同步複製模式:

每個 Master 配置一個 Slave,有多對Master-Slave, HA採用同步雙寫方式,主備都寫成功,嚮應用返回成功。

        優點:數據與服務都無單點, Master宕機情況下,消息無延遲,服務可用性與數據可用性都非常高。

        缺點:性能比異步複製模式略低,大約低 10%左右,發送單個消息的RT會略高。目前主宕機後,備機不能自動切換爲主機,後續會支持自動切換功能。

2、集羣說明:

本次搭建採用的是多master多slave同步複製集羣模式。

RocketMQ集羣啓動也是先啓動所有nameserver節點,然後再啓動broker master節點,最後再啓動broker slave節點。

3、集羣規劃:

本地規劃使用4個nameserver,2對master-slave,實質上就是在4個linux服務器上安裝4個rocketmq,然後分別啓動4個rocketmq中的nameserver,然後在每個rocketmq中分別啓動broker,每個broker啓動對應一個不同的配置文件,在規劃的時候一對master-slave的broker所在服務器IP時設計好的。規劃表如下:

服務器IP

節點編號

應用角色

應用描述

端口號

192.168.1.141

節點a

nameserver-a

a節點nameserver

5432

broker-master-a

a節點master-broker

10912

192.168.1.142

節點b

nameserver-b

b節點nameserver

5432

broker-master-b

b節點master-broker

10912

192.168.1.143

節點c

nameserver-c

c節點nameserver

5432

broker-slave-a

a節點slave-broker

10912

192.168.1.144

節點d

nameserver-d

d節點nameserver

5432

broker-slave-b

b節點slave-broker

10912

4、集羣架構圖:

5、關閉防火牆:

本次搭建使用虛擬機,爲了防止出現防火牆問題,直接關閉了集羣中節點服務器的防火牆,如果是在生產環境不允許關閉防火牆,那麼就開放集羣中用到的nameserver和broker端口號即可。

6、JDK環境安裝:

在集羣所有節點上配置好JDK環境。

RocketMQ中的NameServer、Broker以及Client都是需要jdk環境的,不同的軟件需要的jdk環境最低版本可能不同,詳情見下表:

Version

Client

Broker

NameServer

4.0.0-incubating

>=1.7

>=1.8

>=1.8

4.1.0-incubating

>=1.6

>=1.8

>=1.8

4.2.0

>=1.6

>=1.8

>=1.8

4.3.x

>=1.6

>=1.8

>=1.8

4.4.x

>=1.6

>=1.8

>=1.8

4.5.x

>=1.6

>=1.8

>=1.8

4.6.x

>=1.6

>=1.8

>=1.8

4.7.x

>=1.6

>=1.8

>=1.8

7、軟件下載:

一個集羣中,所有節點都要使用相同版本的軟件。

軟件下載地址:http://rocketmq.apache.org/dowloading/releases/

8、軟件安裝:

在集羣所有節點上都要安裝好rocketmq。

將下載好的RocketMQ軟件包解壓到指定文件夾中。

9、配置環境變量:

在集羣所有節點上都要配置rocketmq環境變量。

配置rocketmq的環境變量:ROCKETMQ_HOME,值爲rocketmq解壓安裝文件夾的路徑,然後將ROCKETMQ_HOME/bin添加到PATH中去。

10、修改日誌存儲位置:

在集羣所有節點上都要修改日誌存儲位置。

在rocketmq解壓安裝文件夾conf中的logback_broker.xml、logback_namesrv.xml、logback_tools.xml三個配置文件中配置的各自的日誌默認爲${user.home}/logs,這樣不太好,建議將三個xml文件中所有的user.home全部修改爲ROCKETMQ_HOME(rocketmq環境變量)。這樣日誌就會在rocketmq解壓安裝文件夾中的logs內了。

11、修改配置文件:

在集羣所有節點上都要根據各自節點的角色進行按照對應配置文件各自修改。

在rocketmq中默認的有多master、多master多slave異步複製、多master多slave同步複製的基本配置,我們可以在此基礎上進行修改,也可以自己根據下面的master、slave不同角色的節點配置信息樣例,進行手動配置一個個參數。

(1)創建namesrv.properties配置文件:

在rocketmq解壓安裝文件夾中conf中創建namesrv.properties配置文件,並在其中寫入:listenPort=5432,這個參數就是指定nameserver端口號的參數。各nameserver可以自定義各自端口號。

(2)修改broker-master配置文件:

以下是master模板配置參數,集羣內其它的master節點,只需要複製該配置參數,然後按照對應需要進行修改即可:配置文件見對應文件夾中即可。

# 所屬集羣名稱,同一個集羣中所有節點應一致,---不能修改---
brokerClusterName=test-rocketmq-cluster
# broker名稱,不同的broker節點,在一個master-slave組內參數相同,不在一個master-slave組內參數不通,---參考修改---
brokerName=broker-a
# 0,表示master;>0,表示slave,---可以不修改---
brokerId=0
# broker對外服務的監聽端口,同一個服務器上該端口號避免衝突,---參考修改---
listenPort=10911
# nameserver地址,多個地址用英文分號分隔,---不能修改---
namesrvAddr=127.0.0.1:9876;127.0.0.1:9877;127.0.0.1:9878
# 刪除文件時間點,默認凌晨4點,該參數集羣所有節點可以默認保持不變,---可以不修改---
deleteWhen=04
# 文件保留時間,默認48小時,該參數集羣所有節點可以保持默認不變,---可以不修改---
fileReservedTime=48
# broker角色,有三種:SYNC MASTER、ASYNC MASTER、SLAVE,
# 關鍵詞SYNC和ASYNC表示Master和Slave之間同步消息的機制,
# SYNC即同步更新,指當Slave和Master消息同步完成後,再返回發送成功的狀態。
# ASYNC即異步更新,master與slave有短暫消息延遲,毫秒級。
# 本次使用同步更新數據,該節點又是master,因此採用:SYNC_MASTER,---不能修改---
brokerRole=SYNC_MASTER
# 刷盤方式,有兩種:ASYNC_FLUSH、SYNC_FLUSH,ASYNC表示異步刷新,SYNC表示同步刷新。---可以不修改---
# 同步刷新:生產者發送的每一條消息都在保存到磁盤成功後才返回告訴生產者成功。這種方式不會存在消息丟失的問題,但是有很大的磁盤IO開銷,性能有一定影響。
# 異步刷新:生產者發送的每一條消息並不是立即保存到磁盤,而是暫時緩存起來,然後就返回生產者成功。隨後再異步的將緩存數據保存到磁盤,
# 異步刷新有兩種情況:1是定期將緩存中更新的數據進行刷盤,2是當緩存中更新的數據條數達到某一設定值後進行刷盤。這種方式會存在消息丟失,但是性能很好。默認是這種模式。
flushDiskType=ASYNC_FLUSH
# 是否允許broker自動創建Topic,---可以不修改---
autoCreateTopicEnable=true
# 是否允許broker自動創建訂閱組,---可以不修改---
autoCreateSubscriptionGroup=true
# 存儲路徑,---可以不修改---
storePathRootDir=/wocloud/soft/rocketmq/store-a-master
# commitLog存儲路徑,---可以不修改---
storePathCommitLog=/wocloud/soft/rocketmq/store/commitlog-a-master
# 消費隊列存儲路徑,---可以不修改---
storePathConsumeQueue=/wocloud/soft/rocketmq/store/consumequeue-a-master
# 消息索引存儲路徑,---可以不修改---
storePathIndex=/wocloud/soft/rocketmq/store/index-a-master
# checkpoint 文件存儲路徑,---可以不修改---
storeCheckpoint=/wocloud/soft/rocketmq/store/checkpoint-a-master
# abort 文件存儲路徑,---可以不修改---
abortFile=/wocloud/soft/rocketmq/store/abort-a-master

(3)修改broker-slave配置文件:

以下是slave模板配置參數,集羣內其它的slave節點,只需要複製該配置參數,然後按照對應需要進行修改即可:配置文件見對應文件夾中即可。

# 所屬集羣名稱,同一個集羣中所有節點應一致,---不能修改---
brokerClusterName=test-rocketmq-cluster
# broker名稱,不同的broker節點,在一個master-slave組內參數相同,不在一個master-slave組內參數不通,---參考修改---
brokerName=broker-a
# 0,表示master;>0,表示slave,---可以不修改---
brokerId=1
# broker對外服務的監聽端口,同一個服務器上該端口號避免衝突,---參考修改---
listenPort=10912
# nameserver地址,多個地址用英文分號分隔,---不能修改---
namesrvAddr=127.0.0.1:9876;127.0.0.1:9877;127.0.0.1:9878
# 刪除文件時間點,默認凌晨4點,該參數集羣所有節點可以默認保持不變,---可以不修改---
deleteWhen=04
# 文件保留時間,默認48小時,該參數集羣所有節點可以保持默認不變,---可以不修改---
fileReservedTime=48
# broker角色,有三種:SYNC MASTER、ASYNC MASTER、SLAVE,
# 關鍵詞SYNC和ASYNC表示Master和Slave之間同步消息的機制,
# SYNC即同步更新,指當Slave和Master消息同步完成後,再返回發送成功的狀態。
# ASYNC即異步更新,master與slave有短暫消息延遲,毫秒級。
# 本次使用同步更新數據,該節點又是master,因此採用:SYNC_MASTER,---不能修改---
brokerRole=SLAVE
# 刷盤方式,有兩種:ASYNC_FLUSH、SYNC_FLUSH,ASYNC表示異步刷新,SYNC表示同步刷新。---可以不修改---
# 同步刷新:生產者發送的每一條消息都在保存到磁盤成功後才返回告訴生產者成功。這種方式不會存在消息丟失的問題,但是有很大的磁盤IO開銷,性能有一定影響。
# 異步刷新:生產者發送的每一條消息並不是立即保存到磁盤,而是暫時緩存起來,然後就返回生產者成功。隨後再異步的將緩存數據保存到磁盤,
# 異步刷新有兩種情況:1是定期將緩存中更新的數據進行刷盤,2是當緩存中更新的數據條數達到某一設定值後進行刷盤。這種方式會存在消息丟失,但是性能很好。默認是這種模式。
flushDiskType=ASYNC_FLUSH
# 是否允許broker自動創建Topic,---可以不修改---
autoCreateTopicEnable=true
# 是否允許broker自動創建訂閱組,---可以不修改---
autoCreateSubscriptionGroup=true
# 存儲路徑,---可以不修改---
storePathRootDir=/wocloud/soft/rocketmq/store-a-slave
# commitLog存儲路徑,---可以不修改---
storePathCommitLog=/wocloud/soft/rocketmq/store/commitlog-a-slave
# 消費隊列存儲路徑,---可以不修改---
storePathConsumeQueue=/wocloud/soft/rocketmq/store/consumequeue-a-slave
# 消息索引存儲路徑,---可以不修改---
storePathIndex=/wocloud/soft/rocketmq/store/index-a-slave
# checkpoint 文件存儲路徑,---可以不修改---
storeCheckpoint=/wocloud/soft/rocketmq/store/checkpoint-a-slave
# abort 文件存儲路徑,---可以不修改---
abortFile=/wocloud/soft/rocketmq/store/abort-a-slave

12、創建文件夾:

按照對應配置文件中最後幾個參數配置的各個存儲路徑,創建對應的文件夾,有可能一個rocketm中啓動多個broker實例,因此在配置的時候注意添加a、b、c等節點編號以及master、slave角色。

創建存儲路徑:

mkdir -p /wocloud/soft/rocketmq/store-a-master

創建commitLog存儲路徑:

mkdir -p /wocloud/soft/rocketmq/store/commitlog-a-master

創建消費隊列存儲路徑

mkdir -p /wocloud/soft/rocketmq/store/consumequeue-a-master

創建消息索引存儲路徑

mkdir -p /wocloud/soft/rocketmq/store/index-a-master

創建checkpoint文件存儲路徑

mkdir -p /wocloud/soft/rocketmq/store/checkpoint-a-master

創建abort文件存儲路徑

mkdir -p /wocloud/soft/rocketmq/store/abort-a-master

13、修改腳本啓動內存:

在集羣所有節點上都要根據服務器內存情況進行對應修改。

(1)修改nameserver啓動內存:

java的默認啓動參數中,啓動時堆內存的大小爲2g,老舊一點的機器上根本沒有這麼多空閒內存,通過查看mqbroker.sh文件實質上是調用了同級的runbroker.sh,因此修改runbroker.sh中的內存配置,-Xms:啓動內存,默認2g; -Xmx:運行最大內存,默認爲2g。根據自己設備內存情況可自行設置,建議這兩個參數值大小一致。

(2)修改broker啓動內存:

java的默認啓動參數中,啓動時堆內存的大小爲2g,老舊一點的機器上根本沒有這麼多空閒內存,通過查看mqbroker.sh文件實質上是調用了同級的runbroker.sh,因此修改runbroker.sh中的內存配置,-Xms:啓動內存,默認2g; -Xmx:運行最大內存,默認爲2g。根據自己設備內存情況可自行設置,建議這兩個參數值大小一致。

14、編寫啓動腳本:

在集羣所有節點上都要根據節點角色編寫腳本,方便啓動集羣。

(1)編寫nameserver啓動腳本:

就是將後臺啓動nameserver的命令寫在一個sh格式腳本中,以後啓動方便了就。主要就是命令,然後加上一個日誌重定向到指定文件即可。

格式類似如下:忽略命令不對,這個是broker啓動命令,換成nameserver啓動命令即可。

(2)編寫broker啓動腳本:

就是將後臺啓動broker的命令寫在一個sh格式腳本中,以後啓動方便了就。主要就是命令,然後加上一個日誌重定向到指定文件即可。

格式類似如下:

15、啓動集羣:

啓動集羣有嚴格的順序,先啓動集羣內所有的nameserver節點,然後再啓動所有的broker-master節點,最後啓動broker-slave節點。

(1)啓動nameserver節點:

在集羣中,逐個將nameserver節點上的啓動腳本進行運行,啓動nameserver服務。

(2)啓動broker-master節點:

在集羣中,逐個將broker-master節點上的啓動腳本進行運行,啓動broker-master服務。

(3)啓動broker-slave節點:

在集羣中,逐個將broker-slave節點上的啓動腳本進行運行,啓動broker-slave服務。

16、查看集羣節點狀態:

在集羣中任意一個服務器上,執行以下命令查看該集羣上所啓動的各實例信息:

mqadmin clusterList --namesrvAddr=10.16.13.90:9876

注意:namesrvAddr只寫該節點的nameserver地址即可。

17、Rocketmq-console控制檯連接集羣:

(1)修改配置文件連接集羣:

使用winRar等軟件打開rocketmq-console的jar包,然後找到取出application.properties配置文件,修改rocketmq.config.namesrvAddr參數爲集羣的nameserver地址,多個節點用英文分號分隔。然後將修改好的application.properties配置文件替換到jar中舊文件即可。

(2)命令啓動指定集羣地址:

不修改jar中原有的配置文件,在啓動jar包的命令中將集羣的nameserver地址傳遞進去即可,傳遞參數方式爲在命令中增加如下參數:-Drocketmq.config.namesrvAddr=nameserver集羣地址(多個節點用英文分號分隔)

例如:

java -Dserver.port=7080 -Drocketmq.config.namesrvAddr=192.168.1.141:5432;192.168.1.142:5432;192.168.1.143:5432;192.168.1.144:5432 -jar rocketmq-console-ng-1.0.0.jar

(3)查看集羣信息:

在啓動rocketmq-console控制檯後,可以在控制檯中查看到剛剛搭建好的rocketmq集羣各節點詳細信息。

18、關閉集羣:

(1)關閉nameserver:

在集羣所有節點中的nameserver節點上執行以下操作。

在linux中通過cd進入到rocketmq解壓安裝目錄下的bin中,執行關閉nameserver啓動命令:

sh mqshutdown namesrv

(2)關閉broker:

在集羣所有節點中的broker節點上執行以下操作。

在linux中通過cd進入到rocketmq解壓安裝目錄下的bin中,執行關閉broker啓動命令:

sh mqshutdown broker

19、優雅重啓個別broker:

Broker 重啓可能會導致正在發往這臺機器的的消息發送失敗,RocketMQ提供了一種優雅關閉Broker的方法,通過執行以下命令會清除Broker的寫權限,過40s後,所有客戶端都會更新Broker路由信息,此時再關閉Broker就不會發生髮送消息失敗的情況,因爲所有消息都發往了其他 Broker。

(1)清除broker寫權限:

在需要重啓的broker節點中,通過cd進入到rocketmq解壓安裝目錄下的bin中執行以下命令:

sh mqadmin wipeWritePerm -b brokerName -n namesrvAddr

注意:上面的brokerName、namesrvAddr爲參數,自己需要修改成對應具體的參數纔可以執行命令。

(2)關閉broker:

執行完以上參數後,至少要等40s,建議等待1min鍾,然後再執行命令關閉該broker節點,就可以完全不會有影響了。通過cd進入到rocketmq解壓安裝目錄下的bin中,執行關閉broker命令:

sh mqshutdown broker

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章