Amazon EC2上的RabbitMQ HA群集

时间:2014-03-07 08:46:42

标签: amazon-ec2 rabbitmq

在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节点位于Elastic Load Balancer后面。我运行了一个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启动时的sync_queue。

感谢您是否可以指出,为什么消息计数从大约3330降至70.此外,还有什么是设置和确保HA的最佳方式。

2 个答案:

答案 0 :(得分:2)

一些提示:

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

答案 1 :(得分:1)

如果您不想丢失消息,则应考虑使用税务交易

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

如果你的消息率很高,这可能会导致性能下降。

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