開源RabbitMQ遷移上云
在使用開源RabbitMQ集群時(shí),當(dāng)您希望能夠解決各種穩(wěn)定性痛點(diǎn)(例如消息堆積、腦裂等問題)、實(shí)現(xiàn)高并發(fā)、分布式、靈活擴(kuò)縮容時(shí),您可以將開源RabbitMQ集群遷移至云消息隊(duì)列 RabbitMQ 版,本文介紹遷移上云的前提條件、操作步驟、注意事項(xiàng)等。
遷移前須知
云消息隊(duì)列 RabbitMQ 版是阿里云基于專有的分布式消息存儲(chǔ)技術(shù)開發(fā)的高級消息隊(duì)列服務(wù)。它嚴(yán)格遵循AMQP 0-9-1協(xié)議,但并不是開源RabbitMQ的簡單托管版本。云消息隊(duì)列 RabbitMQ 版的架構(gòu)有效避免了因消息積壓導(dǎo)致的內(nèi)存泄漏和服務(wù)器故障等穩(wěn)定性問題,并成功解決了分布式系統(tǒng)中的腦裂難題。此外,它還提供了高度的可伸縮性和靈活的按量計(jì)費(fèi)模式,進(jìn)一步增強(qiáng)了服務(wù)的彈性、降低了成本。
然而,與開源RabbitMQ相比,云消息隊(duì)列 RabbitMQ 版在某些功能實(shí)現(xiàn)上存在差異。因此,在考慮遷移至云消息隊(duì)列 RabbitMQ 版之前,您需要進(jìn)行技術(shù)能力和成本效益評估,以確保選型符合您的需求。
遷移前評估
技術(shù)評估
云消息隊(duì)列 RabbitMQ 版和開源RabbitMQ在功能、服務(wù)和性能、Exchange和Queue等幾個(gè)方面存在差異,在遷移至云消息隊(duì)列 RabbitMQ 版之前,請查看差異項(xiàng)并評估云消息隊(duì)列 RabbitMQ 版的功能是否符合您的預(yù)期。具體差異點(diǎn),請參見開源對比。
云消息隊(duì)列 RabbitMQ 版對集群、接口調(diào)用以及字符進(jìn)行了限制,在使用時(shí)不能超過相應(yīng)的限制值,在遷移之前,請?jiān)u估限制值是否能滿足您的業(yè)務(wù)要求。更多信息,請參見實(shí)例類型
費(fèi)用評估
云消息隊(duì)列 RabbitMQ 版提供了預(yù)付費(fèi)系列實(shí)例和Serverless系列實(shí)例,涵蓋多種實(shí)例規(guī)格。不同實(shí)例規(guī)格間的差異,請參見實(shí)例類型。
相比預(yù)付費(fèi)系列實(shí)例,Serverless系列實(shí)例具備更好的彈性能力和費(fèi)用優(yōu)勢。計(jì)費(fèi)規(guī)則,請參見Serverless系列計(jì)費(fèi)說明。
開源RabbitMQ集群的消息收發(fā)次數(shù)、Queue數(shù)量及消息量可通過如下途徑評估。
Queue數(shù)量:在開源RabbitMQ控制臺(tái)上的Overview頁面查看Global counts,獲取Queues、Exchanges等各個(gè)元數(shù)據(jù)的數(shù)量。
消息收發(fā)次數(shù)、消息量:
方法一:在開源RabbitMQ控制臺(tái)上的Overview頁面查看Message rates,計(jì)算Publish、Deliver(manual ack)/Deliver (auto ack)、Redelivered指標(biāo)的總和。
方法二:通過Prometheus Grafana大盤查看集群總的消息寫入和消息流出的QPS和消息量。
遷移上云
遷移元數(shù)據(jù)
遷移元數(shù)據(jù)是指將開源RabbitMQ集群的元數(shù)據(jù)導(dǎo)出,并將其導(dǎo)入到阿里云云消息隊(duì)列 RabbitMQ 版實(shí)例。云消息隊(duì)列 RabbitMQ 版會(huì)根據(jù)成功導(dǎo)入的元數(shù)據(jù)在目標(biāo)云消息隊(duì)列 RabbitMQ 版實(shí)例中創(chuàng)建對應(yīng)的Vhost、Queue、Exchange、Binding,實(shí)現(xiàn)RabbitMQ集群元數(shù)據(jù)遷移上云。詳細(xì)步驟,請參見遷移元數(shù)據(jù)上云。
創(chuàng)建用戶名、密碼并授權(quán)
開源客戶端訪問云消息隊(duì)列 RabbitMQ 版服務(wù)端時(shí),需要傳入用戶名和密碼進(jìn)行權(quán)限認(rèn)證,認(rèn)證通過才允許訪問服務(wù)端。不同于開源RabbitMQ中自定義用戶名密碼的方式,云消息隊(duì)列 RabbitMQ 版的用戶名和密碼可通過阿里云訪問控制(RAM)的AccessKey和AccessKey Secret生成。詳細(xì)信息,請參見靜態(tài)用戶名密碼管理。
打通網(wǎng)絡(luò)
云消息隊(duì)列 RabbitMQ 版提供私網(wǎng)連接接入點(diǎn),使用私網(wǎng)連接接入點(diǎn)能夠支持云企業(yè)網(wǎng)(CEN)上云組網(wǎng),詳情請參見私網(wǎng)連接接入點(diǎn)。
遷移消息數(shù)據(jù)
遷移方案
以VirtualHost為最小遷移單位,使用Shovel插件遷移消息數(shù)據(jù)
方案優(yōu)勢
平滑遷移業(yè)務(wù),數(shù)據(jù)不丟失。
無需梳理應(yīng)用間調(diào)用的網(wǎng)狀拓步結(jié)構(gòu)。
不需要逐個(gè)遷移生產(chǎn)者和消費(fèi)者的調(diào)用鏈路,解決環(huán)形調(diào)用鏈路等的遷移問題。
遷移步驟
梳理出VirtualHost A的所有生產(chǎn)者和消費(fèi)者。
遷移VirtualHost A下所有的生產(chǎn)者和消費(fèi)者,即修改URL、用戶名、密碼配置使其訪問云消息隊(duì)列 RabbitMQ 版服務(wù)。
觀察開源RabbitMQ集群中,VirtualHost A下所有隊(duì)列的堆積情況。
在開源集群中開啟Shovel插件,將有消息堆積的隊(duì)列配置Shovel臨時(shí)遷移同步任務(wù)sync a,將堆積的消息轉(zhuǎn)發(fā)到云消息隊(duì)列 RabbitMQ 版實(shí)例。這里將開源集群中的隊(duì)列設(shè)置為同步任務(wù)的源,云消息隊(duì)列 RabbitMQ 版實(shí)例的隊(duì)列設(shè)置為同步任務(wù)的目標(biāo)。
如果在開源集群中,VirtualHost A有來自其它VirtualHost B的Shovel同步任務(wù)sync B,則需要將同步任務(wù)sync B的目標(biāo)設(shè)置為云消息隊(duì)列 RabbitMQ 版實(shí)例的隊(duì)列。
觀察開源集群VirtualHost A下的隊(duì)列是否有消息堆積,當(dāng)堆積的消息全部被遷移至云上實(shí)例后,刪除臨時(shí)遷移同步任務(wù)sync a。
以上步驟完成了最小遷移單元VirtualHost A的遷移,剩余的VirtualHost都可以按照最小遷移單元遷移。
相關(guān)文檔
更多關(guān)于Shovel插件的信息,請參見Shovel Plugin。