Rabbitmq數(shù)據(jù)遷移-docker-compose

場景

現(xiàn)在有Rabbitmq普通模式架構(gòu)服務A和服務B ,由于業(yè)務需要,要求把服務A上mq的數(shù)據(jù)遷移到服務B上,rabbitmq的數(shù)據(jù)包括元數(shù)據(jù)(RabbitMQ用戶、vhost、隊列、交換和綁定)和消息數(shù)據(jù),而消息數(shù)據(jù)存儲在單獨的消息存儲庫中。

操作步驟一共三步

    1. 元數(shù)據(jù)備份和還原
    1. 消息數(shù)據(jù)備份&還原
    1. 核驗

普通模式的數(shù)據(jù)遷移,請先定位到 服務A&服務B的 主節(jié)點;

這里以 docker-compose 部署的為服務A
172.16.123.111:5672、172.16.123.112:5672、172.16.123.113:5672

CNCP管理臺頁面快速構(gòu)建的rabbitmq為服務B
172.16.123.52:5672、172.16.123.53:5672、172.16.123.54:5672

操作

步驟一 元數(shù)據(jù)備份和還原

1、操作
在服務B上搭建rabbitmq服務 (這里是在CNCP的管理臺頁面新建一個rabbitmq)

元數(shù)據(jù)遷移,登錄 UI 管理界面,默認為 ip:15672, 選擇 Export definitions,download 元數(shù)據(jù)信息 json文件,然后在新的集群上選擇 Import definitions,upload 上傳元數(shù)據(jù)信息(注意隊列可能在不同節(jié)點的情況)

2、登陸服務A導出元數(shù)據(jù)


image.png

3、登陸服務B導入上面導出的元數(shù)據(jù)


image.png

4、驗證數(shù)據(jù)
刷新頁面,查看元數(shù)據(jù) 等信息是否存在

步驟二 消息數(shù)據(jù)備份&還原

這里的實現(xiàn)方案是用的 rabbitmq 的 Shovel 插件

1.為什么需要使用 shovel 插件?
答:當業(yè)務需要可靠且連續(xù)地將消息從一個 broker 的 queue 里搬運(轉(zhuǎn)發(fā))到另一個 broker 的 exchange 時(最終達到某個 queue 里 )使用;作為 source 的 queue 和作為 destination 的 exchange 可以位于同一個 broker 上(通常要求處于不同的 vhost 下),也可以位于不同的 broker 上。
2.使用 shovel 插件的好處?
答:shovel 基于 RabbitMQ 的 Erlang 客戶端實現(xiàn),且作為 built-in 插件被使用,故可以隨 broker 的啟動而自動啟動;shovel 具有松耦合特性:通過該插件可以在分屬不同管理域下的 broker 或 cluster 之間進行消息的搬運;shovel 具有 WAN 友好特性:基于 AMQP 0-9-1 協(xié)議實現(xiàn),并設(shè)計成能夠保證在不穩(wěn)定網(wǎng)絡(luò)場景下不丟失消息;shovel 具有高度可定制性:允許在 shovel 建立連接后,立即執(zhí)行指定的 AMQP 方法進行定制化操作(例如聲明 queue 的動作);

注意:因為 docker-compose 之前給到用戶的版本并沒有默認開啟,本次消息數(shù)據(jù)遷移所依賴的文件,這里需要先開啟插件

  1. 開啟服務A 的兩個插件 rabbitmq_shovel & rabbitmq_shovel_management
# 創(chuàng)建一個插件配置文件 
vi /tmp/rabbitmq-db-2/etc/enabled_plugins
# 寫入內(nèi)容
[rabbitmq_management,rabbitmq_prometheus,rabbitmq_shovel,rabbitmq_shovel_management].

# 修改 docker-compose.yaml 添加一行 volumes
vi /root/rabbitmq_cluster/rabbitmq/rabbitmq03/docker-compose.yaml
# 添加一行 
- /tmp/rabbitmq-db-2/etc:/rabbitmq_server-3.8.5/etc/rabbitmq
image.png
# 進入指定目錄停止 rabbitmq ,執(zhí)行 
docker-compose down
# 進入指定目錄啟動 rabbitmq ,執(zhí)行 
docker-compose up

注 上面開啟插件那么復雜的原因是,筆者在 docker 內(nèi)重啟 rabbitmq 失敗,無奈之下通過修改掛初始化插件的方式,重啟 docker-compose,如果操作者可以在 rabbitmq-plugins enable rabbitmq_shovel & rabbitmq-plugins enable rabbitmq_shovel_management 后可以重啟rabbtimq 那就不用上面那么復雜的又是掛卷又是重啟docker

登陸服務A 的UI界面 新增插件如下


image.png
  1. 配置插件
    登陸UI -> admin -> Shovel Management -> Add a new shovel

配置 數(shù)據(jù)源 & 數(shù)據(jù)目標


image.png

注:這里的適用于我們平臺的 url 格式為 amqp://user:password@server-name/my-vhost
connect to server-name, with credentials and overridden virtual host
例如 amqp://rmq:rmq123@172.16.123.111:5672

  1. 效果


    image.png

步驟三 核驗

筆者使用 postman 發(fā)送200個消息到 rabbitmq,會發(fā)現(xiàn)服務A中消息都為0,查看服務B,發(fā)現(xiàn)服務B新增了200條消息,即數(shù)據(jù)實時遷移成功;

image.png
image.png

結(jié)束

當服務A 不再接受業(yè)務后,可以徹底停止 服務A;

注意:上訴動作中,因為是不停服操作,需要和用戶核驗 元數(shù)據(jù)是否增加。以免反復同步 元數(shù)據(jù)。以及新增 shovel。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容