日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RocketMQ初探(五)之RocketMQ4.2.6集群部署(单Master+双Master+2m+2s+async异步复制)

發布時間:2023/12/18 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RocketMQ初探(五)之RocketMQ4.2.6集群部署(单Master+双Master+2m+2s+async异步复制) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  以下部署方式結合眾多博友的博客,經過自己一步一步實際搭建,如有雷同,侵權行為,請見諒。。。其中遇到不少的坑,希望能幫到更多的人,現在很少能找到一份完整版4.2.6版本的搭建教程了,如果你有幸遇見,那么我們必定前世有緣。進入正題……

  首先,官方推薦有三種部署方式:  

多Master模式(2m-noslave)

一個集群無Slave,全是Master,例如2個Master或者3個Master
優點:配置簡單,單個Master宕機或重啟維護對應用無影響,在磁盤配置為RAID10時,即使機器宕機不可恢復情況下,由于RAID10磁盤非常可靠,消息也不會丟(異步刷盤丟失少量消息,同步刷盤一條不丟)。性能最高。
缺點:單臺機器宕機期間,這臺機器上未被消費的消息在機器恢復之前不可訂閱,消息實時性會受到受到影響。

多Master多Slave模式,異步復制(2m-2s-async)

每個Master配置一個Slave,有多對Master-Slave,HA采用異步復制方式,主備有短暫消息延遲,毫秒級。
優點:即使磁盤損壞,消息丟失的非常少,且消息實時性不會受影響,因為Master宕機后,消費者仍然可以從Slave消費,此過程對應用透明。不需要人工干預。性能同多Master模式幾乎一樣。
缺點:Master宕機,磁盤損壞情況,會丟失少量消息。

多Master多Slave模式,同步雙寫(2m-noslave)

每個Master配置一個Slave,有多對Master-Slave,HA采用同步雙寫方式,主備都寫成功,向應用返回成功。
優點:數據與服務都無單點,Master宕機情況下,消息無延遲,服務可用性與數據可用性都非常高
缺點:性能比異步復制模式略低,大約低10%左右,發送單個消息的RT會略高。目前主宕機后,備機不能自動切換為主機,后續會支持自動切換功能。

注意:

1、上述“2”只是說作為一個集群的最低配置數量,可以根據實際情況擴展。

2、所有的刷盤(Dish?Flush)操作全部默認為:ASYNC_FLUSH(異步刷盤)。

核心概念:

  Disk?Flush(磁盤刷新/同步操作):就是將內存的數據落地,存儲在磁盤中。

  RocketMQ提供了以下兩種模式:

?  SYNC_FLUSH(同步刷盤):生產者發送的每一條消息都在保存到磁盤成功后才返回告訴生產者成功。這種方式不會存在消息丟失的問題,但是有很大的磁盤IO開銷,性能有一定影響。?? ? ? ? ? ? ? ?     ?   ASYNC_FLUSH(異步刷盤):生產者發送的每一條消息并不是立即保存到磁盤,而是暫時緩存起來,然后就返回生產者成功。隨后再異步的將緩存數據保存到磁盤,有兩種情況:1是定期將緩存中更新的數據進行刷盤,2是當緩存中更新的數據條數達到某一設定值后進行刷盤。這種方式會存在消息丟失(在還未來得及同步到磁盤的時候宕機),但是性能很好。默認是這種模式。

  • Broker?Replication(Broker間數據同步/復制):集群環境下需要部署多個Broker,Broker分為兩種角色:一種是master,即可以寫也可以讀,其brokerId=0,只能有一個;另外一種是slave,只允許讀,其brokerId為非0。一個master與多個slave通過指定相同的brokerName被歸為一個broker?set(broker集)。通常生產環境中,我們至少需要2個broker?set。Broker?Replication只的就是slave獲取或者是復制master的數據。
  • Sync?Broker:生產者發送的每一條消息都至少同步復制到一個slave后才返回告訴生產者成功,即“同步雙寫”。
  • Async?Broker:生產者發送的每一條消息只要寫入master就返回告訴生產者成功。然后再“異步復制”到slave。

環境:

JDK1.8? ? java?version?"1.8.0_171"? +虛擬機2臺(至少)+rocketmq-all-4.2.0-bin-release.zip

?

1、單Master

#?unzip?-o?rocketmq-all-4.2.0-bin-release.zip?-d?rocketmq1??(需要指定目錄)

#?cd?/ulic/rocketmq1

#?nohup?sh?bin/mqnamesrv?&? ? ? ? ? ? ?         #啟動namesrv

#?tail?-f?~/logs/rocketmqlogs/namesrv.log?

?

#?nohup?sh?bin/mqbroker?-n?10.18.3.21:9876?&    #啟動broker

#?tail?-f?~/logs/rocketmqlogs/broker.log

#?jps?                         ? # 檢查是否成功啟動namesrv和broker

注意:啟動mqbroker時需要確保主機有足夠的內存,官方默認設置的-Xms8g?-Xmx8g?-Xmn4g都比較大;

runBroker.sh中更改

JAVA_OPT="${JAVA_OPT}?-server?-Xms512m -Xmx512m -Xmn256m"

runserver.sh中更改:

JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

 停止命令: (啟動先namesrv,再broker;停止先broker,再namesrv)

  sh?bin/mqshutdown?broker

  sh?bin/mqshutdown?namesrv

2、雙Master

序號  ip   ? ? ? ? ?用戶名 ? ?密碼      角色        ????  ?模式

(1) 10.43.98.34  ??root   ??   nameServer1,brokerServer1 ??Master1

(2) 10.43.98.38  ?root    ?  ?nameServer1,brokerServer1 ??Master2

?

1、Host添加信息

兩臺機器都執行vi??/etc/hosts,將nameServerbroker部署在同一臺機器上的,也可以分開部署。  輸入如下圖所示的信息

?

重啟網卡:service?network?restart(可省略)

?

相互ping一下,在34機器上ping??10.43.98.38??

?

#?ping??rocketmq-nameserver2??

?

#?ping??rocketmq-master2

?

  2、創建數據存儲路徑(兩臺機器都要創建)(為方便后面集群部署,最好設置,不設置也可以成功部署)

任意你想設置保存位置的目錄下來存儲產生的數據的,我是/rocketmq1目錄下

mkdir?store

mkdir?store/commitlog

mkdir store/consumerqueue

mkdir store/index

  3、修改confRocketMQ的配置文件:(34機器)broker-a.properties? (38機器)broker-b.properties

brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=0
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH

brokerClusterName=DefaultCluster
brokerName=broker-b
brokerId=0

namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH

主要配置這些也可以,詳細可以自行根據需要補全,比如文件保存路徑配置等……?

  詳細配置文件可參考:  

#所屬集群名字 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 #刪除文件時間點,默認凌晨 0點 deleteWhen=00 #文件保留時間,默認 48 小時 fileReservedTime=120 #commitLog每個文件的大小默認1G mapedFileSizeCommitLog=1073741824 #ConsumeQueue每個文件默認存30W條,根據業務情況調整 mapedFileSizeConsumeQueue=300000 #destroyMapedFileIntervalForcibly=120000 #redeleteHangedFileInterval=120000 #檢測物理文件磁盤空間 diskMaxUsedSpaceRatio=88 #存儲路徑 storePathRootDir=/opt/rocketmq/data #commitLog 存儲路徑 storePathCommitLog=/opt/rocketmq/data/commitlog #消費隊列存儲路徑存儲路徑 storePathConsumeQueue=/opt/rocketmq/data/consumequeue #消息索引存儲路徑 storePathIndex=/opt/rocketmq/data/index #checkpoint 文件存儲路徑 storeCheckpoint=/opt/rocketmq/data/checkpoint #abort 文件存儲路徑 abortFile=/opt/rocketmq/data/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

  因為有兩個master主節點,所以主節點1啟動依賴broker-a.properties,主節點2啟動依賴broker-b.properties,如果是三個Master,那么還會有一個broker-c.properties,以此類推。brokerId=0表示是master,大于0則表示是slave

  另外BrokerName=broker-a要對應;在34機器上是broker-a,在第二臺機器38上則是broker-b。分別在3438上修改broker-a.propertiesbroker-b.properties

namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876。這個要和之前配置的名稱相互對應。

3、修改日志配置文件(略,可參考)

  修改日志配置文件

  在創建的軟連接文件夾rocketmq下創建一個logs目錄?mkdir?/opt/rocketmq/logs

?

  然后執行cd?/opt/rocketmq/conf?&&?sed?-i?'s#${user.home}#/opt/rocketmq#g'?*.xml進行日志文件的替換,sedlinux的替換命令。兩臺機器同樣操作。

4、修改啟動腳本參數(JVM參數的調優)

1broker的調優

vi?/opt/rocketmq/bin/runbroker.sh

JAVA_OPT="${JAVA_OPT}?-server?-Xms512m?-Xmx512m?-Xmn256m?-?XX:PermSize=128m?-XX:MaxPermSize=320m"

2nameserver的調優

vi?/opt/rocketmq/bin/runserver.sh

JAVA_OPT="${JAVA_OPT}?-server?-Xms512m?-Xmx512m?-Xmn256m?-?XX:PermSize=128m?-XX:MaxPermSize=320m"

nameServerbroker放在了同一臺機器上,所以需要分別對nameServerbroker進行jvm的性能調優。生產環境默認即可不要修改

  啟動兩臺機器的NameServer:先啟動兩臺機器的NameServer,再啟動兩臺機器的Borker,關機的時候順序相反,先關閉兩臺機器的Broker,再關閉兩臺機器的Nameserver

#?cd?/opt/rocketmq/bin

#?nohup?sh?mqnamesrv?&

上面這條命令nohup是起一個守護線程。

#?jps?查看進程

#?tail?-f?-n?500?/opt/rocketmq/logs/rocketmqlogs/broker.log

#?tail?-f?-n?500?/opt/rocketmq/logs/rocketmqlogs/namesrv.log

mqadnin是管理員命令,mqfiltersrvrocketmq的單獨組件,mqnamesrvNameServermqbrokerBroker

?啟動BrokerServer?A?10.43.98.34BrokerServer?B?10.43.98.38

?

啟動BrokerServer?A?10.43.98.34

#?nohup?sh?mqbroker?-c?/opt/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

?

啟動BrokerServer?B?10.43.98.38

nohup?sh?mqbroker?-c?/opt/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

?

  成功啟動后,通過mqadmin命令或者rocketmq-console監控界面查看,是否部署成功。。。

3、雙Master+雙Slave-Async

  實際可以準備4臺服務器,每臺上面部署1個;

  參考:RocketMQ環境搭建(雙master雙slave模式)

  因資源有限,同一臺機器部署兩個節點,broker-a的主節點與broker-b的從節點部署在一臺服務器,broker-a的從節點與broker-b的主節點部署在一臺服務器(交叉部署實現HA)

注:同一臺機器部署兩個broker時,一定要注意,在配置文件中配置:

若原broker-a.properties中配置:

listenPort=10911??//默認

storePathRootDir=/opt/logs/rocketmqlogs/store?
storePathCommitLog=/opt/logs/rocketmqlogs/store?/commitlog?//日志存放目錄

broker-b-s.properties中配置(不能有沖突)

listenPort=10915?//默認:10911?更改端口號,同一臺機器上兩個broker不可采用同一端口,且端口號間隔2個以上(經測試10913不可啟動)

storePathRootDir=/opt/logs/rocketmqlogs/store-b-s??
storePathCommitLog=/opt/logs/rocketmqlogs/store-b-s?/commitlog?//日志存放目錄

?

不然,會發現1臺機器只能啟動一個broker。。。。

主:192.168.151.131???從?192.168.151.132

1.?修改主從hosts文件

????vi?/etc/hosts??加入

????192.168.153.131??rocketmq.master
????192.168.153.132??rocketmq.slave

2.?修改mq配置文件采用異步復制??2m-2s-async

192.168.151.131?上的配置

(1)broker-a.properties(broker-a的master配置)

namesrvAddr=rocketmq.master:9876;rocketmq.slave:9876????//所關聯的namesrv地址

brokerClusterName=FusionCluster?????//集群名稱
brokerName=broker-a?
brokerId=0?????????????????//0代表主
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER?????????????//角色
flushDiskType=ASYNC_FLUSH???????????//異步刷盤
storePathRootDir=/opt/logs/rocketmqlogs/store??
storePathCommitLog=/opt/logs/rocketmqlogs/store/commitlog?//日志存放目錄

(2)broker-b-s.properties(broker-b的slave配置)

namesrvAddr=rocketmq.master:9876;rocketmq.slave:9876
brokerClusterName=FusionCluster
brokerName=broker-b
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
listenPort=10913???//更改端口號,同一臺機器上兩個broker不可采用同一端口

storePathRootDir=/opt/logs/rocketmqlogs/store??
storePathCommitLog=/opt/logs/rocketmqlogs/store/commitlog

192.168.151.132?上的配置

?1、修改hosts文件

????vi?/etc/hosts??加入

????192.168.153.131??rocketmq.master
????192.168.153.132??rocketmq.slave

?

(1)broker-b.properties(broker-b的master配置)

namesrvAddr=rocketmq.master:9876;rocketmq.slave:9876
brokerClusterName=FusionCluster
brokerName=broker-b
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
storePathRootDir=/opt/logs/rocketmqlogs/store??
storePathCommitLog=/opt/logs/rocketmqlogs/store/commitlog?//日志存放目錄

(2)broker-a-s.properties(broker-a的slave配置)

namesrvAddr=rocketmq.master:9876;rocketmq.slave:9876
brokerClusterName=FusionCluster
brokerName=broker-a
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH
listenPort=10915

storePathRootDir=/opt/logs/rocketmqlogs/store??
storePathCommitLog=/opt/logs/rocketmqlogs/store/commitlog

注意:?這里將broker-a和broker-b的主從分別放到不同的機器上啟動是為了保證當與一臺機器宕機時,另一臺可繼續工作。

?

3.啟動服務

?????????192.168.153.131

?????????sed?-i??'s#${user.home}#/opt#g'??*.xml???????//將conf目錄下所有xml文件中的${user.home}替換成/opt,進入rocketmq/conf目錄下執行該命令

?????????mqnamesrv?&??啟動nameservice

?????????mqbroker???-c???/opt/alibaba-rocketmq/conf/2m-2s-async/broker-a.properties?&???????????//啟動broker-a主

?????????mqbroker???-c???/opt/alibaba-rocketmq/conf/2m-2s-async/broker-b-s.properties?&??????//啟動broker-b從??

????????192.168.153.132

?????????sed?-i??'s#${user.home}#/opt#g'??*.xml???????//將conf目錄下所有xml文件中的${user.home}替換成/opt,進入rocketmq/conf目錄下執行該命令

?????????mqnamesrv?&??啟動nameservice

?????????mqbroker???-c???/opt/alibaba-rocketmq/conf/2m-2s-async/broker-b.properties?&???????????//啟動broker-b主

?????????mqbroker???-c???/opt/alibaba-rocketmq/conf/2m-2s-async/broker-a-s.properties?&???????//啟動broker-a從?

4.到此已經完成,可以發布rocketmq-console項目來查看mq的信息和配置。?

?????????創建一個topic到兩個broker上

??????????mqadmi??updateTopic?-c?FusionCluster??-b?192.168.153.131:10911???-t?testbroker

?????????mqadmi??updateTopic?-c?FusionCluster??-b?192.168.153.132:10911???-t?testbroker

?

轉載于:https://www.cnblogs.com/buyige/p/9454634.html

總結

以上是生活随笔為你收集整理的RocketMQ初探(五)之RocketMQ4.2.6集群部署(单Master+双Master+2m+2s+async异步复制)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。