【问题标题】:Should I have multiple rabbitmq brokers to load balance work?我应该有多个rabbitmq 代理来负载平衡工作吗?
【发布时间】:2014-10-03 01:24:38
【问题描述】:

我的应用程序启动了大量安装了 celery 和 rabbitmq 的 EC2 机器。目前我的所有机器都充当工人,除了一台机器单独充当rabbitmq经纪人。我所有机器的 celeryconfig 文件基本上都指向那个 rabbitmq 代理。

我在我的配置中启用了集群和 HA 队列,并且我指定了一定数量的机器来镜像磁盘中的队列。我的问题是:我应该指定多个rabbitmq 代理而不是一个吗?假设我指定了两台代理机器——然后我的 celery 工作人员的一半将指向一个代理,另一半将指向另一个。

我不想指定多个代理,除非只有一个代理会在一个代理过度工作时导致瓶颈(这可能吗)?

编辑:我启用集群的原因是指定另一台机器作为代理,以防主机器出现故障。

【问题讨论】:

  • 当前配置是否存在性能问题?
  • 目前没有,但我还没有投入生产,我处于测试阶段。我想知道将来是否可能会出现问题,因为我现在正在设计架构,而实现多代理架构需要对我的应用程序的很多部分进行重组。
  • 所以更新:我遇到了兔子节点因负载过大而下降的问题。
  • 我没有在 RabbitMQ 中使用过这些功能,但我怀疑它是基于 Erlang 构建的,这使得它在某种程度上是内置的。我必须先尝试一下,然后才能对它提出建议。

标签: rabbitmq celery django-celery


【解决方案1】:

我认为这取决于以下考虑

  • 吞吐量和热点?太多消息在队列上发布/使用?还是工人超负荷?
  • MQ 节点上的高可用性和负载平衡? tcp 负载均衡器可以充当 HA,此时可以更改负载均衡器和节点编号,而不是更改所有 MQ 客户端,这样当 MQ 节点之一关闭时,所有工作人员都不会失去连接。

【讨论】:

  • 这绝对是代理过载,可能是队列上的消息太多。我没有使用负载均衡器,而是遍历 HA 节点列表并修改 celeryconfig 以在当前节点出现故障时指向另一个节点。
  • 我有一个 cronjob 正在运行,如果 celeryconfig 中的代理已死,它将修改 celery 配置以指向一个活着的代理。所以它是自动的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-05
  • 2022-01-10
  • 2015-03-28
  • 2011-02-17
  • 2018-02-17
  • 1970-01-01
  • 2016-05-29
相关资源
最近更新 更多