您好,登錄后才能下訂單哦!
RocketMQ網絡部署圖如下圖所示:
NameServer集群如下:
NameServer集群 | IP地址 |
---|---|
NameServer-1 | 192.168.1.101 |
NameServer-2 | 192.168.1.102 |
分別啟動
nohup sh mqnamesrv &
tail -f -n 500 $ROCKETMQ_HOME/logs/rocketmqlogs/namesrv.log
眾所周知,RocketMQ有多種集群部署方式,它們的配置文件也是分開的,如下:
[root@rocketmq01 conf]# ls -rlt /usr/local/rocketmq/conf
total 32
-rw-r--r-- 1 root root 949 Sep 19 2017 broker.conf
drwxr-xr-x 2 root root 60 Sep 19 2017 2m-noslave
drwxr-xr-x 2 root root 118 Sep 19 2017 2m-2s-sync
drwxr-xr-x 2 root root 118 Sep 19 2017 2m-2s-async
-rw-r--r-- 1 root root 3720 Apr 21 07:56 logback_namesrv.xml
-rw-r--r-- 1 root root 3718 Apr 21 07:56 logback_filtersrv.xml
-rw-r--r-- 1 root root 15146 Apr 21 07:56 logback_broker.xml
-rw-r--r-- 1 root root 3789 Apr 21 07:56 logback_tools.xml
說明:
RocketMQ默認提供的配置文件都是最基本的,很多配置都是默認值,在生產環境中我們需要根據實際情況進行修改。樣例配置如下:
#所屬集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置文件填寫的不一樣
brokerName=broker-a|broker-b
#0表示Master,>0表示Slave
brokerId=0
#nameServer地址,分號分割
namesrvAddr=192.168.1.101:9876;192.168.1.102: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/alibaba-rocketmq/store
#commitLog 存儲路徑
storePathCommitLog=/usr/local/alibaba-rocketmq/store/commitlog
#消費隊列存儲路徑存儲路徑
storePathConsumeQueue=/usr/local/alibaba-rocketmq/store/consumequeue
#消息索引存儲路徑
storePathIndex=/usr/local/alibaba-rocketmq/store/index
#checkpoint 文件存儲路徑
storeCheckpoint=/usr/local/alibaba-rocketmq/store/checkpoint
#abort 文件存儲路徑
abortFile=/usr/local/alibaba-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
Broker集群部署有幾種不同的方式。這里的Slave不可寫,但可讀,類似于MySQL的主備方式。
這種方式風險較大,一旦Broker重啟或者宕機時,會導致整個服務不可用,不建議線上環境使用
一個集群無Slave,全是Master,例如2個Master或者3個Master。
brokerName | brokerId | brokerRole | IP地址 |
---|---|---|---|
broker-a | 0 | ASYNC_MASTER | 192.168.1.101 |
broker-b | 0 | ASYNC_MASTER | 192.168.1.102 |
優點:
配置簡單,單個Master宕機或重啟維護對應用無影響,在磁盤配置為RAID10時,即使機器宕機不可恢復情況下,由于RAID10磁盤非常可靠,消息也不會丟失(異步刷盤丟失少量消息,同步刷盤一條不丟)。性能最高。缺點:
單臺機器宕機期間,這臺機器上未被消費的消息在機器恢復之前不可訂閱,消息實時性會受到影響。
啟動步驟:
第一步:先啟動NameServer集群
第二步:在192.168.1.101,啟動第一個Master
nohup sh mqbroker -c $ROCKETMQ_HOME/conf/2m-noslave/broker-a.properties >/dev/null 2>&1 &
tail -f -n 500 $ROCKETMQ_HOME/logs/rocketmqlogs/broker.log
第三步:在192.168.1.102,啟動第二個Master
nohup sh mqbroker -c $ROCKETMQ_HOME/conf/2m-noslave/broker-b.properties >/dev/null 2>&1 &
tail -f -n 500 $ROCKETMQ_HOME/logs/rocketmqlogs/broker.log
每個Master配置一個Slave,有多對Master-Slave,HA采用異步復制方式,主備有短暫消息延遲,毫秒級。
brokerName | brokerId | brokerRole | IP地址 |
---|---|---|---|
broker-a | 0 | ASYNC_MASTER | 192.168.1.101 |
broker-a | 1 | SLAVE | 192.168.1.102 |
broker-b | 0 | ASYNC_MASTER | 192.168.1.103 |
broker-b | 1 | SLAVE | 192.168.1.104 |
優點:即使磁盤損壞,消息丟失的非常少,且消息實時性不會受影響,因為Master 宕機后,消費者仍然可以從Slave消費,此過程對應用透明。不需要人工干預。性能同多 Master 模式幾乎一樣。
缺點:Master宕機,磁盤損壞情況,會丟失少量消息。
啟動步驟
第一步:先啟動NameServer集群
第二步:在192.168.1.101,啟動第一個Master
nohup sh mqbroker -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-a.properties >$ROCKETMQ_HOME/log/mq.log >/dev/null 2>&1 &
tail -f -n 500 $ROCKETMQ_HOME/logs/rocketmqlogs/broker.log
第三步:在192.168.1.102,啟動第一個Slave
nohup sh mqbroker -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-a-s.properties >$ROCKETMQ_HOME/log/mq.log >/dev/null 2>&1 &
tail -f -n 500 $ROCKETMQ_HOME/logs/rocketmqlogs/broker.log
第四步:在192.168.1.103,啟動第二個Master
nohup sh mqbroker -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-b.properties >$ROCKETMQ_HOME/log/mq.log >/dev/null 2>&1 &
tail -f -n 500 $ROCKETMQ_HOME/logs/rocketmqlogs/broker.log
第五步:在機器 192.168.1.104,啟動第二個Slave
nohup sh mqbroker -c $ROCKETMQ_HOME/conf/2m-2s-async/broker-b-s.properties >$ROCKETMQ_HOME/log/mq.log >/dev/null 2>&1 &
每個Master配置一個Slave,有多對Master-Slave,HA采用同步雙寫方式,主備都寫成功,向應用才返回成功。 brokerName |
brokerId | brokerRole | IP地址 |
---|---|---|---|
broker-a | 0 | SYNC_MASTER | 192.168.1.101 |
broker-a | 1 | SLAVE | 192.168.1.102 |
broker-b | 0 | SYNC_MASTER | 192.168.1.103 |
broker-b | 1 | SLAVE | 192.168.1.104 |
優點:數據與服務都無單點,Master宕機情況下,消息無延遲,服務可用性與數據可用性都非常高。
缺點:性能比異步復制模式略低,大約低10%左右,發送單個消息的RT會略高。目前主宕機后,備機不能自動切換為主機,后續會支持自動切換功能。
啟動步驟:
第一步:先啟動NameServer集群
第二步:在192.168.1.101,啟動第一個Master
nohup sh mqbroker -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-a.properties >$ROCKETMQ_HOME/log/mq.log >/dev/null 2>&1 &
tail -f -n 500 $ROCKETMQ_HOME/logs/rocketmqlogs/broker.log
第三步:在192.168.1.102,啟動第一個Slave
nohup sh mqbroker -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-a-s.properties >$ROCKETMQ_HOME/log/mq.log >/dev/null 2>&1 &
tail -f -n 500 $ROCKETMQ_HOME/logs/rocketmqlogs/broker.log
第四步:在192.168.1.103,啟動第二個Master
nohup sh mqbroker -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-b.properties >$ROCKETMQ_HOME/log/mq.log >/dev/null 2>&1 &
tail -f -n 500 $ROCKETMQ_HOME/logs/rocketmqlogs/broker.log
第五步:在192.168.1.104,啟動第二個Slave
nohup sh mqbroker -c $ROCKETMQ_HOME/conf/2m-2s-sync/broker-b-s.properties >$ROCKETMQ_HOME/log/mq.log >/dev/null 2>&1 &
tail -f -n 500 $ROCKETMQ_HOME/logs/rocketmqlogs/broker.log
注意事項:以上Broker與Slave配對是通過指定相同的brokerName參數來配對,Master的 BrokerId必須是0,Slave的BrokerId必須是大于0的數。另外一個Master下面可以掛載多個Slave,同一Master下的多個Slave 通過指定不同的BrokerId來區分。
1、異步復制和同步雙寫總結
2、集群方式對比
集群方式 | 運維特點 | 消息可靠性(master宕機情況) | 服務可用性(master宕機情況) | 其他特點 | 備注 |
---|---|---|---|---|---|
單Master | 結構簡單,擴容方便,機器要求低 | 同步刷盤消息一條都不會丟 | 整體可用,未被消費的消息無法取得,影響實時性 | 性能最高 | |
多Master | 異步有毫秒級丟失,同步雙寫不丟失 | 差評,主備不能自動切換,且備機只能讀不能寫,會造成服務整體不可寫 | 不考慮,除非自己提供主從切換的方案 | ||
Master-Slave(異步復制) | 結構復雜,擴容方便 | 故障時會丟失消息 | 整體可用,實時性影響毫秒級別 | ||
該組服務只能讀不能寫 | 性能很高 | 適合消息可靠性中等,實時性中等的要求 | |||
Master-Slave(同步雙寫) | 結構復雜,擴容方便 | 不丟消息 | 整體可用,不影響實時性,該組服務只能讀不能寫 | 性能比異步低10%,所以實時性也并不比異步方式太高 | 適合消息可靠性略高,實時性中等、性能要求不高的需求 |
RocketMQ高可用演練場景
項目 | 發送消息 | 發送消息過程中 | 接收消費消息 |
---|---|---|---|
停用一個namesrv | 不影響通信 | 不影響通信 | 不影響通信 |
停用全部namesrv | 影響通信 | 不影響通信 | 影響通信,啟動任意的namesrv可恢復 |
停用單個master broker | 不影響通信 | 不影響通信 | 不影響通信 |
停用全部master broker | 影響通信 | 影響通信,無法恢復 | 影響通信 |
停用一個slave broker | 不影響通信 | 不影響通信 | 不影響通信 |
停用全部slave broker | 不影響通信 | 影響通信,數秒恢復 | 不影響通信,數秒恢復 |
下面的是我的公眾號二維碼,歡迎關注。文章轉載請注明出處www.leexide.com
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。