> For the complete documentation index, see [llms.txt](https://docs.console.zenlayer.com/welcome/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.console.zenlayer.com/welcome/cn/elastic-compute/01-overview.md).

# 高可用虚拟 IP

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

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

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

![HAVIP 是一个子网内任意实例都可声明的浮动私有 IP](/files/XwWT8fOsa32YaQydUuIm)

***

## 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 只是其下层的网络支撑。[使用场景](/welcome/cn/elastic-compute/01-overview/04-use-cases.md)一章将逐一详细介绍这些模式。

HAVIP 将流量发送给**当前唯一**持有它的实例——它是故障转移机制，而非负载均衡机制。如果您希望将流量*分发*到多个实例，并由平台执行健康检查，请使用[负载均衡器](/welcome/cn/elastic-compute/load-balancing.md)。两者可以良好结合：自建的 LVS 层往往*就*是部署在 HAVIP 之后的角色。

***

## HAVIP 的归属

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

* 虚拟 IP 取自子网的 CIDR，不能迁移到其他子网、VPC、可用区或地域。
* 任何要声明 HAVIP 的实例都必须在同一子网内拥有 [vNIC](/welcome/cn/elastic-compute/networking/network-interface.md)——只有位于该子网的实例才能持有该子网内的地址。

***

## 下一步

* [**HAVIP 工作原理**](/welcome/cn/elastic-compute/01-overview/02-how-it-works.md)——VIP 背后的广播域与故障转移序列。
* [**EIP 绑定到 HAVIP**](/welcome/cn/elastic-compute/01-overview/03-eip.md)——为面向公网的服务在 HAVIP 之前增加 EIP。
* [**使用场景**](/welcome/cn/elastic-compute/01-overview/04-use-cases.md)——LVS、数据库、代理、网关与 Kubernetes 的具体部署方式。

***

## 常见问题

**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 将流量发送给当前唯一持有它的实例——它是故障转移机制，而非负载均衡机制。如果您希望将流量*分发*到多个实例，并由平台执行健康检查，请使用[负载均衡器](/welcome/cn/elastic-compute/load-balancing.md)。在 HAVIP 之后部署自建 LVS 层可以将两者良好结合。

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