第 14 章 设置代理集群
集群由多个代理实例组成,这些代理实例分组在一起。代理集群通过在多个代理间分布消息处理负载来提高性能。此外,代理集群可通过高可用性最大限度地减少停机时间。
您可以在许多不同的集群拓扑中将代理连接在一起。在集群中,每个活跃代理管理自己的消息并处理自己的连接。
您还可以平衡集群中的客户端连接并重新分发消息,以避免代理不足。
14.1. 了解代理集群
在创建代理集群前,您应该了解一些重要的集群概念。
14.1.1. 代理集群均衡消息负载
当代理被连接组成集群时,AMQ Broker 会自动在代理之间平衡消息负载。这样可确保集群能够维护高消息吞吐量。
考虑由四个代理组成的对称集群。每个代理都配置了一个名为 OrderQueue
的队列。OrderProducer
客户端连接到 Broker1
,并将消息发送到 OrderQueue
。Broker1
以轮循方式将消息转发到其他代理。连接到各个代理的 OrderConsumer
客户端会使用消息。确切的顺序取决于代理的启动顺序。
图 14.1. 消息负载平衡
如果没有消息负载均衡,发送到 Broker1
的消息将保留在 Broker1
中,只有 OrderConsumer1
才可以使用它们。
虽然 AMQ Broker 默认自动对信息进行负载均衡,但您可以配置:
- 用于向具有匹配队列的代理平衡消息的集群。
- 集群用于向具有与活跃使用者匹配队列的代理平衡消息。
- 群集以不进行负载平衡,而是执行从没有使用者到有使用者队列的队列中重新分发消息。
- 个地址,用于自动重新分发队列中不包含任何消费者的具有消费者的队列的消息。
其它资源
-
消息负载平衡策略通过每个代理的集群连接中的
message-load-balancing
属性进行配置。如需更多信息,请参阅 附录 C, 集群连接配置元素。 - 有关重新发布消息的详情请参考 第 14.4.2 节 “配置消息重新发布”。
14.1.2. 代理集群如何提高可靠性
代理集群使高可用性和故障转移成为可能,这使其比独立代理更可靠。通过配置高可用性,您可以确保客户端应用程序可以继续发送和接收消息,即使代理遇到故障事件。
借助高可用性,集群中的代理被分组为 live-backup 组。live-backup 组包括服务客户端请求的 live 代理,以及一个或多个被动等待替换 live 代理(如果 live 代理失败)的备份代理。如果发生故障,备份代理将替换其 live-backup 组中的 live 代理,客户端重新连接并继续工作。
14.1.3. 了解节点 ID
代理 节点 ID 是首次创建并初始化代理实例日志时,以编程方式生成的全局唯一标识符(GUID)。节点 ID 存储在 server.lock
文件中。节点 ID 用于唯一标识代理实例,无论代理是独立实例还是集群的一部分。实时备份代理对共享相同的节点 ID,因为它们共享相同的日志。
在代理集群中,代理实例(节点)互相连接,并创建网桥和内部"存储转发"队列。这些内部队列的名称基于其他代理实例的节点 ID。代理实例还会监控集群广播中与自己的节点 ID 匹配的节点 ID。如果代理标识了重复的 ID,则代理会在日志中生成警告消息。
当您使用复制高可用性(HA)策略时,启动并会将 check-live-server
设置为 true
的 master 代理会搜索正在使用其节点 ID 的代理。如果 master 代理使用相同的节点 ID 找到另一个代理,它不会启动,或者会根据 HA 配置启动故障恢复。
节点 ID 持久化,即代理重启后它保留下来。但是,如果您删除了代理实例(包括其日志),则节点 ID 也会被永久删除。
其它资源
- 有关配置复制 HA 策略的更多信息,请参阅配置复制高可用性。
14.1.4. 通用代理集群拓扑
您可以连接代理形成 对称 或 链 集群拓扑。您实施的拓扑取决于您的环境和消息传递要求。
对称集群
在对称集群中,每个代理都连接到所有其他代理。这意味着每个代理不会超过一个与其他代理的跃点。
图 14.2. 对称集群
对称集群中的每个代理都了解集群中所有其他代理上存在的所有队列,以及侦听这些队列的用户。因此,对称集群可以比链集群更优地负载平衡和重新分发消息。
对称集群比链集群更容易设置,但可能很难在网络限制阻止代理被直接连接的环境中使用。
链集群
在链集群中,集群中的每个代理都不直接连接到集群中的每个代理。相反,代理形成一个链,在链的每个端都有一个代理,所有其他代理都只连接到链中的之前和下一个代理。
图 14.3. 链集群
链集群比对称集群更难设置,但当代理位于单独的网络中且无法直接连接时,可以使用。通过使用链集群,中间代理可以间接连接两个代理,使消息在它们之间流动,即使两个代理没有直接连接。
14.1.5. 代理发现方法
发现是集群中的代理相互传播其连接详情的机制。AMQ Broker 支持 动态发现和 静态发现。
动态发现
群集中的每个代理通过 UDP 多播或 JGroups 将其连接设置广播给其他成员。在这个方法中,每个代理使用:
- 个 广播组,将有关其集群连接的信息推送到集群的其他潜在成员。
- 个用于接收和存储集群中其他代理的集群连接信息的 发现组。
静态发现
如果您无法在网络中使用 UDP 或 JGroups,或者要手动指定群集的每个成员,您可以使用静态发现。在这个方法中,一个代理"加入"集群的方式是连接到第二个代理并发送其连接详情。然后,第二个代理将这些详情传播到集群中的其他代理。
14.1.6. 集群大小注意事项
在创建代理集群前,请考虑消息传递吞吐量、拓扑和高可用性要求。这些因素会影响集群中要包括的代理数量。
创建集群后,您可以通过添加和删除代理来调整大小。您可以在不丢失任何信息的情况下添加和删除代理。
消息传递吞吐量
集群应包含足够的代理,以提供您需要的消息传递吞吐量。集群中的代理越多,吞吐量越高。但是,大型集群可能难以管理。
Topology
您可以创建对称集群或链集群。您选择的拓扑类型会影响您可能需要的代理数量。
如需更多信息,请参阅 第 14.1.4 节 “通用代理集群拓扑”。
高可用性
如果您需要高可用性(HA),请在创建集群前考虑选择 HA 策略。HA 策略会影响集群的大小,因为每个 master 代理应至少有一个从代理。
如需更多信息,请参阅 第 14.3 节 “实施高可用性”。