RabbitMQ把某个队列从一个集群迁移到另一个集群的操作方法
比如,把队列 dhgate_translate_priority 由酒仙桥读写jxq_mq_group_e集群的172.19.224.22、172.19.224.25节点分别迁移至酒仙桥读写jxq_mq_group_g集群的172.19.40.71、172.19.40.72节点。
step1、在dhmq管理平台(http://172.19.40.57:8080/login)上查看dhgate_translate_priority队列信息和所属集群id:
确认好迁移前所属集群和节点等信息,方便下面写sql改库用。
step2、在新集群新建exchange,ename = dhgate_translate_priority,其中Features属性尽量和原来的保持一致,Policy也和原来的保持一致,如果新集群还未添加policy,先添加policy:
step3、在新集群新建队列,qname = dhgate_translate_priority,属性和参数跟原来保持一致,然后给该队列绑定ename=dhgate_translate_priority的exchange。
step4、修改酒仙桥读写环境的队列相关数据库:dhmq_dev(QA环境数据库ip:172.30.100.13,用户和密码:dhmq_dev),修改queue和exchange:
-- td_dhmq_queue表,修改queue
update td_dhmq_queue set queuenode = replace(queuenode,'172.19.224.22_','172.19.40.71_')
where clusterid='5' and queuename='dhgate_translate_priority';
update td_dhmq_queue set queuenode = replace(queuenode,'172.19.224.25_','172.19.40.72_')
where clusterid='5' and queuename='dhgate_translate_priority';
update td_dhmq_queue set clusterid=8
where clusterid='5' and queuename='dhgate_translate_priority';
-- td_dhmq_exchange表,修改exchange
update td_dhmq_exchange set brokernode = replace(brokernode,'172.19.224.22_','172.19.40.71_')
where clusterid=5 and ename='dhgate_translate_priority';
update td_dhmq_exchange set brokernode = replace(brokernode,'172.19.224.25_','172.19.40.72_')
where clusterid=5 and ename='dhgate_translate_priority';
update td_dhmq_exchange set clusterid=8
where clusterid=5 and ename='dhgate_translate_priority';
改完之后验证是否成功: http://172.19.40.57:8080/getqueue?queuename=dhgate_translate_priority
响应值为新集群节点列表即成功。
step5、重启生产者和消费者服务,然后到rabbitmq管理平台查看该队列incomming和deliver状态: http://172.19.40.71:15672/#/queues
step6、迁移老集群该队列的数据(如果有未消费完的话)
dhgate_translate_priority老集群机器上还有剩余未消费的数据,如图:
-------------接下来开始迁移历史遗留数据----------
首先,在新集群上创建shovel,用来迁移队列源数据:
然后看下shovel执行状态:
到老集群上看看遗留的消息个数:
再检查下消费者个数:
step7、数据迁移完毕之后,到新集群上删除shovel
step8、确认无误后,到老集群上删除该队列即可:
删除队列的方法一:rabbitmq管理平台上,Queues—> Binds(先解绑exchange)-→Delete(删除)
删除队列的方法二:使用命令删除队列
# 查看所有队列
rabbitmqctl list_queues
# 根据 queue_name 参数,删除对应的队列
rabbitmqctl delete_queue dhgate_translate_priority
迁移完毕!