第 16 章 设置代理集群


集群由多个代理实例组成,它们被分组在一起。代理集群通过在多个代理之间分布消息处理负载来增强性能。另外,代理集群也可以通过高可用性最小化。

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

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

16.1. 了解代理集群

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

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

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

考虑四个代理的对称集群。每个代理都配置有名为 OrderQueue 的队列。OrderProducer 客户端连接到 Broker1,并将消息发送到 OrderQueueBroker1 以 round-robin 模式将消息转发到其他代理。连接到每个代理的 OrderConsumer 客户端会使用信息。具体顺序取决于代理启动的顺序。

图 16.1. 消息负载均衡

消息在集群中的代理中平衡负载

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

虽然 AMQ Broker 会默认自动负载均衡消息,但您可以将集群配置为仅对具有匹配消费者的代理进行负载平衡的消息。您还可以将消息重新分发为没有使用者的队列自动分发消息到具有使用者的队列。

其他资源

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

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

借助高可用性功能,集群中的代理被分成 live-backup 组。live-backup 组包含一个提供客户端请求的 live 代理,以及在失败时等待被动替换 live 代理的一个或多个备份代理。如果发生故障,备份代理会替换其 live-backup 组中的 live 代理,客户端重新连接并继续工作。

16.1.3. 了解节点 ID

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

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

当您使用复制高可用性(HA)策略时,启动并有 check-for-live-server 设置为 true 的 master 代理会搜索使用其节点 ID 的代理。如果 master 代理使用相同的节点 ID 找到另一个代理,它不会启动,或者根据 HA 配置启动失败。

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

其他资源

16.1.4. 常见代理集群拓扑

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

对称集群

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

图 16.2. 对称集群

在每个代理都连接到所有其他代理的四对代理集群中,每个代理都连接到每个代理

对称集群中的每个代理都了解到集群中每个代理都存在的所有队列,以及侦听这些队列的用户。因此,对称集群可以比链集群更好地加载和重新分发消息。

对称集群设置比链集群更容易,但在这种环境中,网络限制会阻止代理直接连接。

链集群

在链集群中,集群中的每个代理都没有直接连接到集群中的每个代理。相反,代理会在链的每个末尾均使用代理组成链,所有其他代理都只连接到链中上一个和下一个代理。

图 16.3. 链集群

在四个代理链集群中,代理在链中连接

链集群比对称集群更容易设置,但当代理位于单独的网络且无法直接连接到时,可以使用链集群。通过使用链集群,中间代理可以间接连接两个代理,即使两个代理没有直接连接。

16.1.5. 代理发现方法

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

动态发现

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

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

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

16.1.6. 集群大小注意事项

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

注意

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

消息传递吞吐量

集群应该有足够的代理来提供您需要的消息吞吐量。集群中的代理数量越多,吞吐量越大。但是,大型集群可能很复杂,难以管理。

Topology

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

如需更多信息,请参阅 第 16.1.4 节 “常见代理集群拓扑”

高可用性

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

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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.