使用HAProxy作为RabbitMQ的负载平衡器是否次优?

使用HAProxy作为RabbitMQ的负载平衡器是否次优?,rabbitmq,haproxy,Rabbitmq,Haproxy,我正在为我的RabbitMQ集群找出最佳拓扑。我需要高可用性队列。我看过很多关于在RMQ节点前面使用HAProxy作为循环负载平衡器的帖子 我的理解是,在具有镜像队列的RMQ集群中,消息将首先路由到该队列的主节点,然后将该消息复制到镜像。RMQ客户机可以配置多个节点,并且客户机知道哪个节点是其队列的主节点,因此总是将消息路由到那里 但是使用HAProxy时,我会失去客户机集群意识 例如,我有一个3节点集群,其中一个队列有3个镜像。节点1是主节点,节点2和节点3是从节点 我的制作人制作了一条消息

我正在为我的RabbitMQ集群找出最佳拓扑。我需要高可用性队列。我看过很多关于在RMQ节点前面使用HAProxy作为循环负载平衡器的帖子

我的理解是,在具有镜像队列的RMQ集群中,消息将首先路由到该队列的主节点,然后将该消息复制到镜像。RMQ客户机可以配置多个节点,并且客户机知道哪个节点是其队列的主节点,因此总是将消息路由到那里

但是使用HAProxy时,我会失去客户机集群意识

例如,我有一个3节点集群,其中一个队列有3个镜像。节点1是主节点,节点2和节点3是从节点

  • 我的制作人制作了一条消息,它击中了HAProxy。HAProxy将该消息路由到节点1。节点1是主节点,因此它会写入其队列,然后将消息传播到节点2和3
  • 下一条消息命中HAProxy并被路由到节点2。然后,节点2必须在写入和传播该请求之前将其转发回节点1
  • 下一条消息被路由到节点3,并且必须再次发送回节点1
因此,只有三分之一的消息不需要重新路由。另外,节点2和3正在做不必要的工作,接收消息并将它们路由到节点1


当然,只需在客户机上配置一个端点,并且能够自由地更改集群拓扑结构,这是一个优势,但我说这不是消息吞吐量方面的最佳设置,对吗?

在常见场景中,不是


您考虑了消息路由,但忘记了连接处理。不能将所有连接都只连接到一个节点,除此之外,负载平衡器将有助于一次关闭一个节点进行维护


您考虑了消息路由,但忘记了连接处理。不能将所有连接都只连接到一个节点,除此之外,负载平衡器将有助于一次关闭一个节点进行维护。

如果您有一个三节点集群,那么实际上不需要镜像到所有三个节点。您可以通过运行基准测试来回答自己的问题。我建议使用PerfTest。如果您有一个三节点集群,那么实际上不需要镜像到所有三个节点。您可以通过运行基准测试来回答自己的问题。我建议使用PerfTest。