2010-11-10 221 views
3

我想将RabbitMQ设置为具有HA的两个(或更多)节点群集。rabbitmq HA群集

使用案例:客户端应用程序制作(C#.NET)知道该群集有两个节点,并发布到集群。各种消费者应用程序(也称为C#.NET)连接到群集并获取生产者生成的所有消息。只要至少有一个节点启动并运行,生产者和消费者都将继续无误地工作。假设节点A和B正在运行并且B死了一段时间,然后重新启动,然后A死亡,客户端全部继续运行而没有收到错误,因为在任何时候至少有一个节点启动。

它可以像这样开箱工作吗?

是否还有其他的MQS这将是更合适的(商业OK)为Windows/.NET应用环境?

回答

6

是否可以做这样的工作开箱?

号当一个节点出现故障,所有的连接被关闭。由于AMQP连接是有状态的,因此无法解决此问题。你可以实现的是1)代理关闭,2)所有的客户端断开连接,3)客户端连接到其他节点(伪装成原来的),并且不明智。

在一个侧面说明,兔子不支持主动 - 主动HA群集的时刻。它确实支持active-passive clusteringlogical clustering(这可能是你正在寻找的)的一种形式。

+0

于是,经过客户端检测到连接是死的(就是这个AlreadyClosedException?)应该只是尝试重新连接到集群,剩余的节点之一应该自动被分配为它用? – 2010-11-12 01:59:49

+0

或多或少,是的。轻微的皱折是您需要连接到群集中的其他节点(因为原件已关闭);你可以用负载平衡器来做到这一点。之后,它照常营业。从客户的角度来看,它会看到相同的配置(相同的队列,交换)。 – scvalex 2010-11-13 01:41:54

+0

因此,对于负载均衡器,客户端似乎只有一个IP地址,但是erlang节点本身都将使用其真实IP地址? – 2010-11-23 10:32:45

7

RabbitMQ v2.6.0现在支持使用主动/主动群集高可用性队列。微软和其他一些公司在Apache QPid上进行了合作,该产品具有C#绑定,并且还支持主动/主动HA群集。