全部產品
Search
文件中心

Virtual Private Cloud:高可用虛擬IP(HaVip)

更新時間:Jan 29, 2026

使用高可用虛擬IP(High-Availability Virtual IP Address,HaVip)功能,在雲上可以實現同可用性區域伺服器主備切換過程中服務IP不變。

Keepalived本身就可以支援實現虛擬IP高可用,為什麼要配合HaVip來實現?

在傳統資料中心中,Keepalived 軟體在進行主備切換時,基於 VRRP 協議確定新的主伺服器。新的主伺服器可以直接將虛擬IP綁定到自身網卡,並主動發送Gratuitous ARP廣播,宣告自己接管了虛擬IP。區域網路中的各裝置收到該 ARP 廣播後,會更新本地 ARP 快取,將虛擬IP指向新的主伺服器的MAC地址。

然而,大部分雲廠商採用SDN架構和虛擬化技術構建網路環境,虛擬伺服器IP地址由雲平台底層的虛擬化平台分配和管理。應用無法像傳統方式一樣修改主機IP地址。且整個虛擬網路是基於三層的隧道技術,ARP在發送端被終結,主機無法聲明IP地址。為此,阿里雲推出HaVip功能,解決此問題。

HaVip 是一種可以獨立建立和釋放的私網 IP 資源。在 Keepalived 的設定檔中將虛擬 IP 設定為 HaVip 地址,並將 HaVip 與多個伺服器綁定。當 Keepalived 選舉出新的主伺服器後,系統會更新 HaVip 與主伺服器的映射關係,實作類別似 Gratuitous ARP 的效果,從而確保主備切換過程中服務 IP 不變。

工作原理

通過1個HaVip和2個ECS執行個體實現高可用主備叢集的架構如下圖所示。工作原理如下:

  1. Keepalived配置:HaVip 綁定 ECS1 和 ECS2,二者均安裝 Keepalived軟體。在 Keepalived 的設定檔中,virtual_ipaddress(虛擬 IP)均設定為 HaVip 地址。同時,需要在設定檔中設定優先權priority,值越大,該伺服器作為主伺服器的優先順序越高。

  2. 主伺服器選舉:Keepalived 軟體基於 VRRP 協議,通過比較 ECS1 和 ECS2 的priority值大小,自動選舉優先順序更高的 ECS1 為主伺服器,系統會自動更新 HaVip 與主伺服器的映射關係,所有訪問 HaVip 的流量將被轉寄至 ECS1。

  3. 主備切換:主伺服器 ECS1 會周期性發送心跳訊息到備伺服器 ECS2(心跳間隔由設定檔中的advert_int決定)。如果 ECS2 在指定時間內未收到心跳訊息,Keepalived 軟體會自動將主伺服器切換為 ECS2。系統檢測到主伺服器變更後,會自動更新 HaVip 與新主伺服器的映射關係,所有訪問 HaVip 的流量將被轉寄至 ECS2,從而實現主備切換過程中服務IP不變。

如果需要公網訪問,可為HaVip綁定EIP,綁定後該HaVip可以通過EIP面向公網提供高可用服務。

image

使用 HaVip 實現主備切換

HaVip 支援綁定同一交換器內的ECS執行個體或彈性網卡,結合Keepalived等軟體實現主備切換時的服務 IP 不變。

  • 配額:使用前,需登入配額中心控制台申請建立 HaVip 的許可權。配額為1,代表可建立 HaVip,而單帳號支援建立 HaVip 的數量為 50 個。

  • IP 版本:HaVip 僅支援 IPv4。

  • 綁定資源:

    • HaVip 只能同時綁定同一類型資源。如需綁定其他類型資源,需先解除綁定已經綁定的資源。

    • HaVip 綁定彈性網卡時,需確保彈性網卡綁定在ECS執行個體上。

    • 如果已綁定的 ECS 執行個體或彈性網卡被刪除,系統會自動解除 HaVip 和對應 ECS 執行個體或彈性網卡的綁定關係。

    • 如果從 ECS 執行個體上解除綁定已綁定 HaVip 的輔助彈性網卡,不會影響 HaVip 和該輔助彈性網卡的綁定關係。

控制台

建立 HaVip 並綁定主備執行個體

  1. 前往專用網路控制台-HaVip,在頁面上方選擇 ECS 執行個體所在的地區後,單擊建立高可用虛擬IP

  2. 選擇需綁定的 ECS 執行個體所屬的 VPC 和交換器,可從選定的交換器網段自動分配私網 IP 位址,也可以自行指定未被分配的 IP。

  3. 在主備 ECS 執行個體上安裝 Keepalived,並執行systemctl start keepalived啟動 Keepalived。

    Keepalived 安裝樣本

    本樣本以雙機主備為例,介紹作業系統為CentOS的ECS執行個體如何安裝Keepalived。推薦使用V1.2.15及以上版本的Keepalived。

    如有多台備用 ECS 執行個體,需在各 ECS 執行個體的unicast_peer中聲明所有對端執行個體的 IP。
    可前往Keepalived GitHub瞭解更多資訊。

    主伺服器配置

    1. 登入主 ECS 執行個體。

    2. 執行yum install keepalived安裝Keepalived。

    3. 執行vim /etc/keepalived/keepalived.conf編輯keepalived.conf檔案。

      本樣本僅展示需修改部分,請結合具體執行個體修改keepalived.conf檔案配置。請勿直接複製本樣本覆蓋已有keepalived.conf檔案。
      ! Configuration File for keepalived
      vrrp_instance VI_1 {
          state MASTER            # 設定為主執行個體
          interface eth0          # 綁定VIP的網卡,本樣本配置為eth0  
          virtual_router_id 51    # 主備叢集的virtual_router_id;同一VPC下的不同主備叢集需要配置不同的virtual_router_id
          nopreempt               # 設定非搶佔模式
          priority 100            # 設定優先權,數字越大,優先順序越高;本樣本配置優先順序為100,將本執行個體設定為主執行個體
          advert_int 1            # 心跳報文發送間隔,單位為秒。設定過小,易受網路抖動影響,可能發生頻繁倒換和暫時雙主(即腦裂)。設定過大,可能導致主執行個體故障後,主備切換時間長。
          authentication {
              auth_type PASS
              auth_pass 1111
          }
          unicast_src_ip 192.168.0.25     # 本執行個體的私網IP地址,本樣本配置為192.168.0.25
          unicast_peer {
              192.168.0.26          # 對端執行個體的私網IP地址,本樣本配置為192.168.0.26;如有多台備用ECS執行個體,需聲明所有對端執行個體的IP,每個地址單獨佔一行,無需逗號或其他分隔字元。
          }
          virtual_ipaddress {
              192.168.0.24          # 虛擬IP地址,配置為HaVip的IP地址,本樣本為192.168.0.24
          }   
          garp_master_delay 1       # 當切為主執行個體後多久更新ARP緩衝,單位為秒
          garp_master_refresh 5     # 發送ARP報文的時間間隔,單位為秒
      
          track_interface {
              eth0                  # 綁定VIP的網卡,本樣本配置為eth0
          }
      }
    4. 執行systemctl start keepalived啟動 Keepalived。

    備伺服器配置

    1. 登入備 ECS 執行個體。

    2. 執行yum install keepalived安裝Keepalived。

    3. 執行vim /etc/keepalived/keepalived.conf編輯keepalived.conf檔案。

      本樣本僅展示需修改部分,請結合具體執行個體修改keepalived.conf檔案配置。請勿直接複製本樣本覆蓋已有keepalived.conf檔案。
      ! Configuration File for keepalived
      vrrp_instance VI_1 {
          state BACKUP            # 設定為備執行個體
          interface eth0          # 綁定VIP的網卡,本樣本配置為eth0  
          virtual_router_id 51    # 主備叢集的virtual_router_id;同一VPC下的不同主備叢集需要配置不同的virtual_router_id
          nopreempt               # 設定非搶佔模式
          priority 10             # 設定優先權,數字越大,優先順序越高;本樣本配置優先順序為10,將本執行個體設定為備執行個體
          advert_int 1            # 心跳報文發送間隔,單位為秒。設定過小,易受網路抖動影響,可能發生頻繁倒換和暫時雙主(即腦裂)。設定過大,可能導致主執行個體故障後,主備切換時間長。
          authentication {
              auth_type PASS
              auth_pass 1111
          }
          unicast_src_ip 192.168.0.26   # 本執行個體的私網IP地址,本樣本配置為192.168.0.26
          unicast_peer {
              192.168.0.25          # 對端執行個體的私網IP地址,本樣本配置為192.168.0.25。需聲明所有對端執行個體的IP,每個地址單獨佔一行,無需逗號或其他分隔字元。
          }
          virtual_ipaddress {
              192.168.0.24          # 虛擬IP地址,配置為HaVip的IP地址,本樣本為192.168.0.24
          }    
          garp_master_delay 1       # 當切為主執行個體後多久更新ARP緩衝,單位為秒
          garp_master_refresh 5     # 發送ARP報文的時間間隔,單位為秒
      
          track_interface {
              eth0                  # 綁定VIP的網卡,本樣本配置為eth0
          }
      }
    4. 執行systemctl start keepalived啟動 Keepalived。

  4. 單擊目標 HaVip ID,在綁定資源地區,單擊 ECS執行個體右側的立即綁定,選擇要綁定的 ECS 執行個體或彈性網卡。

    綁定完成後,可以在目標 HaVip 的綁定執行個體列或詳情頁的綁定資源地區,查看當前的主備關係。
  5. 效果驗證:

    1. 在主備執行個體分別執行以下命令,建立Web測試服務,返回不同結果。

      通過netstat -an | grep 8000查看連接埠佔用情況,如果8000連接埠被佔用,需要選擇其他連接埠。

      主執行個體:

      echo "ECS 1" > index.html  # 主執行個體返回"ECS 1"
      python3 -m http.server 8000

      備執行個體:

      echo "ECS 2" > index.html  # 備執行個體返回"ECS 2"
      python3 -m http.server 8000
    2. 在同 VPC 內的其他 ECS 執行個體中,執行curl <havip_private_ip>:8000,將返回ECS 1;當主伺服器停機後,將返回ECS 2

      請確保主備執行個體的安全性群組已允許同 VPC 內的 HTTP 流量訪問 8000 連接埠。

解除綁定資源

單擊目標 HaVip ID,在綁定資源地區已綁定處找到目標 ECS 執行個體或彈性網卡,單擊解除關聯

刪除 HaVip

需先確保 HaVip 未綁定 ECS執行個體、彈性網卡或 EIP,在目標 HaVip 的操作列或詳情頁單擊刪除

API

Terraform

Resource:alicloud_havipalicloud_havip_attachmentalicloud_instancealicloud_security_groupalicloud_security_group_rule
# 指定建立HaVip的地區
provider "alicloud" {
  region = "cn-hangzhou"
}

# 指定VPC的ID
variable "vpc_id" {
  default = "vpc-bp1k******" # 修改為VPC的實際ID
}

# 指定交換器ID
variable "vswitch_id" {
  default = "vsw-bp1y******" # 修改為交換器的實際ID
}

# 指定執行個體規格
variable "instance_type" {
  default = "ecs.e-c1m1.large"
}

# 指定鏡像ID
variable "image_id" {
  default = "aliyun_3_x64_20G_alibase_20221102.vhd"
}

# 建立HaVip
resource "alicloud_havip" "test_havip" {
  ha_vip_name = "test_havip_name"
  vswitch_id  = var.vswitch_id
  ip_address  = "192.168.0.24" # 從交換器網段內,指定HaVip的IP地址;若不指定,將由系統分配
}

# 建立安全性群組
resource "alicloud_security_group" "test_security_group" {
  security_group_name = "test_security_group_name"
  vpc_id              = var.vpc_id
}

# 建立安全性群組規則,需根據實際流量調整協議、訪問來源與連接埠。
resource "alicloud_security_group_rule" "allow_vpc_tcp" {
  type              = "ingress"
  ip_protocol       = "tcp"
  nic_type          = "intranet"
  policy            = "accept"
  port_range        = "8000/8000"
  priority          = 1
  security_group_id = alicloud_security_group.test_security_group.id
  cidr_ip           = "192.168.0.0/24"
}

# 建立主伺服器 
resource "alicloud_instance" "test_master_instance" {
  instance_name        = "test_master_instance_name"
  vswitch_id           = var.vswitch_id
  instance_type        = var.instance_type
  image_id             = var.image_id
  system_disk_category = "cloud_essd"
  security_groups      = [alicloud_security_group.test_security_group.id]
  user_data = base64encode(<<-EOT
    #!/bin/sh
    yum install keepalived -y

    printf '! Configuration File for keepalived
    vrrp_instance VI_1 {
        state MASTER            # 設定為主執行個體
        interface eth0          # 綁定VIP的網卡,本樣本配置為eth0  
        virtual_router_id 51    # 主備叢集的virtual_router_id;同一VPC下的不同主備叢集需要配置不同的virtual_router_id
        nopreempt               # 設定非搶佔模式
        priority 100            # 設定優先權,數字越大,優先順序越高;本樣本配置優先順序為100,將本執行個體設定為主執行個體
        advert_int 1            # 心跳報文發送間隔,單位為秒。設定過小,易受網路抖動影響,可能發生頻繁倒換和暫時雙主(即腦裂)。設定過大,可能導致主執行個體故障後,主備切換時間長。
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        unicast_src_ip 192.168.0.25     # 本執行個體的私網IP地址,本樣本配置為192.168.0.25
        unicast_peer {
            192.168.0.26                # 對端執行個體的私網IP地址,本樣本配置為192.168.0.26;如有多台備用ECS執行個體,需聲明所有對端執行個體的IP。每個地址單獨佔一行,無需逗號或其他分隔字元。
        }
        virtual_ipaddress {
            192.168.0.24                # 虛擬IP地址,配置為HaVip的IP地址,本樣本為192.168.0.24
        }   
        garp_master_delay 1             # 當切為主執行個體後多久更新ARP緩衝,單位為秒 
        garp_master_refresh 5           # 發送ARP報文的時間間隔,單位為秒 

        track_interface {
            eth0                        # 綁定VIP的網卡,本樣本配置為eth0
        }
    }' > /etc/keepalived/keepalived.conf
    systemctl start keepalived
  EOT
  )                                           # 指定主伺服器的初始化指令碼,為主伺服器安裝keepalived
  private_ip           = "192.168.0.25"       # 指定主伺服器的私網IP
  instance_charge_type = "PostPaid"           # 指定付費類型為隨用隨付
  spot_strategy        = "SpotWithPriceLimit" # 設定上限價格的搶佔式執行個體
}

# 建立備伺服器 
resource "alicloud_instance" "test_backup_instance" {
  instance_name        = "test_backup_instance_name"
  vswitch_id           = var.vswitch_id
  instance_type        = var.instance_type
  image_id             = var.image_id
  system_disk_category = "cloud_essd"
  security_groups      = [alicloud_security_group.test_security_group.id]
  user_data = base64encode(<<-EOT
    #!/bin/sh
    yum install keepalived -y

    printf '! Configuration File for keepalived
    vrrp_instance VI_1 {
        state BACKUP            # 設定為備執行個體
        interface eth0          # 綁定VIP的網卡,本樣本配置為eth0  
        virtual_router_id 51    # 主備叢集的virtual_router_id;同一VPC下的不同主備叢集需要配置不同的virtual_router_id
        nopreempt               # 設定非搶佔模式
        priority 10             # 設定優先權,數字越大,優先順序越高;本樣本配置優先順序為10,將本執行個體設定為備執行個體
        advert_int 1            # 心跳報文發送間隔,單位為秒。設定過小,易受網路抖動影響,可能發生頻繁倒換和暫時雙主(即腦裂)。設定過大,可能導致主執行個體故障後,主備切換時間長
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        unicast_src_ip 192.168.0.26   # 本執行個體的私網IP地址,本樣本配置為192.168.0.26
        unicast_peer {
            192.168.0.25          # 對端執行個體的私網IP地址,本樣本配置為192.168.0.25。需聲明所有對端執行個體的IP。每個地址單獨佔一行,無需逗號或其他分隔字元。
        }
        virtual_ipaddress {
            192.168.0.24          # 虛擬IP地址,配置為HaVip的IP地址,本樣本為192.168.0.24 
        }    
        garp_master_delay 1       # 當切為主執行個體後多久更新ARP緩衝,單位為秒 
        garp_master_refresh 5     # 發送ARP報文的時間間隔,單位為秒 

        track_interface {
            eth0                  # 綁定VIP的網卡,本樣本配置為eth0
        }
    }' > /etc/keepalived/keepalived.conf
    systemctl start keepalived
  EOT
  )                                           # 指定備伺服器的初始化指令碼,為備伺服器安裝keepalived
  private_ip           = "192.168.0.26"       # 指定備伺服器的私網IP 
  instance_charge_type = "PostPaid"           # 指定付費類型為隨用隨付
  spot_strategy        = "SpotWithPriceLimit" # 設定上限價格的搶佔式執行個體
}

# 綁定主伺服器
resource "alicloud_havip_attachment" "test_havip_attachment" {
  ha_vip_id   = alicloud_havip.test_havip.id
  instance_id = alicloud_instance.test_master_instance.id # 指定HaVip關聯的執行個體ID
}

# 綁定備伺服器
resource "alicloud_havip_attachment" "test_havip_attachment_new" {
  ha_vip_id   = alicloud_havip.test_havip.id
  instance_id = alicloud_instance.test_backup_instance.id # 指定HaVip關聯的執行個體ID
}

綁定 EIP 實現公網訪問

HaVip 是交換器內的私網 IP 資源,如需公網訪問,可以將 HaVip 與Elastic IP Address(EIP)綁定。EIP 的使用會產生費用

1、綁定的 EIP 地區需和 HaVip 的地區相同,且處於可用狀態。
2、ECS 執行個體藉助 HaVip 綁定的 EIP 訪問公網時,資料包的源 IP 為 HaVip 的私網IP,而非 ECS 執行個體的私網 IP。

控制台

綁定/解除綁定 EIP

綁定 EIP 前,確保已建立 EIP。可通過EIP 控制台建立 EIP,也可在綁定頁面,單擊建立Elastic IP Address

在目標 HaVip 的操作列,單擊綁定EIP解除綁定EIP,完成相應操作。

API

綁定 EIP 前,確保已調用AllocateEipAddress建立 EIP。

Terraform

Resource:alicloud_eip_addressalicloud_eip_association
# 指定HaVip所在地區 
provider "alicloud" {
  region = "cn-hangzhou"
}

# 指定HaVip的ID
variable "havip_id" {
  default = "havip-8vb0******"  # 修改為HaVip的實際ID
}

# 建立EIP
resource "alicloud_eip_address" "test_eip" {
  address_name = "test_eip_name"
  isp          = "BGP"
  netmode      = "public"
  bandwidth    = "1"
  payment_type = "PayAsYouGo"
}

# 綁定EIP
resource "alicloud_eip_association" "test_eip_havip_association" {
  allocation_id = alicloud_eip_address.test_eip.id
  instance_type = "HAVIP"
  instance_id   = var.havip_id # 指定HaVip的ID
}

更多資訊

計費說明

HaVip 功能正在公測,可免費使用,但不承諾任何服務等級協議(SLA)相關的保障條款。

HaVip 綁定的雲資源,如 ECS 執行個體EIP,將按其各自的計費規則獨立計費。

支援的地區

地區

支援高可用虛擬IP的地區

亞太地區-中國

華東1(杭州)華東2(上海)華東5 (南京-本地地區-關停中)華北1(青島)華北2(北京)華北3(張家口)華北5(呼和浩特)華北6(烏蘭察布)華南1(深圳)華南2(河源)華南3(廣州)西南1(成都)中國香港華中1(武漢-本地地區)華東6(福州-本地地區-關停中)

亞太地區-其他

日本(東京)韓國(首爾)新加坡馬來西亞(吉隆坡)印尼(雅加達)菲律賓(馬尼拉)泰國(曼穀)

歐美地區

德國(法蘭克福)英國(倫敦)美國(矽谷)美國(維吉尼亞)墨西哥

中東

阿聯酋(杜拜)沙特(利雅得)- 夥伴營運

配額

HaVip 功能正在公測,需登入阿里雲配額中心控制台進行自助申請。

配額名稱

描述

預設限制

提升配額

支援建立高可用虛擬IP(HaVip)的網路類型

VPC類型

無法提升

單個ECS執行個體支援同時綁定的HaVip數量

5個

單個HaVip支援同時綁定的EIP數量

1個

單個HaVip支援同時綁定的ECS執行個體或彈性網卡的數量

10個

1、1個HaVip支援同時綁定10個ECS執行個體或同時綁定10個彈性網卡,但1個HaVip不能同時綁定ECS執行個體和彈性網卡。
2、HaVip具有子網屬性,僅支援綁定到同一交換器下的ECS執行個體或彈性網卡上。

HaVip是否支援廣播和組播通訊

不支援

HaVip只支援單播,如果您使用Keepalived等第三方軟體實現高可用,需要修改設定檔中的通訊方式為單播通訊。

單個帳號支援建立的HaVip的數量

50個

單個VPC支援建立的HaVip的數量

50個

vpc_quota_havip_custom_route_entry

單個路由表內,目的地址指向HaVip的路由條目的數量

5條

前往配額管理頁面配額中心申請提升配額。