如何使用主动/被动高可用性架构来配置RabbitMQ
我试图设置一个RabbitMQ服务器集群,以使用主动/被动服务器体系结构来获得高可用性队列。 我遵循这个指南:
我对高可用性的要求很简单,我有两个使用RabbitMQ(v3.2)和Erlang R15B03的节点(CentOS 6.4)。 Node1必须是“活动的”,才能响应所有请求,并且Node2必须是复制了所有队列和消息(来自Node1)的“被动”节点。
为此,我配置了以下内容:
接下来我做的是在两个节点之间创建一个集群:将Node2连接到Node1(指南1)。 之后,我配置了一个策略来镜像队列(指南2),在群集中的所有节点之间复制所有队列和消息。 这有效,我可以连接到任何节点并发布或使用消息,而这两个节点都可用。
当我有一个在Node1上创建队列“queueA”(queueA上的master),并且Node1停止时,我无法连接到Node2中的queueA以产生或使用消息,Node2会抛出一个错误说Node1是不可访问的(我认为queueA不会被复制到Node2,并且Node2不能被升级为queueA的主控)。
错误是:
{“AMQP操作被中断:由peer发起的AMQP关闭原因,code = 404,text = ”NOT_FOUND - vhost'app01'中持久队列'queueA'的主节点'rabbit @ node1'已关闭或无法访问 “,classId = 50,methodId = 10,cause =”}
使用的步骤顺序是:
节点1:
1. rabbitmq-server -detached
2. rabbitmqctl start_app
节点2:
3. Copy .erlang.cookie from Node1 to Node2
4. rabbitmq-server -detached
加入群集(Node2):
5. rabbitmqctl stop_app
6. rabbitmqctl join_cluster rabbit@node1
7. rabbitmqctl start_app
配置队列镜像策略:
8. rabbitmqctl set_policy ha-all "" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
注意:用于队列名称的模式是“”(所有队列)。
当我运行'rabbitmqctl list_policies'和'rabbitmqctl cluster_status'是一切都好。
为什么Node1在Node1不可用时无法响应? 这种设置有什么问题吗?
您尚未在set_policy调用中指定虚拟主机(app01),因此该策略仅适用于默认虚拟主机(/)。 这个命令行应该工作:
rabbitmqctl set_policy -p app01 ha-all "" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
在Web管理控制台中,queueA被列为Node1 +1吗?
这听起来像您的设置可能存在一些问题。 我有一套预先配置为在集群中工作的流浪盒,可能值得尝试,并在您的设置中确定问题?
确保您的队列不耐用或排他。
从文档(https://www.rabbitmq.com/ha.html):
当声明它们的连接关闭时,独占队列将被删除。 因为这个原因,因为当托管它的节点关闭时,连接将关闭,并且无论如何都需要删除队列,所以对于独占队列进行镜像(或者对于该问题持久)是没有用的。
因此,独占队列从不镜像(即使它们符合表明它们应该是的策略)。 他们也永远不会持久(即使这样宣称)。
从您的错误消息:
{“AMQP操作被中断:由peer发起的AMQP关闭原因,code = 404,text = ”NOT_FOUND - vhost'app01'中持久队列 'queueA'的主节点'rabbit @ node1'已关闭或无法访问 “,classId = 50,methodId = 10,cause =”}
看起来你创建了一个持久队列。
链接地址: http://www.djcxy.com/p/34169.html上一篇: How to configure RabbitMQ using Active/Passive High Availability architecture
下一篇: Parallel consumption of messages on different queues +rabbitmq+nodejs