kubernetes - 如果 ActiveMQ Artemis 集群在 Kubernetes 环境中运行,备份节点是否需要 ON_DEMAND 负载平衡才能运行?
问题描述
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
注意:客户端(发布者/消费者)总是通过 K8s 服务连接到集群 -live-node
设想
client1
连接到live-node1
live-node1
下跌降落backup-node1
接手client1
将尝试通过 K8s 服务重新连接 -live-node
- 它要么连接回
live-node1
(如果它已备份)要么最终连接到live-node2
- 在后一种情况下,现有消息和新消息将如何被消费和发布?
我的理解
- 的所有客户端都
live-node1
将连接到live-node2
- 现有消息将被重新分发给
live-node2
没有消费者backup-node1
- 新消息将被发送到并从
live-node2
如果我错了,请详细说明这种行为并纠正我。
解决方案
严格来说message-load-balancing
,您配置的类型cluster-connection
与备份的工作方式完全无关。message-load-balancing
顾名思义,该类型与消息在集群中的负载平衡方式有关。备份的行为方式由ha-policy
您配置的决定。
备份的全部意义在于,当活动节点发生故障时,连接到活动节点的所有客户端都将故障转移到备份节点。此外,备份节点将拥有与活动节点相同的所有消息(通过复制或共享存储)。因此,您期望所有连接的客户端在失败时live-node1
都会连接是错误的。live-node2
live-node1
也就是说,如果客户端确实连接到live-node2
而不是,backup-node1
那么如果您希望消息最终从to重新分配,则message-load-balancing
类型需要是。显然,也需要大于 0。ON_DEMAND
backup-node1
live-node2
redistribution-delay