美文网首页
RabbitMQ 集群迁移

RabbitMQ 集群迁移

作者: PC_Repair | 来源:发表于2019-06-19 14:57 被阅读0次

对于 RabbitMQ 运维层面来说,扩容和迁移是必不可少的。扩容比较简单,一般向集群中加入新的集群节点即可,不过新的机器节点中是没有队列创建的,只要后面新创建的队列才有可能进入这个新的节点。

RabbitMQ 中的集群迁移更多的是用来解决集群故障不可短时间内修复而将所有的数据、客户端连接等迁移到新的集群中,以确保服务的可用性。

RabbitMQ 集群迁移包括元数据重建、数据迁移,以及客户端连接的切换。

元数据重建

元数据重建是指在新的集群中创建原集群的队列、交换器、绑定关系、vhost、用户、权限和 Parameter 等数据信息。元数据重建之后才可将原集群中的消息及客户端连接迁移过来。

重建元数据的方法:

  • 手工创建
  • 客户端创建
  • 通过 Web 管理界面的方式重建(推荐)

可以通过 Web 管理界面下载和上传 metadata.json,即集群的元数据信息文件。

  • "Download broker definitions"
  • "Upload broker definitions"

注意:如果新集群有数据与 metadata.json 中的数据相冲突,对于交换器、队列及绑定关系这类非可变对象而言会报错,而对于其他可变对象如 Parameter、用户等则会被覆盖,没有发生冲突的则不受影响。如果过程中发生错误,则导入过程终止,导致 metadata.json 中只有部分数据加载成功。

考虑三个问题:

  • 原集群突发故障,又或者开启 RabbitMQ Management 插件的那个节点机器故障不可修复,就无法获取原集群的元数据 metadata.json
  • 新旧集群的 RabbitMQ 版本不一致时会出现异常,可能元数据会不相同。一般情况下,RabbitMQ 是能够做到向下兼容的,在高版本的 RabbitMQ 中可以上传低版本的元数据文件。
  • 采用上面的方法将元数据在新集群上重建,则所有的队列都只会落到同一个集群节点上,而其他节点处于空置状态,这样所有的压力将会几集中到这单台节点之上。

解决方案:通过程序(或者脚本)的方式在新建集群上建立元数据。

  • 通过 HTTP API 接口创建相应的数据。

数据迁移和客户端连接的切换

考虑消费者客户端的事情,一种是等待原集群中的消息全部消费完成之后再将连接断开,然后与新集群建立连接进行消费作业。

当原集群服务不可用或者出现故障造成服务质量下降而需要迅速将消息流切换到新的集群中时,需要及时将消费者客户端的连接切换到新的集群中,那么在原集群中残留部分未被消费的消息需要做进一步的处理。

数据迁移的主要原理是先从原集群中将数据消费出来,然后存入一个缓存区中,另一个线程读取缓存区中的消息再发布到新的集群中,如此便完成了数据迁移的动作。该动作可以称为 "RabbitMQ Forward "。

数据迁移.PNG

RabbitMQ 本身提供的 Federation 和 Shovel 插件都可以实现 RabbitMQ Forward 的功能,不过自定义的 RabbitMQ Forward 工具可以让迁移系统更加高效、灵活。

自动化迁移

与生产者和消费者客户端相关的是交换器、队列及集群的信息,如果这 3 种类型的资源发生改变时需要让客户端迅速感知,以便进行相应的处理,则可以通过将相应的资源加载到 Zookeeper 的相应节点中,然后在客户端为对应的资源节点加入 watcher 来感知变化,当然这个功能使用 etcd 或者集成到公司层面的资源配置中心会更加标准、高效。

可以将整个 RabbitMQ 集群资源的使用分为三个部分:客户端、集群、Zookeeper 配置管理。

自动化迁移.PNG

相关文章

  • RabbitMQ 集群迁移

    对于 RabbitMQ 运维层面来说,扩容和迁移是必不可少的。扩容比较简单,一般向集群中加入新的集群节点即可,不过...

  • RabbitMQ 集群高可用部署详细介绍

    为什么搭建rabbitmq集群?rabbitmq集群有那些模式?如何搭建Rabbitmq集群?rabbitmq镜像...

  • rabbitMq安装、集群搭建

    Rabbitmq集群高可用测试RabbitMQ3.6.3集群搭建+HAProxy1.6做负载均衡RabbitMQ高...

  • 【rabbitMQ】消息队列rabbitMQ面试题

    简述rabbitMQ的架构设计 简述rabbitMQ的普通集群模式 注意: rabbitMQ普通集群模式不能解决高...

  • hdfs文件迁移

    hadoop跨集群之间迁移HDFS数据 不同hadoop集群之间迁移hive数据 hadoop跨集群之间迁移hiv...

  • RabbitMQ 集群

    RabbitMQ 集群 RabbitMQ 有 3 种模式,其中 2 种是集群模式。 单一模式:即单机情况不做集群,...

  • RabbitMQ + Keepalived + HAProxy

    最终结构图: RabbitMQ镜像集群简介 RabbitMQ镜像集群是通过在RabbitMQ服务器配置相应的规则,...

  • 2018-04-28

    最终结构图: RabbitMQ镜像集群简介 RabbitMQ镜像集群是通过在RabbitMQ服务器配置相应的规则,...

  • Rabbitmq集群之镜像队列

    镜像集群模式是在RabbitMQ Cluster默认集群的基础上添加策略搭建完成的 RabbitMQ默认集群模式,...

  • 使用Docker部署RabbitMQ集群

    使用Docker部署RabbitMQ集群 概述 本文重点介绍的Docker的使用,以及如何部署RabbitMQ集群...

网友评论

      本文标题:RabbitMQ 集群迁移

      本文链接:https://www.haomeiwen.com/subject/xglkqctx.html