第 14 章 设置代理集群


集群由多个已分组在一起的代理实例组成。代理(broker)集群通过将消息处理负载分布到多个代理来提高性能。另外,代理集群可以通过高可用性来最小化停机时间。

您可以在许多不同的集群拓扑中连接代理。在集群中,每个活跃代理管理自己的信息并处理自己的连接。

您还可以在集群中平衡客户端连接,并重新分发信息以避免代理不足。

14.1. 了解代理集群

在创建代理集群前,您应该了解一些重要的集群概念。

14.1.1. 代理集群如何平衡消息负载

当代理连接到组成集群时,AMQ Broker 会自动平衡代理之间的消息负载。这样可确保集群可以维护高消息吞吐量。

考虑四个代理的对称集群。每个代理都配置有一个名为 OrderQueue 的队列。OrderProducer 客户端连接到 Broker1,并将消息发送到 OrderQueueBroker1 以轮循方式将消息转发到其他代理。连接到每个代理的 OrderConsumer 客户端会使用消息。

图 14.1. 集群中的消息负载均衡

如果没有消息负载均衡,发送到 Broker1 的消息将保留在 Broker1 上,只有 OrderConsumer1 才可以使用它们。

AMQ Broker 默认自动负载平衡信息,将第一个消息组分发到第一个代理,并将第二条消息组分发到第二个代理。启动代理的顺序决定了哪个代理是第一个,第二个,以此类推。

您可以配置:

  • 集群在具有匹配队列的代理中负载均衡消息。
  • 集群在具有活跃消费者匹配的队列的代理中负载均衡消息。
  • 集群不会进行负载平衡,但要执行从没有任何使用者没有消费者队列的队列重新分发消息。
  • 一个地址,用于自动将消息从没有任何消费者的队列重新分发到具有消费者的队列。

其他资源

14.1.2. 代理集群如何提高可靠性

代理集群实现高可用性和故障切换功能,这使得它们比独立代理更可靠。通过配置高可用性,您可以确保客户端应用程序可以继续发送和接收信息,即使代理遇到失败事件。

通过高可用性,集群中的代理被分组到主备份组中。primary-backup 组包含一个提供客户端请求的活跃代理,以及等待被动替换活跃代理(如果失败)的一个或多个备份代理。如果发生失败,被动代理会替换其 primary-backup 组中的活跃代理,客户端会重新连接并继续其工作。

14.1.3. 集群限制

在集群环境中使用 AMQ 代理时,会有以下限制。

临时队列
在故障转移期间,如果客户端有使用临时队列的用户,则会自动重新创建这些队列。重新创建的队列名称与原始队列名称不匹配,这会导致消息重新发布失败,并可能让消息在现有临时队列中保留。红帽建议您避免在集群中使用临时队列。例如,使用请求/回复模式的应用程序应该将固定队列用于 JMSReplyTo 地址。

14.1.4. 了解节点 ID

当代理实例的日志首次创建和初始化时,代理 节点 ID 是以编程方式生成的全局唯一标识符(GUID)。节点 ID 存储在 server.lock 文件中。节点 ID 用于唯一标识代理实例,无论代理是独立实例还是集群的一部分。主备份代理对共享相同的节点 ID,因为它们共享相同的日志。

在代理集群中,代理实例(节点)相互连接,并创建网桥和内部的 "store-and-forward" 队列。这些内部队列的名称基于其他代理实例的节点 ID。代理实例还监控集群广播,以获取与其自身匹配的节点 ID。如果代理标识重复的 ID,则代理会在日志中生成警告信息。

当您使用复制高可用性(HA)策略时,启动的主代理,并将 check-for-active-server 设置为 true 搜索使用其节点 ID 的代理。如果主代理使用同一节点 ID 找到另一个代理,则它不会根据 HA 配置启动或启动故障恢复。

节点 ID 是持久的,这意味着它在代理重启后保留。但是,如果您删除代理实例(包括其日志),则节点 ID 也会永久删除。

其他资源

14.1.5. 常见代理集群拓扑

您可以连接代理来形成 对称 集群拓扑。您实现的拓扑取决于您的环境和消息传递要求。

对称集群

在对称集群中,每个代理都连接到所有其他代理。这意味着每个代理都没有多于其它代理的跃点。

图 14.2. 对称集群拓扑

对称集群中的每个代理都知道集群中其他代理上存在的所有队列,以及侦听这些队列的用户。因此,对称集群可以比链集群更最佳地对消息进行负载均衡和重新分发。

对称集群比链集群更容易设置,但很难在网络限制阻止代理被直接连接的环境中使用。

链集群

在链集群中,集群中的每个代理都不直接连接到集群中的每个代理。相反,代理在每个链的末尾使用代理形成一个链,所有其他代理只是连接到链中之前的和下一个代理。

图 14.3. 链集群拓扑

链集群设置比对称集群更困难,但当代理位于单独的网络上,且无法直接连接时很有用。通过使用链集群,中间代理可以间接连接两个代理,以便在它们之间流动信息,即使两个代理没有直接连接。

14.1.6. 代理发现方法

发现是集群中的代理将其连接详情传播到不同的机制。AMQ Broker 支持 动态发现 和静态发现

动态发现

集群中的每个代理通过 UDP 多播或 JGroups 将其连接设置广播到其他成员。在这个方法中,每个代理都使用:

  • 一个 广播组,将有关其集群连接的信息推送到集群的其他潜在成员。
  • 一个 发现组,用于接收并存储集群中其他代理的集群连接信息。
静态发现

如果您无法在网络中使用 UDP 或 JGroups,或者要手动指定集群的每个成员,您可以使用静态发现。在这个方法中,代理"加入"集群通过连接到第二个代理并发送其连接详情。然后,第二个代理会将这些详情传播到集群中的其他代理。

14.1.7. 集群大小注意事项

在创建代理集群前,请考虑您的消息传递吞吐量、拓扑和高可用性要求。这些因素会影响集群中要包含的代理数量。

注意

创建集群后,您可以通过添加和删除代理来调整大小。您可以在不丢失任何信息的情况下添加和删除代理。

消息传递吞吐量

集群应包含足够的代理来提供您需要的消息传递吞吐量。集群中的代理越多,吞吐量越好。但是,大型集群管理可能比较复杂。

Topology

您可以创建对称集群或链集群。您选择的拓扑类型会影响您可能需要的代理数量。

更多信息请参阅 第 14.1.5 节 “常见代理集群拓扑”

高可用性

如果您需要高可用性(HA),请在创建集群前考虑选择 HA 策略。HA 策略会影响集群的大小,因为每个主代理应至少有一个备份代理。

如需更多信息,请参阅 第 14.3 节 “实施高可用性”

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat