2014-03-07 217 views
0

在亞馬遜VPC,在兩個節點我已經安裝的RabbitMQRabbitMQ的HA羣集

在節點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 [email protected]<PrivateIP> 
rabbitmqctl start_app 
rabbitmqctl set_policy HA '^(?!amq\.).*' '{"ha-mode": "all"}' 

RabbitMQ節點位於Elastic Load Balancer之後。我運行了一個java程序來繼續將消息推送到rabbitmq。

案例1:rabbitmqctl list-queues - 顯示當java程序將消息推送到隊列時,quename和隊列消息數相同。

案例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

是..應用程序使用發行商確認。我已爲醫管局制定政策。我在/etc/init.d/rabbitmq-server腳本中添加sync_queue命令以同步服務器啓動時的隊列。現在正在工作。 - 謝謝 –