我了解排队服务如何独立工作,但我不明白它在集群上如何工作?
如果一个队列发生故障,是否将相同的消息发送到每个队列以减轻损害?还是对每个队列进行负载平衡?
此外,如果它们在每个队列上都进行了负载平衡,这是否消除了对 Celery 等服务的需求?
谢谢
来自 rabbitmq 官方文档:
1 - 像 RabbitMQ 这样的排队服务如何在集群上运行?
聚类
RabbitMQ 代理运行所需的所有数据/状态是 跨所有节点复制。消息队列是一个例外, 默认情况下驻留在一个节点上,尽管它们是可见的并且 可从所有节点访问。在 集群,请参阅有关高可用性的文档(注意:本指南 是镜像的先决条件(。
节点是平等的对等节点 一些分布式系统有领导者和 从属节点。对于 RabbitMQ 来说,通常并非如此。中的所有节点 一个 RabbitMQ 集群是平等的对等节点:在 兔子MQ核心。队列镜像时,本主题变得更加微妙 和插件被考虑在内,但对于大多数意图和 目的,应将所有群集节点视为相等
2 - 如果一个队列发生故障,是否将相同的消息发送到每个队列以减轻损害?
队列镜像
默认情况下,RabbitMQ 集群中的队列内容位于 在单个节点(声明队列的节点(上。这是 与交换和绑定相反,交换和绑定总是可以考虑的 位于所有节点上。可以选择跨队列进行镜像 多个节点。
每个镜像队列由一个主队列和一个或多个镜像队列组成。 主节点托管在一个节点上,通常称为主节点。 每个队列都有自己的主节点。给定队列的所有操作 首先应用于队列的主节点,然后传播到 镜子。这涉及将发布排队,将消息传递到 消费者,跟踪来自消费者的确认等。
队列镜像意味着节点群集。因此不是 建议跨 WAN 使用(当然,客户端仍然可以 根据需要从附近和最远连接(。
发布到队列的消息将复制到所有镜像。 使用者连接到主节点,无论它们在哪个节点 连接到,镜像丢弃已确认的消息 在主人。因此,队列镜像增强了可用性,但 不跨节点分配负载(所有参与节点都这样做( 所有的工作(。
如果托管队列主节点的节点发生故障,则最早的镜像将是 只要同步,就会提升为新主节点。未同步 镜像也可以升级,具体取决于队列镜像参数。
有多个术语通常用于标识主要和 分布式系统中的次要副本。本指南通常使用 "master"表示队列的主副本,"镜像"表示 次要副本。但是,您会发现此处使用了"奴隶"和 那里。这是因为 RabbitMQ CLI 工具历来一直在使用 术语"从属"是指次要。因此,这两个术语都是 目前可互换使用,但我们希望最终摆脱 旧术语。
获取更多信息 : https://www.rabbitmq.com/clustering.html