- 數(shù)據(jù)結(jié)構(gòu):先進(jìn)先出的隊(duì)列呢灶。其應(yīng)用場景主要有3個(gè)方面:
-
應(yīng)用解耦
:系統(tǒng)的耦合性越高,容錯(cuò)性就越低钉嘹。以電商應(yīng)用為例鸯乃,用戶創(chuàng)建訂單后,若耦合調(diào)用庫存系統(tǒng)跋涣、物流系統(tǒng)缨睡、支付系統(tǒng),任何一個(gè)子系統(tǒng)出了故障或者因?yàn)樯?jí)等原因暫時(shí)不可用陈辱,都會(huì)造成下單操作異常奖年,影響用戶使用體驗(yàn)。使用消息隊(duì)列解耦合沛贪,系統(tǒng)的耦合性就會(huì)大大降低了陋守。比如物流系統(tǒng)發(fā)生故障,需要幾分鐘才能修復(fù)利赋,在這段時(shí)間內(nèi)水评,物流系統(tǒng)要處理的數(shù)據(jù)被緩存到消息隊(duì)列中,而用戶的下單操作正常完成媚送。當(dāng)物流系統(tǒng)恢復(fù)后中燥,補(bǔ)充處理存在消息隊(duì)列中的訂單消息即可,終端系統(tǒng)感知不到物流系統(tǒng)發(fā)生過幾分鐘故障塘偎。
-
流量削峰
:若應(yīng)用系統(tǒng)遇到請(qǐng)求流量的瞬間猛增褪那,則有可能會(huì)被壓垮幽纷。有了消息隊(duì)列可以將大量請(qǐng)求緩存起來式塌,分散到很長一段時(shí)間處理博敬,這樣可以大大提升系統(tǒng)的穩(wěn)定性和用戶體驗(yàn)。一般情況下峰尝,為了保證系統(tǒng)的穩(wěn)定性偏窝,若系統(tǒng)負(fù)載超過閾值,則會(huì)阻止用戶請(qǐng)求武学,但這影響了用戶體驗(yàn)祭往。使用消息隊(duì)列將請(qǐng)求緩存起來,等待系統(tǒng)處理完畢后再通知用戶下單完畢火窒,這比不能下單體驗(yàn)要好硼补。處于經(jīng)濟(jì)考量目的:若業(yè)務(wù)系統(tǒng)正常時(shí)段的QPS為1000,流量最高峰是10000熏矿,為了應(yīng)對(duì)流量高峰配置高性能的服務(wù)器顯然不劃算已骇,則可以使用消息隊(duì)列對(duì)峰值流量進(jìn)行削峰。
-
數(shù)據(jù)分發(fā)
:通過消息隊(duì)列可以讓數(shù)據(jù)在多個(gè)系統(tǒng)之間流通更加方便票编。數(shù)據(jù)的產(chǎn)生方不需要關(guān)心誰來使用數(shù)據(jù)褪储,只需要將數(shù)據(jù)發(fā)送到消息隊(duì)列,數(shù)據(jù)使用方直接在消息隊(duì)列中獲取數(shù)據(jù)即可慧域。
- MQ的優(yōu)點(diǎn):解耦鲤竹、削峰、數(shù)據(jù)分發(fā)昔榴。
- MQ的缺點(diǎn):
-
系統(tǒng)可用性降低
:系統(tǒng)引入的外部依賴越多辛藻,系統(tǒng)穩(wěn)定性越差吱肌。一旦MQ宕機(jī),就會(huì)對(duì)業(yè)務(wù)造成影響岩榆,如何保證MQ的高可用坟瓢?
-
系統(tǒng)復(fù)雜度提高
:MQ的加入大大增加了系統(tǒng)的復(fù)雜度勇边,以前系統(tǒng)間是同步的遠(yuǎn)程調(diào)用,現(xiàn)在是通過MQ進(jìn)行異步調(diào)用折联,如何保證消息沒有被重復(fù)消費(fèi)粒褒?怎么處理消息丟失的情況?如何保證消息傳遞的順序性诚镰?
-
一致性問題
:A系統(tǒng)處理完業(yè)務(wù)奕坟,通過MQ給B祥款、C、D三個(gè)系統(tǒng)發(fā)送消息數(shù)據(jù)月杉,若B系統(tǒng)刃跛、C系統(tǒng)處理成功,而D系統(tǒng)處理失敗苛萎,則如何保證消息數(shù)據(jù)處理的一致性桨昙?
- 常見的MQ產(chǎn)品包括ActiveMQ、RabbitMQ腌歉、RocketMQ蛙酪、Kafka,各方面對(duì)比如下:
特性 |
ActiveMQ |
RabbitMQ |
RocketMQ |
Kafka |
開發(fā)語言 |
Java |
Erlang |
Java |
Scala |
單機(jī)吞吐量 |
萬級(jí) |
萬級(jí) |
10萬級(jí) |
10萬級(jí) |
時(shí)效性 |
ms級(jí) |
us級(jí) |
ms級(jí) |
ms級(jí)以內(nèi) |
可用性 |
高(主從架構(gòu)) |
高(主從架構(gòu)) |
非常高(分布式架構(gòu)) |
非常高(分布式架構(gòu)) |
功能特性 |
成熟的產(chǎn)品翘盖,有很多公司都在使用桂塞;有較多的文檔;各種協(xié)議支持較好 |
基于Erlang開發(fā)馍驯,所以并發(fā)能力很強(qiáng)阁危,性能極其好,延時(shí)很低泥彤,管理界面較豐富 |
MQ功能完備欲芹,擴(kuò)展性極佳 |
只支持主要的MQ功能菱父,像一些消息查詢浙宜,消息回溯等功能沒有提供粟瞬,畢竟是為大數(shù)據(jù)準(zhǔn)備的,在大數(shù)據(jù)領(lǐng)域應(yīng)用廣 |
Linux上搭建RocketMQ
- 下載地址:傳送門
- 環(huán)境要求:需要提前安裝好jdk1.8
- 解壓壓縮包:
unzip rocketmq-all-4.5.1-bin-release.zip
市怎,重新命名為rocketmq
:mv rocketmq-all-4.5.1-bin-release rocketmq
- 修改兩個(gè)配置文件(
runbroker.sh
区匠、runserver.sh
)中的內(nèi)存參數(shù)驰弄,不然會(huì)啟動(dòng)失敗戚篙。
# vim runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"
# vim runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
啟動(dòng)RocketMQ服務(wù)
- 后臺(tái)啟動(dòng)
NameServer
:nohup sh bin/mqnamesrv &
臣镣,實(shí)時(shí)查看啟動(dòng)日志:tail -f ~/logs/rocketmqlogs/namesrv.log
- 后臺(tái)啟動(dòng)
Broker
:nohup sh bin/mqbroker -n localhost:9876 &
,實(shí)時(shí)查看啟動(dòng)日志:tail -f ~/logs/rocketmqlogs/broker.log
測試RocketMQ生產(chǎn)和消費(fèi)消息
#設(shè)置臨時(shí)的環(huán)境變量
export NAMESRV_ADDR=localhost:9876
#使用安裝包的Demo生產(chǎn)消息
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
#設(shè)置臨時(shí)的環(huán)境變量
export NAMESRV_ADDR=localhost:9876
#消費(fèi)消息
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer
關(guān)閉RocketMQ服務(wù)
#關(guān)閉NameServer
sh bin/mqshutdown namesrv
#關(guān)閉Broker
sh bin/mqshutdown broker
RocketMQ集群搭建
- 集群中各個(gè)角色的介紹:
-
Producer
:消息的發(fā)送者 => 發(fā)信者阔蛉。
-
Consumer
:消息接收者 => 收信者状原。
-
Broker
:暫存和傳輸消息 => 郵局颠区。
-
NameServer
:管理Broker => 各個(gè)郵局的管理機(jī)構(gòu)。
-
Topic
:區(qū)分消息的種類朋截;一個(gè)發(fā)送者可以發(fā)送消息給一個(gè)或者多個(gè)Topic部服;一個(gè)消息的接收者可以訂閱一個(gè)或者多個(gè)Topic消息廓八。
-
Message Queue
:是Topic的分區(qū)剧蹂,用于并行發(fā)送和接收消息国夜。
- RocketMQ集群特點(diǎn):
-
NameServer
是一個(gè)幾乎無狀態(tài)的節(jié)點(diǎn)筹裕,可集群部署朝卒,節(jié)點(diǎn)之間無任何信息同步抗斤。
- Broker部署相對(duì)復(fù)雜瑞眼,Broker分為Master與Slave伤疙,一個(gè)Master可以對(duì)應(yīng)多個(gè)Slave,但是一個(gè)Slave只能對(duì)應(yīng)一個(gè)Master蛙讥,Master與Slave的對(duì)應(yīng)關(guān)系通過指定相同的
BrokerName
旁涤,不同的BrokerId來定義拭抬,BrokerId=0
表示Master造虎,非0表示Slave。Master也可以部署多個(gè)犁功。每個(gè)Broker與NameServer集群中的所有節(jié)點(diǎn)建立長連接
署鸡,定時(shí)注冊(cè)Topic信息到所有NameServer时捌。
- Producer與NameServer集群中的其中一個(gè)節(jié)點(diǎn)(隨機(jī)選擇)建立長連接奢讨,定期從NameServer獲取Topic路由信息拿诸,并向提供Topic服務(wù)的Master建立長連接亩码,且定時(shí)向Master發(fā)送心跳。Producer完全無狀態(tài),可集群部署蠢络。
- Consumer與NameServer集群中的其中一個(gè)節(jié)點(diǎn)(隨機(jī)選擇)建立長連接啡省,定期從NameServer獲取Topic路由信息卦睹,并向提供Topic服務(wù)的Master结序、Slave建立長連接徐鹤,且定時(shí)向Master、Slave發(fā)送心跳劲赠。Consumer既可以從Master訂閱消息凛澎,也可以從Slave訂閱消息阿迈,訂閱規(guī)則由Broker配置決定苗沧。
- 幾種集群模式:
-
單Master模式
:風(fēng)險(xiǎn)較大待逞,一旦Broker重啟或者宕機(jī)時(shí),會(huì)導(dǎo)致整個(gè)服務(wù)不可用怜庸。不建議線上環(huán)境使用割疾,可用于本地測試宏榕。
-
多Master模式
:一個(gè)集群無Slave麻昼,全是Master,例如2個(gè)Master或3個(gè)Master燕垃。
- 優(yōu)點(diǎn):配置簡單卜壕,單個(gè)Master宕機(jī)或重啟維護(hù)對(duì)應(yīng)用無影響轴捎,在磁盤配置為RAID10時(shí)侦副,即使機(jī)器宕機(jī)不可恢復(fù)情況下尺碰,由于RAID10磁盤非城浊牛可靠题篷,消息也不會(huì)丟(異步刷盤丟失少量消息番枚,同步刷盤一條不丟)葫笼,性能最高渔欢;
- 缺點(diǎn):單臺(tái)機(jī)器宕機(jī)期間苫幢,這臺(tái)機(jī)器上未被消費(fèi)的消息在機(jī)器恢復(fù)之前不可訂閱韩肝,消息實(shí)時(shí)性會(huì)受到影響涡相。
-
多Master多Slave模式(異步)
:每個(gè)Master配置一個(gè)Slave催蝗,有多對(duì)Master-Slave丙号,HA采用異步復(fù)制
方式喳魏,主備有短暫消息延遲(毫秒級(jí))刺彩。
- 優(yōu)點(diǎn):即使磁盤損壞创倔,消息丟失的非常少,且消息實(shí)時(shí)性不會(huì)受影響念搬,同時(shí)Master宕機(jī)后朗徊,消費(fèi)者仍然可以從Slave消費(fèi)爷恳,而且此過程對(duì)應(yīng)用透明,不需要人工干預(yù)栈虚,性能同多Master模式幾乎一樣史隆;
- 缺點(diǎn):Master宕機(jī)粘姜,磁盤損壞情況下會(huì)丟失少量消息孤紧。
-
多Master多Slave模式(同步)
:每個(gè)Master配置一個(gè)Slave留储,有多對(duì)Master-Slave获讳,HA采用同步雙寫
方式丐膝,即只有主備都寫成功,才向應(yīng)用返回成功浑此。
- 優(yōu)點(diǎn):數(shù)據(jù)與服務(wù)都無單點(diǎn)故障凛俱,Master宕機(jī)情況下,消息無延遲原叮,服務(wù)可用性與數(shù)據(jù)可用性都非常高;
- 缺點(diǎn):性能比異步復(fù)制模式略低(大約低10%左右)悦荒,發(fā)送單個(gè)消息的RT會(huì)略高,且目前版本在主節(jié)點(diǎn)宕機(jī)后身腻,備機(jī)不能自動(dòng)切換為主機(jī)。
雙主雙從集群搭建
- 總體架構(gòu):消息高可用采用2m-2s(同步雙寫)方式愈诚。
- 集群工作流程:
- 啟動(dòng)NameServer她按,NameServer起來后監(jiān)聽端口牛隅,等待Broker、Producer酌泰、Consumer連上來媒佣,相當(dāng)于一個(gè)路由控制中心。
- Broker啟動(dòng)陵刹,跟所有的NameServer保持長連接默伍,定時(shí)發(fā)送心跳包也糊。心跳包中包含當(dāng)前Broker信息(IP+端口等)以及存儲(chǔ)所有Topic信息钞馁。注冊(cè)成功后允悦,NameServer集群中就有Topic跟Broker的映射關(guān)系全闷。
- 收發(fā)消息前局服,先創(chuàng)建Topic唆迁,創(chuàng)建Topic時(shí)需要指定該Topic要存儲(chǔ)在哪些Broker上妒蔚,也可以在發(fā)送消息時(shí)自動(dòng)創(chuàng)建Topic贞绵。
- Producer發(fā)送消息母蛛,啟動(dòng)時(shí)先跟NameServer集群中的其中一臺(tái)建立長連接秫逝,并從NameServer中獲取當(dāng)前發(fā)送的Topic存在哪些Broker上刷后,輪詢從隊(duì)列列表中選擇一個(gè)隊(duì)列嘶炭,然后與隊(duì)列所在的Broker建立長連接從而向Broker發(fā)消息睡陪。
- Consumer跟Producer類似涡拘,跟其中一臺(tái)NameServer建立長連接,獲取當(dāng)前訂閱Topic存在哪些Broker上,然后直接跟Broker建立連接通道只洒,開始消費(fèi)消息。
- 服務(wù)器環(huán)境:
序號(hào) |
IP |
角色 |
架構(gòu)模式 |
1 |
192.168.10.102 |
nameserver跛梗、brokerserver |
Master1漾岳、Slave2 |
2 |
192.168.10.103 |
nameserver、brokerserver |
Master2妇斤、Slave1 |
- 修改host文件:
vim /etc/hosts
,然后重啟網(wǎng)卡:systemctl restart network
# nameserver
192.168.10.102 rocketmq-nameserver1
192.168.10.103 rocketmq-nameserver2
# broker
192.168.10.102 rocketmq-master1
192.168.10.102 rocketmq-slave2
192.168.10.103 rocketmq-master2
192.168.10.103 rocketmq-slave1
- 防火墻配置:宿主機(jī)需要遠(yuǎn)程訪問虛擬機(jī)的rocketmq服務(wù)和web服務(wù)陷舅,需要開放相關(guān)的端口號(hào),簡單粗暴的方式是直接關(guān)閉防火墻。
#關(guān)閉防火墻
systemctl stop firewalld.service
#查看防火墻的狀態(tài)
firewall-cmd --state
#禁止 firewalld 開機(jī)啟動(dòng)
systemctl disable firewalld.service
- 或者為了安全,只開放特定的端口號(hào),RocketMQ默認(rèn)使用3個(gè)端口:
9876
践樱、10911
、11011
寂恬。若防火墻沒有關(guān)閉,則必須開放這些端口:
-
nameserver
默認(rèn)使用9876
端口伊磺;
-
master
默認(rèn)使用10911
端口莺丑;
-
slave
默認(rèn)使用11011
端口仑扑。
#開放 nameserver 默認(rèn)端口
firewall-cmd --remove-port=9876/tcp --permanent
#開放 master 默認(rèn)端口
firewall-cmd --remove-port=10911/tcp --permanent
#開放slave默認(rèn)端口(當(dāng)前集群模式可不開啟)
firewall-cmd --remove-port=11011/tcp --permanent
#重啟防火墻
firewall-cmd --reload
- 環(huán)境變量配置:
vim /etc/profile
,修改完后執(zhí)行:source /etc/profile
使得配置立即生效。
#set rocketmq
ROCKETMQ_HOME=/opt/module/rocketmq
PATH=$PATH:$ROCKETMQ_HOME/bin
export ROCKETMQ_HOME PATH
#服務(wù)器1:192.168.10.102
mkdir /opt/module/rocketmq/store
mkdir /opt/module/rocketmq/store/broker-a
mkdir /opt/module/rocketmq/store/broker-a/commitlog
mkdir /opt/module/rocketmq/store/broker-a/consumequeue
mkdir /opt/module/rocketmq/store/broker-a/index
mkdir /opt/module/rocketmq/store/broker-b-s
mkdir /opt/module/rocketmq/store/broker-b-s/commitlog
mkdir /opt/module/rocketmq/store/broker-b-s/consumequeue
mkdir /opt/module/rocketmq/store/broker-b-s/index
#服務(wù)器2:192.168.10.103
mkdir /opt/module/rocketmq/store
mkdir /opt/module/rocketmq/store/broker-b
mkdir /opt/module/rocketmq/store/broker-b/commitlog
mkdir /opt/module/rocketmq/store/broker-b/consumequeue
mkdir /opt/module/rocketmq/store/broker-b/index
mkdir /opt/module/rocketmq/store/broker-a-s
mkdir /opt/module/rocketmq/store/broker-a-s/commitlog
mkdir /opt/module/rocketmq/store/broker-a-s/consumequeue
mkdir /opt/module/rocketmq/store/broker-a-s/index
- 修改配置文件前先關(guān)閉RocketMQ服務(wù):
- 修改Master1配置文件(服務(wù)器ip:192.168.10.102):
vim /opt/module/rocketmq/conf/2m-2s-sync/broker-a.properties
#暴露的外網(wǎng)IP,必須暴露
brokerIP1=192.168.10.102
brokerIP2=192.168.10.102
#所屬集群名字
brokerClusterName=rocketmq-cluster
#broker名字芥映,注意此處不同的配置文件填寫的不一樣
brokerName=broker-a
#0 表示 Master刽严,大于0 表示 Slave
brokerId=0
#nameServer地址管削,分號(hào)分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在發(fā)送消息時(shí),自動(dòng)創(chuàng)建服務(wù)器不存在的topic撑螺,默認(rèn)創(chuàng)建的隊(duì)列數(shù)
defaultTopicQueueNums=4
#是否允許 Broker 自動(dòng)創(chuàng)建Topic含思,建議線下開啟,線上關(guān)閉
autoCreateTopicEnable=true
#是否允許 Broker 自動(dòng)創(chuàng)建訂閱組甘晤,建議線下開啟含潘,線上關(guān)閉
autoCreateSubscriptionGroup=true
#Broker 對(duì)外服務(wù)的監(jiān)聽端口
listenPort=10911
#刪除文件時(shí)間點(diǎn),默認(rèn)凌晨 4點(diǎn)
deleteWhen=04
#文件保留時(shí)間线婚,默認(rèn) 48 小時(shí)
fileReservedTime=120
#commitLog每個(gè)文件的大小默認(rèn)1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個(gè)文件默認(rèn)存30W條遏弱,根據(jù)業(yè)務(wù)情況調(diào)整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理文件磁盤空間
diskMaxUsedSpaceRatio=88
#存儲(chǔ)路徑
storePathRootDir=/opt/module/rocketmq/store/broker-a
#commitLog 存儲(chǔ)路徑
storePathCommitLog=/opt/module/rocketmq/store/broker-a/commitlog
#消費(fèi)隊(duì)列存儲(chǔ)路徑存儲(chǔ)路徑
storePathConsumeQueue=/opt/module/rocketmq/store/broker-a/consumequeue
#消息索引存儲(chǔ)路徑
storePathIndex=/opt/module/rocketmq/store/broker-a/index
#checkpoint 文件存儲(chǔ)路徑
storeCheckpoint=/opt/module/rocketmq/store/broker-a/checkpoint
#abort 文件存儲(chǔ)路徑
abortFile=/opt/module/rocketmq/store/broker-a/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 異步復(fù)制Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#發(fā)消息線程池?cái)?shù)量
#sendMessageThreadPoolNums=128
#拉消息線程池?cái)?shù)量
#pullMessageThreadPoolNums=128
- 修改Slave2配置文件(服務(wù)器ip:192.168.10.102):
vim /opt/module/rocketmq/conf/2m-2s-sync/broker-b-s.properties
#暴露的外網(wǎng)IP
brokerIP1=192.168.10.102
brokerIP2=192.168.10.102
#所屬集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=broker-b
#0 表示 Master塞弊,>0 表示 Slave
brokerId=1
#nameServer地址漱逸,分號(hào)分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在發(fā)送消息時(shí),自動(dòng)創(chuàng)建服務(wù)器不存在的topic游沿,默認(rèn)創(chuàng)建的隊(duì)列數(shù)
defaultTopicQueueNums=4
#是否允許 Broker 自動(dòng)創(chuàng)建Topic饰抒,建議線下開啟,線上關(guān)閉
autoCreateTopicEnable=true
#是否允許 Broker 自動(dòng)創(chuàng)建訂閱組诀黍,建議線下開啟袋坑,線上關(guān)閉
autoCreateSubscriptionGroup=true
#Broker 對(duì)外服務(wù)的監(jiān)聽端口
listenPort=11011
#刪除文件時(shí)間點(diǎn),默認(rèn)凌晨 4點(diǎn)
deleteWhen=04
#文件保留時(shí)間眯勾,默認(rèn) 48 小時(shí)
fileReservedTime=120
#commitLog每個(gè)文件的大小默認(rèn)1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個(gè)文件默認(rèn)存30W條枣宫,根據(jù)業(yè)務(wù)情況調(diào)整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理文件磁盤空間
diskMaxUsedSpaceRatio=88
#存儲(chǔ)路徑
storePathRootDir=/opt/module/rocketmq/store/broker-b-s
#commitLog 存儲(chǔ)路徑
storePathCommitLog=/opt/module/rocketmq/store/broker-b-s/commitlog
#消費(fèi)隊(duì)列存儲(chǔ)路徑存儲(chǔ)路徑
storePathConsumeQueue=/opt/module/rocketmq/store/broker-b-s/consumequeue
#消息索引存儲(chǔ)路徑
storePathIndex=/opt/module/rocketmq/store/broker-b-s/index
#checkpoint 文件存儲(chǔ)路徑
storeCheckpoint=/opt/module/rocketmq/store/broker-b-s/checkpoint
#abort 文件存儲(chǔ)路徑
abortFile=/opt/module/rocketmq/store/broker-b-s/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 異步復(fù)制Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=SLAVE
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#發(fā)消息線程池?cái)?shù)量
#sendMessageThreadPoolNums=128
#拉消息線程池?cái)?shù)量
#pullMessageThreadPoolNums=128
- 修改Master2配置文件(服務(wù)器ip:192.168.10.103):
vim /opt/module/rocketmq/conf/2m-2s-sync/broker-b.properties
#暴露的外網(wǎng)IP
brokerIP1=192.168.10.103
brokerIP2=192.168.10.103
#所屬集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=broker-b
#0 表示 Master吃环,>0 表示 Slave
brokerId=0
#nameServer地址镶柱,分號(hào)分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在發(fā)送消息時(shí)蜈漓,自動(dòng)創(chuàng)建服務(wù)器不存在的topic聘芜,默認(rèn)創(chuàng)建的隊(duì)列數(shù)
defaultTopicQueueNums=4
#是否允許 Broker 自動(dòng)創(chuàng)建Topic,建議線下開啟追城,線上關(guān)閉
autoCreateTopicEnable=true
#是否允許 Broker 自動(dòng)創(chuàng)建訂閱組范咨,建議線下開啟故觅,線上關(guān)閉
autoCreateSubscriptionGroup=true
#Broker 對(duì)外服務(wù)的監(jiān)聽端口
listenPort=10911
#刪除文件時(shí)間點(diǎn),默認(rèn)凌晨 4點(diǎn)
deleteWhen=04
#文件保留時(shí)間渠啊,默認(rèn) 48 小時(shí)
fileReservedTime=120
#commitLog每個(gè)文件的大小默認(rèn)1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個(gè)文件默認(rèn)存30W條输吏,根據(jù)業(yè)務(wù)情況調(diào)整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理文件磁盤空間
diskMaxUsedSpaceRatio=88
#存儲(chǔ)路徑
storePathRootDir=/opt/module/rocketmq/store/broker-b
#commitLog 存儲(chǔ)路徑
storePathCommitLog=/opt/module/rocketmq/store/broker-b/commitlog
#消費(fèi)隊(duì)列存儲(chǔ)路徑存儲(chǔ)路徑
storePathConsumeQueue=/opt/module/rocketmq/store/broker-b/consumequeue
#消息索引存儲(chǔ)路徑
storePathIndex=/opt/module/rocketmq/store/broker-b/index
#checkpoint 文件存儲(chǔ)路徑
storeCheckpoint=/opt/module/rocketmq/store/broker-b/checkpoint
#abort 文件存儲(chǔ)路徑
abortFile=/opt/module/rocketmq/store/broker-b/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 異步復(fù)制Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#發(fā)消息線程池?cái)?shù)量
#sendMessageThreadPoolNums=128
#拉消息線程池?cái)?shù)量
#pullMessageThreadPoolNums=128
- 修改Slave1配置文件(服務(wù)器ip:192.168.10.103):
vim /opt/module/rocketmq/conf/2m-2s-sync/broker-a-s.properties
#暴露的外網(wǎng)IP
brokerIP1=192.168.10.103
brokerIP2=192.168.10.103
#所屬集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=broker-a
#0 表示 Master替蛉,>0 表示 Slave
brokerId=1
#nameServer地址贯溅,分號(hào)分割
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
#在發(fā)送消息時(shí)拄氯,自動(dòng)創(chuàng)建服務(wù)器不存在的topic,默認(rèn)創(chuàng)建的隊(duì)列數(shù)
defaultTopicQueueNums=4
#是否允許 Broker 自動(dòng)創(chuàng)建Topic它浅,建議線下開啟译柏,線上關(guān)閉
autoCreateTopicEnable=true
#是否允許 Broker 自動(dòng)創(chuàng)建訂閱組,建議線下開啟姐霍,線上關(guān)閉
autoCreateSubscriptionGroup=true
#Broker 對(duì)外服務(wù)的監(jiān)聽端口
listenPort=11011
#刪除文件時(shí)間點(diǎn)鄙麦,默認(rèn)凌晨 4點(diǎn)
deleteWhen=04
#文件保留時(shí)間,默認(rèn) 48 小時(shí)
fileReservedTime=120
#commitLog每個(gè)文件的大小默認(rèn)1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個(gè)文件默認(rèn)存30W條镊折,根據(jù)業(yè)務(wù)情況調(diào)整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#檢測物理文件磁盤空間
diskMaxUsedSpaceRatio=88
#存儲(chǔ)路徑
storePathRootDir=/opt/module/rocketmq/store/broker-a-s
#commitLog 存儲(chǔ)路徑
storePathCommitLog=/opt/module/rocketmq/store/broker-a-s/commitlog
#消費(fèi)隊(duì)列存儲(chǔ)路徑存儲(chǔ)路徑
storePathConsumeQueue=/opt/module/rocketmq/store/broker-a-s/consumequeue
#消息索引存儲(chǔ)路徑
storePathIndex=/opt/module/rocketmq/store/broker-a-s/index
#checkpoint 文件存儲(chǔ)路徑
storeCheckpoint=/opt/module/rocketmq/store/broker-a-s/checkpoint
#abort 文件存儲(chǔ)路徑
abortFile=/opt/module/rocketmq/store/broker-a-s/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 異步復(fù)制Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=SLAVE
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#發(fā)消息線程池?cái)?shù)量
#sendMessageThreadPoolNums=128
#拉消息線程池?cái)?shù)量
#pullMessageThreadPoolNums=128
#分別在兩臺(tái)主機(jī)上啟動(dòng)NameServe集群:
nohup sh bin/mqnamesrv &
#啟動(dòng)Broker集群
#啟動(dòng) Master1 節(jié)點(diǎn)(服務(wù)器ip:192.168.10.102):
nohup sh bin/mqbroker -c /opt/module/rocketmq/conf/2m-2s-sync/broker-a.properties &
#啟動(dòng) Slave2 節(jié)點(diǎn)(服務(wù)器ip:192.168.10.102):
nohup sh bin/mqbroker -c /opt/module/rocketmq/conf/2m-2s-sync/broker-b-s.properties &
#啟動(dòng) Master2 節(jié)點(diǎn)(服務(wù)器ip:192.168.10.103):
nohup sh bin/mqbroker -c /opt/module/rocketmq/conf/2m-2s-sync/broker-b.properties &
#啟動(dòng) Slave1 節(jié)點(diǎn)(服務(wù)器ip:192.168.10.103):
nohup sh bin/mqbroker -c /opt/module/rocketmq/conf/2m-2s-sync/broker-a-s.properties &
jps查看服務(wù)器1啟動(dòng)進(jìn)程
jps查看服務(wù)器2啟動(dòng)進(jìn)程
# 查看nameServer日志
tail -500f ~/logs/rocketmqlogs/namesrv.log
# 查看broker日志
tail -500f ~/logs/rocketmqlogs/broker.log