介紹:
多Master模式,一個集群無Slave,全是Master,例如2個Master或者3個Master。
優點:配置簡單,單個Master宕機或重啟維護對應用無影響,在磁盤配置為RAID10時,即使機器宕機不可恢復情況下,由於RAID10磁盤非常可靠,消息也不會丟(異步刷盤丟失少量消息,同步刷盤一條不丟)。性能最高。
缺點:單台機器宕機期間,這台機器上未被消費的消息在機器恢復之前不可訂閱,消息實時性會收到影響
1. 服務器環境:
服務器A
192.168.192.130
服務器B
192.168.192.131
2.編輯服務器A和服務器B的hosts文件,添加同樣的內容
vim /etc/hosts
192.168.192.130 rocketmq-nameserver1
192.168.192.130 rocketmq-master1
192.168.192.131 rocketmq-nameserver2
192.168.192.131 rocketmq-master2
3.重啟一下兩台機器的網卡並且兩台服務器相互ping一下,看是否通
重啟網卡
$ service network restart
#130上ping 131
ping rocketmq-nameserver2 ping rocketmq-master2
#131上ping 130
ping rocketmq-nameserver1
ping rocketmq-master2
4. 上傳alibaba-rocketmq-3.2.6.tar.gz 到兩台服務器上面的/usr/local下解壓,改名(兩個服務器操作相同)
tar -vxzf alibaba-rocketmq-3.2.6.tar.gz mv alibaba-rocketmq-3.2.6 rocketmq
5.在兩台服務器上面創建存儲路徑(兩個服務器操作相同)
mkdir /usr/local/rocketmq/store mkdir /usr/local/rocketmq/store/commitlog mkdir /usr/local/rocketmq/store/consumequeue mkdir /usr/local/rocketmq/store/index
6.編輯兩台服務器上面rocketmq的配置文件(兩個服務器操作相同)
6.1 修改broker-a.properties文件
vim /usr/local/rocketmq/conf/2m-noslave/broker-a.properties
#所屬集群名字
borkerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=broker-a
#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/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=ASYNC_MASTER
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#發消息線程池數量
#sendMessageThreadPoolNums=128
#拉消息線程池數量
#pullMessageThreadPoolNums=128
6.2 修改broker-b.properties文件
vim /usr/local/rocketmq/conf/2m-noslave/broker-b.properties
#所屬集群名字
borkerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=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/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=ASYNC_MASTER
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#發消息線程池數量
#sendMessageThreadPoolNums=128
#拉消息線程池數量
#pullMessageThreadPoolNums=128
7.修改兩台機器的日志配置文件(兩個服務器操作相同)
mkdir -p /usr/local/rocketmq/logs cd /usr/local/rocketmq/conf && sed -i 's#${user.home}#/usr/local/rocketmq#g' *.xml
8.修改啟動腳本參數,JVM調優(兩個服務器操作相同)
#broker調優
vim /usr/local/rocketmq/bin/runbroker.sh
#nameserver調優
vim /usr/local/rocketmq/bin/runserver.sh
9.啟動NameServer(兩個服務器操作相同)
cd /usr/local/rocketmq/bin nohup sh mqnamesrv & jps--看進程
10.啟動BrokerServer A 服務器A
cd /usr/local/rocketmq/bin nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-noslave/broker-a.properties >/dev/null 2>&1 & netstat -ntlp jps tail -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/broker.log tail -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/namesrv.log
11.啟動BrokerServer B 服務器B
cd /usr/local/rocketmq/bin nohup sh mqbroker -c /usr/local/rocketmq/conf/2m-noslave/broker-b.properties >/dev/null 2>&1 & netstat -ntlp jps tail -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/broker.log tail -f -n 500 /usr/local/rocketmq/logs/rocketmqlogs/namesrv.log
12. 停止broker命令
cd /usr/local/rocketmq/bin sh mqshutdown broker
13.停止nameserver命令
sh bin/mqshutdown namesrv
參考:
[1]官網,http://rocketmq.apache.org/docs/quick-start/
[2]博客,https://www.cnblogs.com/wrong5566/p/6078592.html
[3]文檔,RocketMQ用戶指南3.2.4