【问题标题】:RabbitMQ HA Cluster on Amazon EC2Amazon EC2 上的 RabbitMQ HA 集群
【发布时间】:2014-04-10 07:42:49
【问题描述】:

在 Amazon VPC 中,我在两个节点上安装了 rabbitmq

在节点 1 上,我运行了以下命令

#Node 1
/etc/init.d/rabbitmq-server stop
rabbitmq-server -detached
rabbitmqctl start_app
rabbitmqctl set_policy HA '^(?!amq\.).*' '{"ha-mode": "all"}'

在节点 2 上,我运行了以下命令来设置集群

/etc/init.d/rabbitmq-server stop
rabbitmq-server -detached
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@<PrivateIP>
rabbitmqctl start_app
rabbitmqctl set_policy HA '^(?!amq\.).*' '{"ha-mode": "all"}'

RabbitMQ 节点位于弹性负载均衡器后面。我运行了一个 java 程序来不断将消息推送到 rabbitmq。

案例 1:rabbitmqctl list-queues -- 当 java 程序将消息推送到队列时,显示队列名称和队列消息计数相同。

案例 2:我在节点 2 上停止了 rabbitmq,然后再次启动它。检查集群状态和队列消息计数。消息计数正确(节点 1 和节点 2 上均为 3330)

案例 3:当 java 程序将消息推送到队列时,我在节点 1 上停止了 rabbitmq。 我检查了节点 2 中的队列消息计数,计数为 70。 我在节点 1 上启动了 rabbitmq,然后检查队列数是 75。

我想设置一个 rabbitmq 高可用集群并确保没有消息丢失。我在 /etc/init.d/rabbitmq-server 中启用了 rabitmq start 上的 sync_queue。

如果您能指出,为什么消息计数从大约 3330 下降到 70,请不胜感激。还有什么是设置和确保 HA 的最佳方法。

【问题讨论】:

    标签: amazon-ec2 rabbitmq


    【解决方案1】:

    一些提示:

    • 您的应用使用发布商是否确认?如果您不想丢失消息,应该这样做。
    • 是否启用了队列的自动同步?如果没有,您必须手动启动任何队列的队列同步。
    • 在同步队列时不应重新启动任何节点,否则消息可能会丢失。

    【讨论】:

    • 是的 .. 应用程序使用发布者确认。我已经为 HA 设置了策略。我在 /etc/init.d/rabbitmq-server 脚本中添加了一个 sync_queue 命令,以在服务器启动时同步队列。它现在正在工作。 - 谢谢
    【解决方案2】:

    如果你不想丢失消息,你应该考虑使用 tx-transtaction

    channel.txSelect();
    channel.basicPublish("", youQueue, MessageProperties.PERSISTENT_TEXT_PLAIN,
    message.getBytes());
    channel.txCommit();
    

    如果您的消息率很高,这可能会影响性能。

    访问 http://www.rabbitmq.com/blog/2011/02/10/introducing-publisher-confirms/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-11
      • 1970-01-01
      • 2012-12-12
      • 1970-01-01
      • 1970-01-01
      • 2020-07-31
      相关资源
      最近更新 更多