迁移RabbitMQ业务
RabbitMQ业务迁移主要涉及到以下两个场景:
- 将线下单机或集群实例迁移到线上RabbitMQ实例。
- 将低版本的RabbitMQ实例迁移到高版本的RabbitMQ实例,例如将3.7.17版本的RabbitMQ实例迁移到3.8.35版本的RabbitMQ实例。
迁移原理
在实际业务场景中,RabbitMQ实例存在多个生产者和消费者,在业务迁移时,不会迁移数据,只是通过逐个增加/关闭消费者、生产者的方式迁移实例,这种迁移方式可以实现业务无感迁移。
前提条件
已创建目标RabbitMQ实例,具体请参考购买RabbitMQ实例。
实施方案(双读模式迁移实例)
- 将原RabbitMQ实例的元数据迁移到目标RabbitMQ实例。
图1 迁移元数据
迁移步骤如下:
- 登录原RabbitMQ的WebUI页面,在“Overview”页签中,单击“Download broker definitions”,导出元数据。
图2 导出元数据
- 登录目标RabbitMQ的WebUI页面,在“Overview”页签中,单击“选择文件”,选择1.a中导出的元数据,单击“Upload broker definitions”,上传元数据。
图3 导入元数据
- 登录原RabbitMQ的WebUI页面,在“Overview”页签中,单击“Download broker definitions”,导出元数据。
- 为目标RabbitMQ实例添加新的消费者,准备消费目标实例的消息。
图4 添加新消费者
- 为目标RabbitMQ实例添加新的生产者,下线原RabbitMQ实例的生产者,旧的消费者继续消费原RabbitMQ实例中的消息。
图5 迁移生产者
- 旧的消费者消费完原RabbitMQ实例的全部消息后,下线旧的消费者和原RabbitMQ实例。
图6 下线旧的消费者和原RabbitMQ实例
迁移后检查
通过以下方法,确认原实例是否消费完成:
- 在原RabbitMQ实例的WebUI页面查看,如图7所示。
Overview视图中,可消费消息数(Ready)以及未确认的消息数(Unacked)都为0时,说明消费完成。
- 调用API查看。
curl -s -u username:password -XGET http://ip:port/api/overview
参数说明:
- username:原实例登录RabbitMQ WebUI的账号
- password:原实例登录RabbitMQ WebUI的密码
- ip:原实例登录RabbitMQ WebUI的IP地址
- port:原实例登录RabbitMQ WebUI的端口号
回显信息中“messages_ready”和“messages_unacknowledged”都为0时,说明消费完成。
图8 回显信息