从RabbitMQ服务器迁移数据

时间:2017-03-13 21:02:36

标签: amazon-ec2 rabbitmq mnesia

我们在AWS上托管了RabbitMQ服务器,最近我们收到通知,实例将处于维护状态,并且几个小时后将暂时无法使用。 由于它是生产服务器,我们希望避免用户停机,并且目前正在考虑将RabbitMQ迁移到另一台服务器而不会丢失数据的策略。看起来有两种选择:

  1. 尝试连接来自不同计算机的其他节点并进行复制 数据给他们。
  2. 在新机器上安装Rabbit并复制mnesia文件 从旧服务器到新服务器。打开新服务器,关闭旧服务器 一。例如。可以在AWS上执行图像快照,这可以简化流程。
  3. 在没有清理数据的情况下,我无法找到实现(1)的方法,因此该选项看起来不可行。 至于(2)它看起来非常手动和令人毛骨悚然。 是否有其他数据迁移策略或我在这里遗漏了什么?

1 个答案:

答案 0 :(得分:0)

我设法通过设置RabbitMQ集群为第一个选项设置流程,以便无需停机即可复制数据。要做到这一点,我跟着manual,但调整了两件事使它适用于我的堆栈:

  1. AWS中的RabbitMQ群集无法使用ip地址作为fqdn短名称,因此要使群集机器看到对方需要编辑/ etc / hosts文件并重新排列" string"您的群集计算机的名称:
  2.   

    vi / etc / hosts

    文件看起来像这样:

    127.0.0.1 localhost 10.242.86.191 ip-10-242-86-191 ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts

    1. 设置群集后,您需要按照here所述设置复制,但重要的是,默认情况下不会复制队列。因此,您需要为此设置队列复制策略:
    2.   

      rabbitmqctl set_policy policy_name" queue_pattern" ' {" ha-mode":"所有"," ha-sync-mode":"自动"}&#39 ; -p your_vhost

      顺便说一下,在文档中没有提到 -p your_vhost 参数 - 如果你使用的话,请注意指定vhost。

      设置完所有队列的队列在群集中复制并通过mnesia同步后,这使我能够在没有停机的情况下关闭第一台群集机器,并在维护之后打开而不会丢失数据。