最近在學習RocketMq, 根據網上的搭建步驟, 成功搭建了RocketMq集羣環境, 然後在這裏做記錄, 方便後面學習查看 .
瞭解幾種集羣方式:
- 單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會略高。目前主宕機後,備機不能自動切換爲主機,後續會支持自動切換功能。
開始搭建:
我們這裏採用雙Master方式 .
機器1 : 192.168.223.144
機器2 : 192.168.223.145
- 在兩臺機器的hosts文件中添加如下信息:
vim /etc/hosts
- 上傳並進行解壓
上傳alibaba-rocketmq-3.2.6.tar.gz文件至/usr/local/application (本人將所有安裝軟件都放在application目錄下)
tar -zxvf alibaba-rocketmq-3.2.6.tar.gz -C /usr/local/application
mv alibaba-rocketmq-3.2.6 alibaba-rocketmq
ln -s alibaba-rocketmq rocketmq
執行完上面命令之後, application目錄如下 :
- 創建存儲路徑
mkdir /usr/local/application/rocketmq/store
mkdir /usr/local/application/rocketmq/store/commitlog
mkdir /usr/local/application/rocketmq/store/consumequeue
mkdir /usr/local/application/rocketmq/store/index - 修改兩臺機器rocketmq配置文件
vim /usr/local/application/rocketmq/conf/2m-noslave/broker-a.properties
vim /usr/local/application/rocketmq/conf/2m-noslave/broker-b.properties
注意 :
下面的broker名字, 不同的配置文件填寫的不一樣.
#所屬集羣名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=broker-a|broker-b
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分號分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2: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=/usr/local/application/rocketmq/store
#commitLog 存儲路徑
storePathCommitLog=/usr/local/application/rocketmq/store/commitlog
#消費隊列存儲路徑存儲路徑
storePathConsumeQueue=/usr/local/application/rocketmq/store/consumequeue
#消息索引存儲路徑
storePathIndex=/usr/local/application/rocketmq/store/index
#checkpoint 文件存儲路徑
storeCheckpoint=/usr/local/application/rocketmq/store/checkpoint
#abort 文件存儲路徑
abortFile=/usr/local/application/rocketmq/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
- 修改日誌配置文件
mkdir -p /usr/local/application/rocketmq/logs
cd /usr/local/application/rocketmq/conf && sed -i ‘s#${user.home}#/usr/local/application/rocketmq#g’ *.xml - 修改兩臺機器啓動腳本參數
設置虛擬器啓動大小爲1G, 最大爲1G, 新生代爲512M
vim /usr/local/application/rocketmq/bin/runbroker.sh
vim /usr/local/application/rocketmq/bin/runserver.sh
先分別啓動兩臺機器的NameServer
cd /usr/local/application/rocketmq/bin
nohup sh mqnamesrv &然後分別啓動兩臺機器的BrokerServer.
- BrokerServer A(192.168.223.144)(指定配置文件爲:broker-a.properties)
cd /usr/local/application/rocketmq/bin
nohup sh mqbroker -c /usr/local/application/rocketmq/conf/2m-noslave/broker-a.properties >/dev/null 2>&1 & - BrokerServer B(192.168.223.145)(指定配置文件:broker-b.properties)
cd /usr/local/application/rocketmq/bin
nohup sh mqbroker -c /usr/local/application/rocketmq/conf/2m-noslave/broker-b.properties >/dev/null 2>&1 &
- BrokerServer A(192.168.223.144)(指定配置文件爲:broker-a.properties)
- 查看各自啓動日誌是否正常
tail -f -n 500 /usr/local/application/rocketmq/logs/rocketmqlogs/broker.log
tail -f -n 500 /usr/local/application/rocketmq/logs/rocketmqlogs/namesrv.log - jps查看進程是否存在
管控臺搭建:
下載rocketmq-console.war, 並在tomcat中部署rocketmq-console.war
- 利用unzip命令進行解壓.
- 修改配置文件
修改這個目錄下的config.properties文件
/usr/local/application/tomcat/apache-tomcat-7.0.69/webapps/rocketmq-console/WEB-INF/classes
- 保存後, 啓動tomcat
至此rocketmq集羣搭建完畢!