本文由簡體中文內容自動轉碼而成。阿里雲不保證此自動轉碼的準確性、完整性及時效性。本文内容請以簡體中文版本為準。

高可用虛擬IP(HaVip)

更新時間:2025-02-28 06:44

藉助VPC提供的高可用虛擬IP HaVip(High-Availability Virtual IP Address)功能,您可在雲上基於ARP協議,通過Keepalived或Heartbeat軟體來搭建服務高可用架構,以確保主備切換過程中服務IP不變(即IP漂移)。

什麼是高可用虛擬IP(HaVip)

定義

HaVip是一種可以獨立建立和釋放的私網IP資源,具備與ECS執行個體主私網IP地址一樣的網路接入能力,可以與高可用軟體,例如Keepalived配合使用,搭建高可用主備服務,提高業務的可用性。

HaVip支援綁定多個ECS執行個體或多個ECS執行個體的主網卡或輔助網卡,以實現同可用性區域、多伺服器高可用架構下的IP漂移,確保對外提供服務的私網IP始終不變。您可以將HaVip與Elastic IP Address(EIP)綁定,綁定後HaVip可以通過EIP提供公網服務。此外,該架構下的多個ECS執行個體還可以利用部署集能力進一步提升業務的可靠性,更多資訊,請參見部署集

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

在傳統資料中心裡,伺服器可以通過位址解析通訊協定ARP(Address Resolution Protocol)聲明自己的IP地址並對外提供服務,很多應用情境或常用軟體需要主機具備此能力。例如,使用Keepalived、Heartbeat等軟體實現容災恢複過程中服務IP不變的高可用方案。

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

使用情境

如下圖所示,ECS1和ECS2執行個體基於HaVip,使用Keepalived組合成一個高可用的私網服務。VPC內的其他執行個體ECS3可以通過私網訪問該服務,服務地址為HaVip的地址。當ECS1發生故障時,ECS2會自動調用自身的接管程式,接管ECS1的服務,實現業務高可用。

image
說明

如果您有公網訪問需求,您可為高可用虛擬IP綁定EIP,綁定後該高可用虛擬IP可以通過EIP面向公網提供高可用服務。

配額和費用

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

重要

公測期間,HaVip免費使用,且不承諾任何服務等級協議(SLA)相關的保障條款。

支援的地區

地區

支援高可用虛擬IP的地區

地區

支援高可用虛擬IP的地區

亞太地區

華東1(杭州)華東2(上海)華東5 (南京-本地地區)華北1(青島)華北2(北京)華北3(張家口)華北5(呼和浩特)華北6(烏蘭察布)華南1(深圳)華南2(河源)華南3(廣州)西南1(成都)中國香港華中1(武漢-本地地區)華東6(福州-本地地區)日本(東京)韓國(首爾)新加坡馬來西亞(吉隆坡)印尼(雅加達)菲律賓(馬尼拉)泰國(曼穀)

歐美地區

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

中東

阿聯酋(杜拜)沙特(利雅得)

重要

沙特(利雅得)地區由夥伴營運。

使用限制與配額

配額名稱

描述

預設限制

提升配額

配額名稱

描述

預設限制

提升配額

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

VPC類型

無法提升

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

5個

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

1個

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

10個

說明
  • 1個HaVip支援同時綁定10個ECS執行個體或同時綁定10個彈性網卡,但1個HaVip不能既綁定ECS執行個體又綁定彈性網卡。

  • HaVip具有子網屬性,僅支援綁定到同一交換器下的ECS執行個體或彈性網卡上。

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

不支援

說明

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

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

50個

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

50個

vpc_quota_havip_custom_route_entry

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

5條

您可以通過以下任意方式自助提升配額:

HaVip的使用樣本

您可使用Terraform自動化指令碼體驗快速部署,也可以通過控制台操作手動部署ECS執行個體,來搭配HaVip和Keepalived實現同可用性區域雙機高可用,架構圖可參見本文使用情境

配置流程

image

前提條件

  • 配額:已通過阿里雲配額中心控制台自助申請高可用虛擬IP。

  • 許可權:如果您使用的是RAM使用者,請確保該帳號已被阿里雲帳號授予以下VPC和ECS的最小許可權。

    權限原則Action列表

    vpc:CreateVpc
    vpc:DeleteVpc
    vpc:DescribeVpcs
    vpc:AllocateEipAddress
    vpc:AssociateEipAddress
    vpc:DescribeEipAddresses
    vpc:UnassociateEipAddress
    vpc:ReleaseEipAddress
    vpc:CreateVSwitch
    vpc:DeleteVSwitch
    vpc:DescribeVSwitches
    vpc:CreateHaVip
    vpc:DeleteHaVip
    vpc:AssociateHaVip
    vpc:UnassociateHaVip
    vpc:DescribeHaVips
    ecs:RunInstances
    ecs:StartInstances
    ecs:StopInstances
    ecs:DescribeInstances
    ecs:DeleteInstances

    更多資訊,請參見RAM鑒權RAM使用者

  • 針對通過控制台手動部署的操作,還需準備以下資源:

費用

  • 快速部署:執行Terraform指令碼後,會為您建立3個ECS 1 vCPU 2 GiB的搶佔式執行個體、1個VPC、1個vSwitch、1個HaVip。具體費用取決於您建立的ECS執行個體留存時間,建議您及時清除資源,防止繼續計費。

  • 手動部署:具體費用取決於您建立的ECS資源規格。

說明

如果您有公網訪問需求,為高可用虛擬IP綁定了EIP後,您需要為綁定的EIP支付費用。更多計費資訊,請參見EIP計費概述

配置步驟

快速部署(Terraform)
手動部署(控制台)
  1. 下載專案檔。

  2. 登入阿里雲Cloud Shell,上傳下載的檔案至Cloud Shell。image

  3. 依次執行以下命令,解壓壓縮包,進入工程根目錄,初始化指令碼並建立資源。

    unzip iac-example-havip.zip
    cd iac-example-havip
    terraform init
    terraform apply -auto-approve

    返回結果:

    output.png

  4. 結果驗證。

    1. 登入ECS3執行個體。執行curl ha_vip_private_ip命令,即可查看到ECS1(主)執行個體返回的資訊。

      result1.png

    2. 在Cloud Shell中執行以下命令停止ECS1執行個體。

      aliyun ecs StopInstance --InstanceId <$instance_id_ecs1> --ForceStop false --StoppedMode KeepCharging --DryRun false
    3. 登入ECS3執行個體。再次執行curl ha_vip_private_ip命令,即可查看到返回的資訊是ECS2。

      result2.png

    此時,由於ECS1宕機,ECS2作為備機將自動接管ECS1執行個體的服務,以保證對外提供服務的IP不變,實現IP漂移。

  5. 執行以下命令,清除資源,防止繼續計費。

    terraform destroy -auto-approve

步驟一:建立HaVip

  1. 登入專用網路管理主控台

  2. 在左側導覽列,單擊高可用虛擬IP

  3. 在頂部功能表列處,選擇要建立HaVip的地區。

  4. 高可用虛擬IP頁面,單擊建立高可用虛擬IP

  5. 建立高可用虛擬IP對話方塊,根據以下資訊配置HaVip,其他參數可保持預設值或根據實際情況修改。然後單擊確定

    • 專用網路:選擇HaVip所屬的專用網路。

    • 交換器:選擇HaVip所屬的交換器。

    • 是否自動分配私網IP地址:選擇是否自動分配私網IP地址。

      • :由系統在所選交換器的網段中分配一個未被佔用的私網IP地址。

      • :手動輸入一個私網IP地址,該IP地址必須為所選交換器的網段中未被佔用的私網IP地址。

建立成功後,您可以在高可用虛擬IP頁面查看建立的HaVip。建立HaVip

步驟二:在主備ECS執行個體上安裝Keepalived

本樣本以作業系統為CentOS的ECS執行個體為例,介紹如何安裝Keepalived。

  1. 登入ECS1執行個體。具體操作,請參見ECS串連方式概述

  2. 執行以下命令,安裝Keepalived。

    yum install keepalived

  3. 編輯keepalived.conf檔案。

    1. 執行以下命令,編輯keepalived.conf檔案。

      vim /etc/keepalived/keepalived.conf

    2. 執行i命令,進入輸入模式。根據以下資訊修改keepalived.conf檔案。

      ! Configuration File for keepalived
      vrrp_instance VI_1 {
      state MASTER           #設定ECS1執行個體為主執行個體
          interface eth0          #設定網卡名,本樣本配置為eth0  
          virtual_router_id 51
          nopreempt              
          priority 100             #設定優先權,數字越大,優先順序越高,本樣本配置主用執行個體優先順序為100
          advert_int 1        
          authentication {
              auth_type PASS
              auth_pass 1111
          }
          unicast_src_ip 192.168.0.209   #設定ECS執行個體的私網IP地址,本樣本配置為192.168.0.209
          unicast_peer {
              192.168.0.210           #對端ECS執行個體的私網IP地址,本樣本配置為192.168.0.210
          }
          virtual_ipaddress {
              192.168.0.88          #設定HaVip的IP地址,本樣本配置為192.168.0.88 
          }   
          garp_master_delay 1
          garp_master_refresh 5
      
          track_interface {
              eth0                #設定ECS執行個體網卡名,本樣本配置為eth0
          }
      }
      說明

      本樣本僅展示需修改部分,請結合具體執行個體修改keepalived.conf檔案配置。請勿直接複製本樣本覆蓋已有keepalived.conf檔案。

    3. 按下Esc鍵,輸入:wq並斷行符號以儲存並關閉檔案。

  4. 執行以下命令,啟動ECS1執行個體的Keepalived。

    systemctl start keepalived

  5. 登入ECS2執行個體。

  6. 執行以下命令,安裝Keepalived。

    yum install keepalived

  7. 編輯keepalived.conf檔案。

    1. 執行以下命令,編輯keepalived.conf檔案。

      vim /etc/keepalived/keepalived.conf

    2. 執行i命令,進入輸入模式。根據以下資訊修改keepalived.conf檔案。

      ! Configuration File for keepalived
      vrrp_instance VI_1 {
      state BACKUP           #設定ECS2執行個體為備用執行個體
          interface eth0          #設定網卡名,本樣本配置為eth0  
          virtual_router_id 51
          nopreempt              
          priority 10             #設定優先權,數字越大,優先順序越高,本樣本配置備用執行個體優先順序為10
          advert_int 1        
          authentication {
              auth_type PASS
              auth_pass 1111
          }
          unicast_src_ip 192.168.0.210   #設定ECS執行個體的私網IP地址,本樣本配置為192.168.0.210
          unicast_peer {
              192.168.0.209           #對端ECS執行個體的私網IP地址,本樣本配置為192.168.0.209
          }
          virtual_ipaddress {
              192.168.0.88          #設定HaVip的IP地址,本樣本配置為192.168.0.88 
          }    
          garp_master_delay 1
          garp_master_refresh 5
      
          track_interface {
              eth0                #設定ECS執行個體網卡名,本樣本配置為eth0
          }
      }
      說明

      本樣本僅展示需修改部分,請結合具體執行個體修改keepalived.conf檔案配置。請勿直接複製本樣本覆蓋已有keepalived.conf檔案。

  8. 按下Esc鍵,輸入:wq並斷行符號以儲存並關閉檔案。

  9. 執行以下命令,啟動ECS2執行個體的Keepalived。

    systemctl start keepalived

步驟三:將HaVip與主備ECS執行個體綁定

您可以將HaVip與ECS執行個體進行綁定,綁定後,ECS執行個體可以使用ARP協議進行該IP的宣告。

說明

HaVip僅支援與同一個交換器下的ECS執行個體進行綁定,每個HaVip最多可以綁定10台ECS執行個體。

完成以下操作,將HaVip分別與主備ECS執行個體綁定。

  1. 登入專用網路管理主控台

  2. 在左側導覽列,單擊高可用虛擬IP

  3. 在頂部功能表列處,選擇HaVip的地區。

  4. 找到步驟一建立的HaVip執行個體,單擊HaVip執行個體的ID。

  5. 綁定資源地區ECS執行個體處,單擊立即綁定

    綁定ECS

  6. 在彈出的對話方塊中,選擇ECS1執行個體,然後單擊確定

  7. 重複上述步驟,將HaVip與ECS2執行個體綁定。

綁定成功後,您可在綁定資源地區查看HaVip綁定的ECS執行個體。

步驟四:訪問測試

登入ECS3執行個體。執行curl ha_vip_private_ip命令,訪問部署在ECS執行個體上的Nginx服務。

測試結果如下:

  • 當主執行個體ECS1工作正常時,主執行個體ECS1承接用戶端訪問流量。

    image.png

  • 當主執行個體ECS1出現故障時,備用執行個體ECS2會自動調用自身的接管程式,接管主執行個體ECS1的虛擬IP資源及服務,實現業務高可用。

    image.png

管理HaVip

通過控制台管理HaVip

操作入口

  1. 登入專用網路管理主控台

  2. 在左側導覽列,單擊高可用虛擬IP

  3. 在頂部功能表列處,選擇高可用虛擬IP的地區。

根據您具體的需求,繼續執行以下操作。

建立高可用虛擬IP

  1. 高可用虛擬IP頁面,單擊建立高可用虛擬IP

  2. 建立高可用虛擬IP對話方塊,根據以下資訊配置高可用虛擬IP,然後單擊確定

    • 資源群組:為HaVip選擇所屬的資源群組。

    • 標籤鍵:為HaVip輸入新標籤鍵或選擇已有標籤鍵。最多支援128個字元,不能以aliyunacs:開頭,不能包含http://https://。一次最多綁定20個標籤鍵。

    • 標籤值:為HaVip輸入新標籤值或選擇已有標籤值。最多支援128個字元,不能以aliyunacs:開頭,不能包含http://https://。一次最多綁定20個標籤值。

    • 地區:顯示要建立HaVip的地區。

    • 專用網路:選擇HaVip所屬的專用網路。

    • 交換器:選擇HaVip所屬的交換器。

    • 交換器網段:顯示交換器的網段。

    • 是否自動分配私網IP地址:選擇是否自動分配私網IP地址。

      • :由系統在所選交換器的網段中分配一個未被佔用的私網IP地址。

      • :手動輸入一個私網IP地址,該IP地址必須為所選交換器的網段中未被佔用的私網IP地址。

說明

如果您無需再使用HaVip資源,您可以在高可用虛擬IP頁面,找到目標高可用虛擬IP,然後在操作列單擊刪除。請確保需刪除的高可用虛擬IP未綁定ECS執行個體、彈性網卡或EIP,如已綁定,請先解除綁定。

綁定和解除綁定ECS執行個體或彈性網卡

  1. 高可用虛擬IP頁面,找到目標高可用虛擬IP執行個體,單擊高可用虛擬IP的ID。

  2. 綁定資源地區ECS執行個體處,單擊立即綁定

  3. 在彈出的對話方塊,根據以下資訊選擇要綁定的ECS執行個體或彈性網卡,然後單擊確定

    配置

    說明

    綁定類型

    選擇要綁定高可用虛擬IP的資源類型,支援選擇以下兩種資源類型:

    • ECS執行個體

    • 彈性網卡

    綁定資源

    選擇要綁定高可用虛擬IP的ECS執行個體或彈性網卡。

    要綁定高可用虛擬IP的ECS執行個體或彈性網卡必須滿足以下條件:

    • ECS執行個體的網路類型為專用網路類型。

    • ECS執行個體或彈性網卡所屬的交換器與高可用虛擬IP所屬的交換器相同。

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

說明
  • 高可用虛擬IP在一個時刻只可綁定同一類型資源,如需綁定其他類型資源,請先解除綁定已經綁定的資源。

  • 如果刪除已綁定高可用虛擬IP的ECS執行個體,系統會自動解除高可用虛擬IP和該ECS執行個體的綁定關係。

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

  • 如果刪除已綁定高可用虛擬IP的輔助彈性網卡,系統會自動解除高可用虛擬IP和該輔助彈性網卡的綁定關係。

綁定和解除綁定EIP

您可以將EIP綁定至高可用虛擬IP上,綁定後該高可用虛擬IP可以通過EIP提供公網服務。綁定EIP前,您需要申請EIP。需要綁定的EIP必須滿足以下條件:

  • EIP的地區必須和高可用虛擬IP的地區相同。

  • EIP執行個體的狀態必須處於可用狀態。

  1. 高可用虛擬IP頁面,找到目標高可用虛擬IP執行個體,然後在操作列單擊綁定EIP

  2. 綁定Elastic IP Address對話方塊,選擇需要綁定的EIP,然後單擊確定

如果高可用虛擬IP不再需要通過EIP提供公網服務,您可以將HaVip與EIP解除綁定。在高可用虛擬IP頁面,找到目標高可用虛擬IP執行個體,在操作列單擊解除綁定EIP

相關API文檔

您可以通過其他方式,SDK、Terraform或ROS調用以下API管理HaVip:

FAQ

使用Keepalived實現高可用時,推薦使用什麼版本的Keepalived?

推薦使用V1.2.15及以上版本的Keepalived。

使用Keepalived時遇到問題怎麼辦?

建議您前往Keepalived GitHub瞭解更多資訊。

使用Keepalived等第三方軟體實現高可用,心跳檢測的源IP怎麼配置?

如果您使用Keepalived等第三方軟體實現高可用,您需要將心跳檢測的源IP修改為ECS執行個體的私網IP,而不能使用HaVip的私網IP進行心跳檢測。

是否支援使用HaVip實現自建Linux虛擬伺服器(LVS)高可用?

不支援。

持有HaVip的ECS執行個體訪問公網時,資料包的源IP是什嗎?

HaVip分別與ECS執行個體和Elastic IP Address綁定,持有HaVip的ECS執行個體進行公網通訊時,資料包的源IP為HaVip的私網IP,並非ECS執行個體的私網IP,因為Elastic IP Address是映射在HaVip的私網IP上,而不是映射在ECS執行個體的私網IP上。

  • 本頁導讀 (1, M)
  • 什麼是高可用虛擬IP(HaVip)
  • 定義
  • 使用情境
  • 配額和費用
  • 支援的地區
  • 使用限制與配額
  • HaVip的使用樣本
  • 配置流程
  • 前提條件
  • 費用
  • 配置步驟
  • 管理HaVip
  • 通過控制台管理HaVip
  • 相關API文檔
  • FAQ
  • 使用Keepalived實現高可用時,推薦使用什麼版本的Keepalived?
  • 使用Keepalived時遇到問題怎麼辦?
  • 使用Keepalived等第三方軟體實現高可用,心跳檢測的源IP怎麼配置?
  • 是否支援使用HaVip實現自建Linux虛擬伺服器(LVS)高可用?
  • 持有HaVip的ECS執行個體訪問公網時,資料包的源IP是什嗎?
文檔反饋