我正在驾驶rabbit mq,发现它非常好。查看 HA 页面,我发现交换/队列复制运行良好。
我对必须使用 TCP 负载均衡器来平衡节点之间的负载这一事实感到困扰。这个对吗?
我想在一个集群中有 2 个节点,采用“全部复制”策略。
我希望发布者或消费者能够以类似循环的行为连接到所有节点。不幸的是,客户端 API 只允许为每个连接设置一个主机。
是否有任何(可能是第 3 方?)类似连接池的解决方案,以便发布者发布并且消费者从所有节点消费?
我正在驾驶rabbit mq,发现它非常好。查看 HA 页面,我发现交换/队列复制运行良好。
我对必须使用 TCP 负载均衡器来平衡节点之间的负载这一事实感到困扰。这个对吗?
我想在一个集群中有 2 个节点,采用“全部复制”策略。
我希望发布者或消费者能够以类似循环的行为连接到所有节点。不幸的是,客户端 API 只允许为每个连接设置一个主机。
是否有任何(可能是第 3 方?)类似连接池的解决方案,以便发布者发布并且消费者从所有节点消费?
我还没有看到任何为 AMQP/RabbitMQ 进行连接池的客户端。AMQP 通过通道在单个进程中处理多个发布者/消费者,一些客户端使其易于使用,但似乎无法使用连接池处理节点的自动故障转移。
在集群中,不需要连接到集群中的所有节点,消费和发布操作将在集群内正确路由。对于消耗尝试管理具有多个订阅的单个或多个进程(每个连接至少消耗一个)对我来说从来不是最高优先级。使用多个进程,每个进程随机连接到 RabbitMQ,如果其中一个 RabbitMQ 节点发生故障,您将能够保持可用性。
如果检测到故障导致不到一秒的中断,长期连接中的发布者很容易重新连接,在我所做的任何事情中都足够小,不会成为问题。
从几年的使用来看,我会说重新连接到新主机是故障转移期间更简单的问题,而困难的问题是管理应用程序中与现有 AMQP 连接有关的状态。实际上,我只是保留了可用主机列表,并为每个新连接选择下一个。每当连接关闭时,只需选择一个新主机并重试。这确实意味着您无法发布的时间很短,如果您必须不断地在 PHP 中建立新的连接,可能会更加困难。
由于流量控制, TCP 负载平衡器可能比它们更有价值。TCP 背压可能无法通过 LB,导致发布者发布的速度超过了 RabbitMQ 的处理速度。在不科学的测试中,当 RabbitMQ 在负载均衡器后面时,当客户端直接连接时,我遇到了更多的稳定性问题。
对于python nameko ,这里提到了实现高可用性故障转移(Rabbitmq) 的建议方法。Nameko 设法实现这一点,因为支持库 (kombu) 支持循环故障转移
AMQP_URI: pyamqp://guest:guest@rabbitmq1:5672/;pyamqp://guest:guest@rabbitmq2:5672/