问题描述
Kubernetes配置
-
活动节点的Kuberenetes StatefulSet(replicas = 2):
live-node1
(与HA的backup-node1
配对)live-node2
(与HA的backup-node2
配对) -
活动节点的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
,则message-load-balancing
类型必须为ON_DEMAND
所需的消息最终从backup-node1
重新分配到live-node2
。显然,redistribution-delay
也需要大于0。