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



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

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

但是使用 HAProxy,我失去了客户端集群意识。

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

  • 我的生产者生成一条消息,它命中HAProxy。HAProxy 将该消息路由到 node1。节点 1 是主节点,因此它会写入其队列,然后将消息传播到节点 2 和 3。
  • 下一条消息命中 HAProxy 并路由到 node2。然后,Node2 必须在写入和传播之前将此请求转发回节点 1。
  • 下一条消息被路由到节点 3,并且必须再次发送回节点 1。

因此,只有三分之一的消息不必重新路由。此外,节点 2 和 3 正在执行不必要的工作,接收消息并将其路由到 node1。

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

在常见情况下,否。

您考虑了邮件路由,但忘记了连接处理。一个人不能只将其所有连接连接到一个节点,除此之外,负载均衡器将帮助一次关闭一个节点进行维护。

相关内容

最新更新