For the complete documentation index, see llms.txt. This page is also available as Markdown.

高可用虚拟 IP

部分软件围绕虚拟 IP 自行实现高可用——一组服务器共享同一个地址,并在节点故障时在彼此之间切换。LVS(内核级负载均衡器)、keepalived 主备对,以及 Kubernetes VIP 都采用这种方式。

在常规云网络中,这类软件无法正常工作。VPC 网络会丢弃这些工具所依赖的广播和多播流量,也不会将报文转发到某个实例自行声明的地址上。

高可用虚拟 IP(HAVIP) 正是 ZEC 为解除这一限制而提供的功能。

HAVIP 是一个子网内任意实例都可声明的浮动私有 IP

ZEC 提供的能力

HAVIP 是一个预留在子网内、不固定绑定到任何单一实例的私有 IP。它在子网级别生效:一旦 HAVIP 存在,该子网内的任何实例都可以运行故障转移软件并声明该地址。

平台为基于 VIP 的工具提供其所需的两项能力:

  • 浮动地址。 HAVIP 可由子网内的任意实例持有。网络将 HAVIP 流量发送至当前持有该地址的实例,并在持有者变更时跟随迁移。

  • 支持广播和多播的子网。 HAVIP 所在的子网承载故障转移软件所依赖的广播和多播流量——例如 VRRP 通告(单播或多播)、免费 ARP 等。


适用场景

HAVIP 的目的是让基于虚拟 IP 的 HA 软件能够在 ZEC 上运行:

  • LVS——内核级负载均衡器,其服务 VIP 在一对调度器之间浮动。

  • keepalived 主备对——任意两节点服务(数据库主备、代理、网关)共享同一地址,存活节点接管该地址。

  • Kubernetes——控制平面的浮动端点,或通过 MetalLB、kube-vip 等 L2 机制发布的 Service IP。

在所有这些场景中,软件本身已具备选主和发布 VIP 的能力。HAVIP 只是其下层的网络支撑。使用场景一章将逐一详细介绍这些模式。

HAVIP 将流量发送给当前唯一持有它的实例——它是故障转移机制,而非负载均衡机制。如果您希望将流量分发到多个实例,并由平台执行健康检查,请使用负载均衡器。两者可以良好结合:自建的 LVS 层往往是部署在 HAVIP 之后的角色。


HAVIP 的归属

HAVIP 在一个子网内创建,并通过该子网归属于一个 VPC、一个地域。这种归属关系终身固定:

  • 虚拟 IP 取自子网的 CIDR,不能迁移到其他子网、VPC、可用区或地域。

  • 任何要声明 HAVIP 的实例都必须在同一子网内拥有 vNIC——只有位于该子网的实例才能持有该子网内的地址。


下一步


常见问题

ZEC 会决定哪个实例持有 HAVIP 吗? 不会。平台从不选举持有者——这由您的故障转移软件决定(keepalived/VRRP、kube-vip、LVS 调度器脚本)。ZEC 仅观察子网上的通告,并将网络指向当前声明该地址的实例。

HAVIP 可以迁移到其他子网、VPC 或地域吗? 不可以。HAVIP 在一个子网内创建,并通过该子网归属于一个 VPC、一个地域。这种归属关系终身固定——虚拟 IP 取自子网的 CIDR,无法转移到其他位置。

HAVIP 必须搭配 EIP 才能工作吗? 不需要。HAVIP 自身可在 VPC 内独立工作——这是内部 LVS、数据库 VIP、Kubernetes 控制平面端点以及自建网关的常见场景。仅当 HA 服务需要接受公网流量时才需要绑定 EIP。

两个实例可以同时持有同一个 HAVIP 吗? 不可以。任何时刻最多只能有一个持有者。网络会将 HAVIP 指向最近声明所有权的实例,因此单一持有权必须由您的故障转移软件保证——对于数据库等有状态服务,还需要在新持有者接管之前对旧持有者进行 fence。仅靠 VRRP 优先级并不构成 fence 机制。

HAVIP 故障转移有多快? 这取决于您的软件,而非平台。VRRP 通告间隔和死亡定时器决定备节点何时提升自身;新持有者发出通告后,网络会在子网内迅速重新指向。请根据您的服务所需的切换速度,在客户端调整相关定时器。

HAVIP 能否用于将流量负载均衡到多个实例? 不能。HAVIP 将流量发送给当前唯一持有它的实例——它是故障转移机制,而非负载均衡机制。如果您希望将流量分发到多个实例,并由平台执行健康检查,请使用负载均衡器。在 HAVIP 之后部署自建 LVS 层可以将两者良好结合。

故障转移时 EIP 会怎样? 不会发生任何变化——EIP 绑定的是 HAVIP,而不是实例。HAVIP 在底层重新指向新的持有者,EIP 仍指向 HAVIP。即使实例故障,公网地址也保持不变。

最后更新于