49.RocketMQ 雙主搭建(本文非EamonSec原創)

聲明:本文非EamonSec原創,copy自網上下載的某個個文件sql

1RocketMQ介紹

1.1. 簡介

RocketMQ 是一款分佈式、隊列模型的消息中間件,具備如下特色:vim

  • 可以保證嚴格的消息順序
  • 提供豐富的消息拉取模式
  • 高效的訂閱者水平擴展能力
  • 實時的消息訂閱機制
  • 億級消息堆積能力

選用理由:服務器

  • 強調集羣無單點,可擴展,任意一點高可用,水平可擴展。
  • 海量消息堆積能力,消息堆積後,寫入低延遲。
  • 支持上萬個隊列
  • 消息失敗重試機制
  • 消息可查詢
  • 開源社區活躍
  • 成熟度(通過雙十一考驗)

1.2. 關鍵概念

1.2.1. 主題與標籤

主題Tpoic:第一級消息類型,書的標題異步

標籤Tags:第二級消息類型,書的目錄,能夠基於Tag作消息過濾分佈式

例如:性能

主題:spa

訂單交易線程

標籤:code

訂單交易-建立server

訂單交易-付款

訂單交易-完成

 

1.2.2. 發送與訂閱羣組

  

 

 

生產組:用於消息的發送。

消費組:用於消息的訂閱處理。

生產組和消費組,方便擴縮機器,增減處理能力,集羣組的名字,用於標記用

途中的一員。每次只會隨機的發給每一個集羣中的一員。

2RocketMQ集羣方式

推薦的幾種 Broker 集羣部署方式,這裏的Slave 不可寫,但可讀,相似於 Mysql

主備方式。

2.1. 單個 Master

這種方式風險較大,一旦Broker

重啓或者宕機時,會致使整個服務不可用,不建議線上環境使用。

2.2.  Master 模式

一個集羣無 Slave,全是 Master,例如 2  Master 或者 3  Master

優勢:配置簡單,單個Master 宕機或重啓維護對應用無影響,在磁盤配置爲

RAID10 時,即便機器宕機不可恢復狀況下,由與 RAID10

磁盤很是可靠,消息也不會丟(異步刷盤丟失少許消息,同步刷盤一條不丟)

。性能最高。

缺點:單臺機器宕機期間,這臺機器上未被消費的消息在機器恢復以前不可訂

閱,消息實時性會受到受到影響。

 先啓動 NameServer

 在機器 A,啓動第一個 Master

 在機器 B,啓動第二個 Master

2.3.  Master  Slave 模式,異步複製

每一個 Master 配置一個 Slave,有多對Master-SlaveHA

採用異步複製方式,主備有短暫消息延遲,毫秒級。

優勢:即便磁盤損壞,消息丟失的很是少,且消息實時性不會受影響,由於

Master 宕機後,消費者仍然能夠從 Slave

消費,此過程對應用透明。不須要人工干預。性能同多 Master 模式幾乎同樣。

缺點:Master 宕機,磁盤損壞狀況,會丟失少許消息。

 先啓動 NameServer

 在機器 A,啓動第一個 Master

 在機器 B,啓動第二個 Master

 在機器 C,啓動第一個 Slave

 在機器 D,啓動第二個 Slave

2.4.  Master  Slave 模式,同步雙寫

每一個 Master 配置一個 Slave,有多對Master-SlaveHA

採用同步雙寫方式,主備都寫成功,嚮應用返回成功。

優勢:數據與服務都無單點,Master宕機狀況下,消息無延遲,服務可用性與

數據可用性都很是高

缺點:性能比異步複製模式略低,大約低 10%左右,發送單個消息的 RT

會略高。目前主宕機後,備機不能自動切換爲主機,後續會支持自動切換功能

 先啓動 NameServer

 在機器 A,啓動第一個 Master

 在機器 B,啓動第二個 Master

 在機器 C,啓動第一個 Slave

 在機器 D,啓動第二個 Slave

以上 Broker  Slave 配對是經過指定相同的brokerName 參數來配對,Master

 BrokerId 必須是 0Slave BrokerId 必須是大與 0 的數。另一個 Master

下面能夠掛載多個 Slave,同一 Master 下的多個 Slave經過指定不一樣的 BrokerId

來區分。

 

3RocketMQ部署【雙Master方式】

 

3.1. 服務器環境

 

3.2. Hosts添加信息

3.3. 上傳解壓【兩臺機器】

 

上傳alibaba-rocketmq-3.2.6.tar.gz文件至/usr/local

 

tar -zxvf alibaba-rocketmq-3.2.6.tar.gz -C /usr/local

 

mv alibaba-rocketmq alibaba-rocketmq-3.2.6

 

ln -s alibaba-rocketmq-3.2.6 rocketmq

 

ll /usr/local

 

3.4. 建立存儲路徑【兩臺機器】

 

mkdir /usr/local/rocketmq/store

 

mkdir /usr/local/rocketmq/store/commitlog

 

mkdir /usr/local/rocketmq/store/consumequeue

 

mkdir /usr/local/rocketmq/store/index

 

3.5. RocketMQ配置文件【兩臺機器】

 

vim /usr/local/rocketmq/conf/2m-noslave/broker-a.properties

 

vim /usr/local/rocketmq/conf/2m-noslave/broker-b.properties

 

#所屬集羣名字
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/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
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

 

 

3.7.  修改啓動腳本參數 【 兩臺機器 

 # vim /usr/local/rocketmq/bin/runbroker.sh

#============================================================
==================
# 開發環境JVM Configuration
#============================================================
==================
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m -
XX:PermSize=128m -XX:MaxPermSize=320m"

# vim /usr/local/rocketmq/bin/runserver.sh

JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m -
XX:PermSize=128m -XX:MaxPermSize=320m"

 

 

3.8.  啓動NameServer 【 兩臺機器】

# cd /usr/local/rocketmq/bin
# nohup sh mqnamesrv &

 

3.9.  啓動BrokerServer A 【192.168.100.24】

# 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

 

3.10.  啓動BrokerServer B 【192.168.100.25 】

# 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

3.11. RocketMQ Console

 

3.12. 數據清理

# cd /usr/local/rocketmq/bin
# sh mqshutdown broker
# sh mqshutdown namesrv
# --等待中止
# rm -rf /usr/local/rocketmq/store
# mkdir /usr/local/rocketmq/store
# mkdir /usr/local/rocketmq/store/commitlog
# mkdir /usr/local/rocketmq/store/consumequeue
# mkdir /usr/local/rocketmq/store/index
# --按照上面步驟重啓NameServer與BrokerServer
相關文章
相關標籤/搜索