百萬(wàn)級(jí)消息的RocketMQ 如何線上平滑升級(jí)媚狰?

一、背景

1阔拳、各業(yè)務(wù)系統(tǒng)持續(xù)迭代過(guò)程中崭孤,JDK、SpringBoot糊肠、RocketMQ Client 等框架也進(jìn)行了升級(jí)辨宠,高版本的 RocketMQ Client 發(fā)送的消息到低版本中,在控制臺(tái)中午無(wú)法查看消息明細(xì)货裹,致使業(yè)務(wù)日常排查問(wèn)題等相當(dāng)困難嗤形。

2、原業(yè)務(wù)端發(fā)送消息與本地事務(wù)很難做到一致性弧圆,要保障不丟失數(shù)據(jù)和數(shù)據(jù)不一致開發(fā)成本非常高派殷,RocketMQ V4.4 版本增加了事務(wù)消息还最,引入事務(wù)消息后可大大降低實(shí)現(xiàn)這一特性的難度。

3毡惜、我們對(duì) MQ 的依賴越來(lái)越強(qiáng)拓轻,MQ 的重要性和穩(wěn)定性都已經(jīng)可以和 DB 相當(dāng)了,而 V4.x 版本增加了更多的新特性和監(jiān)控手段经伙,可以使我們更好的監(jiān)控 MQ 的使用情況扶叉。

4、V4.x 版本由 Alibaba 維護(hù)移交到了 Apache 社區(qū)并有他進(jìn)行維護(hù)帕膜,促使使用范圍更廣枣氧,也有更多的參與者參與進(jìn)來(lái),可靠性和及時(shí)響應(yīng)性有了更高的保障垮刹。

5达吞、新版本在吞吐率和對(duì)新的技術(shù)有了更好的支持,基于上述這些因素荒典,我們考慮將 MQ 進(jìn)行版本升級(jí)與改造酪劫。

6、RocketMQ (V3_2_6 -> V4.6.0)線上平滑升級(jí)

二寺董、流程

因業(yè)務(wù)特性需求覆糟,對(duì)當(dāng)前RocketMQ 集群進(jìn)行不停機(jī)版本迭代升級(jí),步驟如下遮咖。

請(qǐng)升級(jí)的架構(gòu)師詳細(xì)查看文檔滩字,進(jìn)行查漏補(bǔ)缺以免造成不可挽回的事故

下面是此次升級(jí)使用的基礎(chǔ)資料:

官方文檔

https://rocketmq.apache.org/docs/quick-start/

https://rocketmq.apache.org/dowloading/releases/

Dledger 快速搭建指南:

https://github.com/apache/rocketmq/blob/master/docs/cn/dledger/quick_start.md

Apache RocketMQ 開發(fā)者指南:

https://github.com/apache/rocketmq/tree/master/docs/cn

升級(jí)前一定要熟讀的兩個(gè)架構(gòu)圖:

1、消息存儲(chǔ)

image.png

2御吞、消息刷盤

image.png

三麦箍、前期準(zhǔn)備

1、當(dāng)前環(huán)境版本狀態(tài)

DEV: http://10.0.254.191:7080/ V3_5_8 2m

TEST: http://10.185.240.76:8081/ V3_5_8 2m

PRO:http://rocketmq.pro.siku.cn/ admin/secoo V3_2_6 2m

2陶珠、每個(gè)版本組件支持的jre環(huán)境

Version Client Broker NameServer
4.0.0-incubating >=1.7 >=1.8 >=1.8
4.1.0-incubating >=1.6 >=1.8 >=1.8
4.2.0 >=1.6 >=1.8 >=1.8
4.3.x >=1.6 >=1.8 >=1.8
4.4.x >=1.6 >=1.8 >=1.8
4.5.x >=1.6 >=1.8 >=1.8
4.6.x >=1.6 >=1.8 >=1.8

4挟裂、升級(jí)時(shí)使用到的命令集合

啟動(dòng)
nohup sh bin/mqnamesrv &
nohup sh bin/mqbroker  -c conf/2m-noslave/broker-b.properties &
 
broker的寫權(quán)限關(guān)閉
bin/mqadmin updateBrokerConfig -b 192.168.x.x:10911 -n 192.168.x.x:9876 -k brokerPermission -v 4
 
恢復(fù)該節(jié)點(diǎn)的寫權(quán)限
bin/mqadmin updateBrokerConfig -b 192.168.x.x:10911 -n 192.168.x.x:9876 -k brokerPermission -v 6
 
 
停止
bin/mqshutdown broker
bin/mqshutdown namesrv
 
 
查看集群信息,集群背率、BrokerName、BrokerId嫩与、TPS等信息
./bin/mqadmin clusterList -n localhost:9876
 
 
 
 
獲取全部topic
./bin/mqadmin topicList -n localhost:9876 -c DevCluster > topiclist
 
 
獲取topic 路由信息
./bin/mqadmin topicRoute -t demo-cluster -n localhost:9876
 
 
 
 
獲取topic offset
./bin/mqadmin topicStatus -t demo-cluster -n localhost:9876
 
 
 
 
打印Topic訂閱關(guān)系寝姿、TPS、積累量划滋、24h讀寫總量等信息
./bin/mqadmin statsAll  -n localhost:9876
 
 
 
 
修改broker 參數(shù)
./bin/mqadmin updateBrokerConfig -n localhost:9876 -b 10.0.xxx.2:10911 -k waitTimeMillsInSendQueue -v 500 -c TestCluster
 
 
發(fā)送消息
./bin/mqadmin sendMessage -n localhost:9876 -t lqtest -p "this is test"
 
 
 
 
消費(fèi)
./bin/mqadmin consumeMessage -n localhost:9876 -t lqtest

5饵筑、官方版本特性收集

這里只標(biāo)注了下重要的特性,有興趣的可以查看 http://rocketmq.apache.org/release_notes/

4.0.0 (INCUBATING) 變?yōu)锳pache

4.4.0 支持消息軌跡 处坪、支持ACL

4.5.0 引入Dledger 的多副本技術(shù)

6根资、新集群4.6.0 集群模型選擇

  1. 單Master模式

    這種方式風(fēng)險(xiǎn)較大架专,一旦Broker重啟或者宕機(jī)時(shí),會(huì)導(dǎo)致整個(gè)服務(wù)不可用玄帕。不建議線上環(huán)境使用,可以用于本地測(cè)試部脚。

  1. 多Master模式

    一個(gè)集群無(wú)Slave,全是Master裤纹,例如2個(gè)Master或者3個(gè)Master委刘,這種模式的優(yōu)缺點(diǎn)如下:

    優(yōu)點(diǎn):配置簡(jiǎn)單,單個(gè)Master宕機(jī)或重啟維護(hù)對(duì)應(yīng)用無(wú)影響鹰椒,在磁盤配置為RAID10時(shí)锡移,即使機(jī)器宕機(jī)不可恢復(fù)情況下,由于RAID10磁盤非称峒剩可靠淆珊,消息也不會(huì)丟(異步刷盤丟失少量消息,同步刷盤一條不丟)奸汇,性能最高施符;

    缺點(diǎn):?jiǎn)闻_(tái)機(jī)器宕機(jī)期間,這臺(tái)機(jī)器上未被消費(fèi)的消息在機(jī)器恢復(fù)之前不可訂閱茫蛹,消息實(shí)時(shí)性會(huì)受到影響操刀。

  1. 多Master多Slave模式-異步復(fù)制

    每個(gè)Master配置一個(gè)Slave,有多對(duì)Master-Slave婴洼,HA采用異步復(fù)制方式骨坑,主備有短暫消息延遲(毫秒級(jí)),這種模式的優(yōu)缺點(diǎn)如下:

    優(yōu)點(diǎn):即使磁盤損壞柬采,消息丟失的非常少欢唾,且消息實(shí)時(shí)性不會(huì)受影響,同時(shí)Master宕機(jī)后粉捻,消費(fèi)者仍然可以從Slave消費(fèi)礁遣,而且此過(guò)程對(duì)應(yīng)用透明,不需要人工干預(yù)肩刃,性能同多Master模式幾乎一樣祟霍;

    缺點(diǎn):Master宕機(jī),磁盤損壞情況下會(huì)丟失少量消息盈包。

  1. 多Master多Slave模式-同步雙寫(參考當(dāng)前業(yè)務(wù)與并發(fā)度沸呐,選擇此集群模式)

    每個(gè)Master配置一個(gè)Slave,有多對(duì)Master-Slave呢燥,HA采用同步雙寫方式崭添,即只有主備都寫成功,才向應(yīng)用返回成功叛氨,這種模式的優(yōu)缺點(diǎn)如下:

    優(yōu)點(diǎn):數(shù)據(jù)與服務(wù)都無(wú)單點(diǎn)故障呼渣,Master宕機(jī)情況下棘伴,消息無(wú)延遲,服務(wù)可用性與數(shù)據(jù)可用性都非常高屁置;

    缺點(diǎn):性能比異步復(fù)制模式略低(大約低10%左右)焊夸,發(fā)送單個(gè)消息的RT會(huì)略高,且目前版本在主節(jié)點(diǎn)宕機(jī)后缰犁,備機(jī)不能自動(dòng)切換為主機(jī)

請(qǐng)結(jié)合自己的集群特點(diǎn)和穩(wěn)定性進(jìn)行選擇升級(jí)淳地,不一定最新的集群模式就是最適合你們得。一定要把平滑升級(jí)放在首位帅容。

7颇象、TOPIC 整理

可以寫個(gè)腳本整理現(xiàn)有topic 目錄,在升級(jí)完成后對(duì)topic 列表和分區(qū)進(jìn)行整理校對(duì)并徘。

因?yàn)閠opic在rocketmq的設(shè)計(jì)思想里遣钳,是作為同一個(gè)業(yè)務(wù)邏輯消息的組織形式,它僅僅是一個(gè)邏輯上的概念麦乞,而在一個(gè)topic下又包含若干個(gè)邏輯隊(duì)列蕴茴,即消息隊(duì)列,消息內(nèi)容實(shí)際是存放在隊(duì)列中姐直,而隊(duì)列又存儲(chǔ)在broker中

一定要進(jìn)行特殊業(yè)務(wù)場(chǎng)景梳理
1)順序消費(fèi)
2)topic單broker配置

以免出現(xiàn)一個(gè)Topic只有一個(gè)queue的情況出現(xiàn)倦淀,導(dǎo)致消息丟失。隨便找了個(gè)圖声畏,大家可以看下


image.png

8撞叽、新集群配置

brokerClusterName=MQCluster
brokerName=broker-ali-76
brokerId=0
deleteWhen=04
fileReservedTime=360
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
storePathCommitLog=/data/rocketmq/store/commitlog
storePathConsumerQueue=/data/rocketmq/store/consumequeue
storePathRootDir=/data/rocketmq/store
autoCreateSubscriptionGroup=true
## if msg tracing is open,the flag will be true
traceTopicEnable=true
listenPort=10911
namesrvAddr=10.48.xx.76:9876;10.48.xx.77:9876

四、升級(jí)步驟

當(dāng)攻略做完以后插龄,我們就可以開始搞起了愿棋。我選擇的最終架構(gòu)模式:多Master多Slave模式-同步雙寫

流程概述:

  1. 修改2m-2s-sync 、runbroker均牢、runserver 配置參數(shù)

  2. 停掉3.2.6 nameserver 原IP PORT 啟動(dòng)4.6.0 nameserver糠雨,逐級(jí)替換完畢

  3. 停掉3.2.6 broker 啟動(dòng)4.6.0 broker(查看是否有單機(jī)topic問(wèn)題),逐級(jí)替換完畢

  4. 測(cè)試集群穩(wěn)定性徘跪,為新集群增加slave,升級(jí)完成

詳細(xì)步驟:

準(zhǔn)備操作

1甘邀、下載最新4.6.0版本部署包

cd /data/xxx_tomcat

wget http://mirrors.tuna.tsinghua.edu.cn/apache/rocketmq/4.6.0/rocketmq-all-4.6.0-bin-release.zip

unzip rocketmq-all-4.6.0-bin-release

2、修改配置

cd /data/xxx_tomcat/rocketmq-4.6.0/conf/2m-2s-sync

修改51垮庐、50 機(jī)器broker配置

修改配置 2m-2s-sync

修改 runbroker JVM配置松邪,以免使用了默認(rèn)配置導(dǎo)致內(nèi)存不夠

3、兩臺(tái)M配置如下:

兩臺(tái)差別只在brokerName 
brokerClusterName=MQCluster
brokerName=broker-60-50
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
storePathCommitLog=/data/alibaba-rocketmq/store/commitlog
storePathConsumerQueue=/data/rocketmq/store/consumequeue
storePathRootDir=/data/alibaba-rocketmq/store
autoCreateSubscriptionGroup=true
## if msg tracing is open,the flag will be true
traceTopicEnable=true
listenPort=10911
namesrvAddr=192.168.xxx.50:9876;192.168.xxx.51:9876

4突硝、替換nameserver

jps -l

sh bin/mqshutdown namesrv
cd /data/xxx_tomcat/rocketmq-4.6.0

nohup sh bin/mqnamesrv &

./bin/mqadmin clusterList -n localhost:9876

5测摔、替換broker

jps -l

sh bin/mqshutdown broker
cd /data/xxx_tomcat/rocketmq-4.6.0

ps -ef|grep mq  //檢查使用的配置文件

nohup sh bin/mqbroker  -c conf/2m-2s-sync/broker-b.properties &

./bin/mqadmin clusterList -n localhost:9876

最后我們來(lái)發(fā)個(gè)消息測(cè)試下

./bin/mqadmin sendMessage -n localhost:9876 -t lqtest -p "this is test"

./bin/mqadmin consumeMessage -n localhost:9876 -t lqtest

恭喜你到此你的集群就升級(jí)完畢了V眉谩=馇 锋八!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市护盈,隨后出現(xiàn)的幾起案子挟纱,更是在濱河造成了極大的恐慌,老刑警劉巖腐宋,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件紊服,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡胸竞,警方通過(guò)查閱死者的電腦和手機(jī)欺嗤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)卫枝,“玉大人煎饼,你說(shuō)我怎么就攤上這事⌒3啵” “怎么了吆玖?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)马篮。 經(jīng)常有香客問(wèn)我沾乘,道長(zhǎng),這世上最難降的妖魔是什么浑测? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任翅阵,我火速辦了婚禮,結(jié)果婚禮上尽爆,老公的妹妹穿的比我還像新娘怎顾。我一直安慰自己,他們只是感情好漱贱,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布槐雾。 她就那樣靜靜地躺著,像睡著了一般幅狮。 火紅的嫁衣襯著肌膚如雪募强。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天崇摄,我揣著相機(jī)與錄音擎值,去河邊找鬼。 笑死逐抑,一個(gè)胖子當(dāng)著我的面吹牛鸠儿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼进每,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼汹粤!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起田晚,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤嘱兼,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后贤徒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體芹壕,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年接奈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了踢涌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡序宦,死狀恐怖斯嚎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情挨厚,我是刑警寧澤堡僻,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站疫剃,受9級(jí)特大地震影響钉疫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜巢价,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一牲阁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧壤躲,春花似錦城菊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至漏麦,卻和暖如春客税,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背撕贞。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工更耻, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人捏膨。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓秧均,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子目胡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容