# 高可用虚拟 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。即使实例故障，公网地址也保持不变。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.console.zenlayer.com/welcome/cn/elastic-compute/01-overview.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
