【问题标题】:Migrating data from RabbitMQ server从 RabbitMQ 服务器迁移数据
【发布时间】:2017-04-03 20:37:48
【问题描述】:

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

  1. 尝试从不同机器连接其他节点并复制 数据给他们。
  2. 在新机器上安装rabbit并复制mnesia文件 从旧服务器到新服务器。打开新服务器,关闭旧服务器 一。例如。可以在 AWS 上做镜像快照,可以简化流程。

我无法在不清理数据的情况下找到实现 (1) 的方法,因此此选项看起来不可行。 至于(2),它看起来非常手动和令人毛骨悚然。 还有其他数据迁移策略还是我在这里遗漏了什么?

【问题讨论】:

    标签: amazon-ec2 rabbitmq mnesia


    【解决方案1】:

    通过设置 RabbitMQ 集群,我设法为第一个选项设置流程以在不停机的情况下复制数据。为此,我关注了manual,但调整了两件事以使其适用于我的堆栈:

    1. AWS 中的 RabbitMQ 集群不能使用 ip 地址作为 fqdn 短名称,因此要使集群机器相互看到,您需要编辑 /etc/hosts 文件并将“字符串”名称重新排列到您的集群机器:

    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 的描述设置复制,但重要的事实是默认情况下不复制队列。因此,您需要像这样为队列复制设置策略:

    rabbitmqctl set_policy policy_name "queue_pattern" '{"ha-mode":"all", "ha-sync-mode":"automatic"}' -p your_vhost

    顺便说一下,文档中没有提到 -p your_vhost 参数 - 如果您使用任何虚拟主机,请小心指定。

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

    【讨论】:

    • 如果你不自动,vhost 将被设置为“/”
    猜你喜欢
    • 2018-04-09
    • 2014-06-22
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-29
    • 2021-04-23
    相关资源
    最近更新 更多