一、安裝說明
1.下載安裝包,下載地址:https://github.com/alibaba/RocketMQ/releases/download/v3.1.7/alibaba-rocketmq-3.1.7.tar.gz。
2.解壓安裝包到指定的目錄。
3.參考資料:
ROCKETMQ管理類命令總結:http://alibaba.github.io/RocketMQ-docs/document/openuser/RocketMQ_admin.pdf
二、部署說明
(一)nameserver
1.參數配置
(1)默認啟動端口:9876,無其他配置
2.啟動和關閉
(1)啟動nameserver:nohup mqnamesrv &
(2)在生產環境部署,請參考以下軟硬件要求:https://github.com/alibaba/RocketMQ/wiki/system_requirements
(二)brokerserver
1.參數配置
(1)獲取broker默認配置:sh mqbroker -m
(2)啟動時如何加載配置:
a.生成broker默認配置模版:sh mqbroker -m > broker.p
b.修改配置文件broker.p
c.加載修改過的配置文件:nohup sh mqbroker -c broker.p
(3)配置文件選項說明
listenPort broker對外服務的監聽端口(默認值:10911,不建議修改)
namesrvAddr NameServer地址
brokerIp1 本機IP地址,默認系統自動識別,但是某些多網卡機器會存在識別錯誤的情況,這種情況下可人工設置
brokerName 本機主機名
brokerClusterName Broker所屬哪個集群(默認值:DefaultCluster)
brokerid BrokerId,必須是大於等於0的整數,0表示Master,>0表示Slave,一個Master可以掛多個Slave,Master與Slave通過BrokerName來配對
autoCreateTopicEnable 是否允許broker自動創建Topic,建議線下開啟,線上關閉(默認值:TRUE)
autoCreateSubscriptionGroup 是否允許Broker自動創建訂閱組,建議線下開啟,線上關閉(默認值:TRUE)
rejectTransactionMessage 是否拒絕事務消息接入(默認值:FALSE)
fetchNamesrvAddrByAddressServer 是否從WEB服務器獲取Name Server地址,針對大規模的Broker集群建議使用這種方法(默認值:FALSE)
storePathCommitLog commitLog存儲路徑(默認值:$HOME/store/commitlog)
storePathConsumeQueue 消費隊列存儲路徑(默認值:$HOME/store/consumequeue)
storePahtIndex 消息索引存儲路徑(默認值:$HOME/store/index)
storeCheckpoint checkpoint文件存儲路徑(默認值:$HOME/store/checkpoint)
abortFile abort文件存儲路徑(默認值:$HOME/store/abort)
deleteWhen 刪除文件時間點,默認凌晨4點(默認值:4)
fileReservedTime 文件保留時間,默認48小時(默認值:48)
maxTransferBytesOnMessageInMemory 單次Pull消息(內存)傳輸的最大字節數(默認值:262114)
maxTransferCountOnMessageInMemory 單次Pull消息(內存)傳輸的最大條數(默認值:32)
maxTransferBytesOnMessageInDisk 單次Pull消息(磁盤)傳輸的最大字節數(默認值:65536)
maxTransferCountOnMessageInDisk 單次Pull消息(磁盤)傳輸的最大條數(默認值:8)
messageIndexEnable 是否開啟消息索引功能(默認值:TRUE)
messageIndexSafe 是否提供安全的消息索引機制,索引保證不丟(默認值:FALSE)
haMasterAddress 在Slave上直接設置Master地址,默認從Name Server上自動獲取,也可以手工強制配置
brokerRole Broker的角色,ASYNC_MASTER異步復制Master、SYNC_MASTER同步雙寫Master、SLAVE(默認值:ASYNC_MASTER)
flushDiskType 刷盤方式,ASYNC_FLUSH異步刷盤、SYNC——FLUSH同步刷盤(默認值:ASYNC_FLUSH)
cleanFileForciblyEnable 磁盤滿、且無過期文件情況下TRUE表示強制刪除文件,優先保證服務可用,FALSE標記服務不可用,文件不刪除(默認值:TRUE)
2.啟動和關閉
(1)啟動:方式1:mqbroker -n "192.168.0.1:9876;192.168.0.2:9876"(IP、Port指的是nameserver的IP和port)
方式2:啟動前設置環境變量export NAMESRV_ADDR=127.0.0.1:9876,啟動Broker:nohup sh mqbroker &
(2)重啟:sh mqadmin wipeWritePerm -b brokerName -n namesrvAddr
Broker重啟可能會導致正在發往這台機器的消息發送失敗,RocketMQ提供了一種優雅關閉Broker的方法,通過執行以上命令會清除Broker的寫權限,過40s后,所有客戶端都會更新Broker路由信息,此時再關閉Broker就不會發生發送消息失敗的情況,因為所有消息都發往了其他Broker。
(三)broker集群部署
1.單個master(單主)
啟動nameserver和Broker,不需要做任何配置
2.多master模式(無Slave,全是master)
a.啟動Name Server:nohup sh mqnamesrv &
b.在機器A上啟動第一個Master:nohup sh mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-noslave/broker-a.properties &
c.在機器B上啟動第二個Master:nohup sh mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-noslave/broker-b.properties &
3.多Master多Slave模式,異步復制
a.啟動Name Server:nohup sh mqnamesrv &
b.在機器A上啟動第一個Master:nohup sh mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-a.properties &
c.在機器B上啟動第二個Master:nohup sh mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-b.properties &
d.在機器C上啟動第一個Slave:nohup sh mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-a-s.properties &
e.在機器D上啟動第二個Slave:nohup sh mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-b-s.properties &
4.多Master多Slave模式,同步雙寫
a.啟動Name Server:nohup sh mqnamesrv &
b.在機器A上啟動第一個Master:nohup sh mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-a.properties &
c.在機器B上啟動第二個Master:nohup sh mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-b.properties &
d.在機器C上啟動第一個Slave:nohup sh mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-a-s.properties &
e.在機器D上啟動第二個Slave:nohup sh mqbroker -n 192.168.1.1:9876 -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-b-s.properties &
注:以上Broker與Slave配對是通過指定相同的BrokerName參數來配對,Master的BrokerId必須是0,Slave的BrokerId必須是大於0的數。另外一個Master下面可以掛載多個Slave,同一Master下的多個Slave通過指定不同的brokerId來區分。
$ROCKETmQ_HOST指的是rocketmq安裝目錄,需要手動設置此環境變量。