如果 ActiveMQ Artemis 集群在 Kubernetes 环境中 运行,备份节点运行是否需要 ON_DEMAND 负载平衡?
If ActiveMQ Artemis cluster is running in a Kubernetes environment, is the ON_DEMAND load-balancing required for a backup-node to operate?
Kubernetes 配置
活节点的 Kuberenetes StatefulSet(replicas=2):
live-node1
(与 backup-node1
配对以获得 HA)
live-node2
(与 backup-node2
配对以获得 HA)
实时节点的 Kubernetes 服务:
live-node
备份节点的 Kuberenetes StatefulSet(replicas=2):
backup-node1
backup-node2
备份节点的 Kubernetes 服务:
backup-node
注意:客户端(Publisher/Consumer)始终通过 K8s 服务连接到集群 - live-node
场景
client1
连接到 live-node1
live-node1
下降
backup-node1
接手
client1
将尝试通过 K8s 服务重新连接 - live-node
- 它要么连接回
live-node1
(如果它已备份),要么最终连接到 live-node2
- 在后一种情况下,现有消息和新消息将如何被消费和发布??
我的理解
live-node1
的所有客户端将连接到 live-node2
- 由于
backup-node1
上没有消费者,现有消息将重新分发给 live-node2
- 新消息将从
live-node2
发送和使用
请详细说明此行为,如果我错了请纠正我。
严格来说,cluster-connection
上配置的 message-load-balancing
类型与备份的工作方式完全无关。顾名思义,message-load-balancing
类型与消息在群集周围的 load-balanced 方式有关。备份的行为方式由您配置的 ha-policy
决定。
备份的全部意义在于,当活动节点发生故障时,连接到活动节点的所有客户端都将 fail-over 到备份节点。此外,备份节点将拥有与活动节点相同的所有消息(通过复制或共享存储)。因此,当 live-node1
失败时,您期望所有连接到 live-node1
的客户端都将连接到 live-node2
是错误的。
也就是说,如果 客户端确实连接到 live-node2
而不是 backup-node1
那么 message-load-balancing
类型需要是 ON_DEMAND
如果您希望消息最终从 backup-node1
重新分发到 live-node2
。显然 redistribution-delay
也需要大于 0。
Kubernetes 配置
活节点的 Kuberenetes StatefulSet(replicas=2):
live-node1
(与backup-node1
配对以获得 HA)live-node2
(与backup-node2
配对以获得 HA)实时节点的 Kubernetes 服务:
live-node
备份节点的 Kuberenetes StatefulSet(replicas=2):
backup-node1
backup-node2
备份节点的 Kubernetes 服务:
backup-node
注意:客户端(Publisher/Consumer)始终通过 K8s 服务连接到集群 - live-node
场景
client1
连接到live-node1
live-node1
下降backup-node1
接手client1
将尝试通过 K8s 服务重新连接 -live-node
- 它要么连接回
live-node1
(如果它已备份),要么最终连接到live-node2
- 在后一种情况下,现有消息和新消息将如何被消费和发布??
我的理解
live-node1
的所有客户端将连接到live-node2
- 由于
backup-node1
上没有消费者,现有消息将重新分发给 - 新消息将从
live-node2
发送和使用
live-node2
请详细说明此行为,如果我错了请纠正我。
严格来说,cluster-connection
上配置的 message-load-balancing
类型与备份的工作方式完全无关。顾名思义,message-load-balancing
类型与消息在群集周围的 load-balanced 方式有关。备份的行为方式由您配置的 ha-policy
决定。
备份的全部意义在于,当活动节点发生故障时,连接到活动节点的所有客户端都将 fail-over 到备份节点。此外,备份节点将拥有与活动节点相同的所有消息(通过复制或共享存储)。因此,当 live-node1
失败时,您期望所有连接到 live-node1
的客户端都将连接到 live-node2
是错误的。
也就是说,如果 客户端确实连接到 live-node2
而不是 backup-node1
那么 message-load-balancing
类型需要是 ON_DEMAND
如果您希望消息最终从 backup-node1
重新分发到 live-node2
。显然 redistribution-delay
也需要大于 0。