【问题标题】:How To Load-Distribution in RabbitMQ cluster?如何在 RabbitMQ 集群中进行负载分配?
【发布时间】:2012-05-05 12:24:26
【问题描述】:

您好,我创建了三个在 EC2 上的集群中运行的 RabbitMQ 服务器

我想根据 CPU 利用率来扩展 RabbitMQ 集群,但是当我发布消息时,只有一台服务器使用 CPU,而其他 RabbitMQ 服务器不使用 CPU

那么我如何在 RabbitMQ 集群中分配负载

【问题讨论】:

    标签: amazon-ec2 amazon-web-services rabbitmq cluster-computing autoscaling


    【解决方案1】:

    RabbitMQ 集群旨在提高可扩展性,但系统并非完全自动化。

    当您在集群中的某个节点上声明队列时,队列只会在该节点上创建。所以,如果你有一个队列,不管你发布到哪个节点,消息都会在队列所在的节点上结束。

    要正确使用 RabbitMQ 集群,您需要确保执行以下操作:

    • 具有跨节点分布的多个队列,因此工作分布比较均匀,
    • 将您的客户端连接到不同的节点(否则,您最终可能会将所有消息集中到一个节点),并且
    • 如果可以,请尝试让发布者/消费者连接到持有他们正在使用的队列的节点(以尽量减少集群内的消息传输)。

    或者,看看High Availability Queues。它们就像普通队列,但队列内容在多个节点上镜像。因此,在您的情况下,您将发布到一个节点,RabbitMQ 会将发布镜像到另一个节点,消费者将能够连接到任一节点,而不必担心因内部传输而陷入集群。

    【讨论】:

    • 你好,scvalex。对于“有多个队列分布在节点上,使得工作分布有点均匀”,是否需要添加一个linux服务器来运行负载均衡器程序来解决程序?还是必须更改应用程序的源代码,将“rabbitmq”所有节点名称信息添加到程序中进行负载均衡?
    • 我会说“更改应用程序的源代码以将'rabbitmq'所有节点名称信息添加到程序以进行负载均衡”,但是有些人成功使用了负载均衡器。
    • 在找到你的帖子之前,我觉得rabbitmq很强大。但在那之后,我认为它不是你说的自动的。使用起来并不方便。
    【解决方案2】:

    这不是真的。查看有关该主题的文档。

    发布到队列的消息被复制到所有镜像。无论消费者连接到哪个节点,消费者都会连接到主节点,镜像会丢弃主节点已确认的消息。因此,队列镜像增强了可用性,但不会在节点之间分配负载(所有参与的节点各自完成所有工作)。

    【讨论】:

      猜你喜欢
      • 2015-04-20
      • 1970-01-01
      • 2019-04-02
      • 2014-09-18
      • 1970-01-01
      • 1970-01-01
      • 2015-03-20
      • 1970-01-01
      • 2015-09-21
      相关资源
      最近更新 更多