在 ActiveMQ Artemis HA 集群 (v2.13.0) 中,<scale-down/>
如果主实例发生故障,HA 策略的属性会导致备份代理将所有待处理消息移至剩余的活动实例之一。一旦耗尽,从属代理就会自行停止并等待主实例再次上线。即使只有一个主代理发生故障,此行为也会有效减少集群中的代理对数量。对吗?
如果<scale-down/>
未设置该属性,则从属代理在主代理发生故障时变为活动代理,并且集群中的活动代理数量不会发生变化。但是,我想知道如果故意关闭(即SIGTERM
),活动备份实例是否仍会将待处理消息移动到其他代理。此行为将在故意关闭代理的情况下保留所有消息,同时在发生故障时保持活动代理的数量。
答案1
即使只有一个主代理发生故障,此行为也会有效减少集群中的代理对数量。对吗?
没错。
当未设置该属性时,主代理发生故障时,从属代理将变为活动代理,并且集群中活动代理的数量不会改变。
这也是正确的。
但是,我想知道如果故意关闭(即 SIGTERM),实时备份实例是否仍会将待处理的消息移动到其他代理。
如果scale-down
未配置则不会移动任何消息。
缩减功能实际上是为云用例设计的,其中仅限直播集群会根据需求增长和收缩。当集群收缩时,即将消失的代理需要一种方法来保存其消息,以便将其转储到集群中的另一个代理。此外,由于云本身提供的管理和冗余,云基础设施通常会使 HA 配置变得毫无意义。例如,如果某个节点发生故障,那么云基础设施可以简单地重新启动它。在这种情况下,代理可以简单地重新连接到它之前使用的任何存储,并且崩溃(或其他)之前存在的所有持久消息仍将存在。
在我看来,虽然在技术上可以在具有实时和备份的 HA 配置中使用缩小规模,但我认为这样做没有多大意义,因为实时和备份已经共享消息数据(通过共享存储或复制)。
最后,值得注意的是,可以使用ActiveMQServerControl
MBean 以管理方式执行缩小操作。