借助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與彈性公網IP(EIP)綁定,綁定后HaVip可以通過EIP提供公網服務。此外,該架構下的多個ECS實例還可以利用部署集能力進一步提升業務的可靠性,更多信息,請參見部署集。
在傳統數據中心里,服務器可以通過地址解析協議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的服務,實現業務高可用。
如果您有公網訪問需求,您可為高可用虛擬IP綁定EIP,綁定后該高可用虛擬IP可以通過EIP面向公網提供高可用服務。
配額和費用
HaVip功能正在公測,您可以登錄阿里云配額中心控制臺進行自助申請。
公測期間,HaVip免費使用,且不承諾任何服務等級協議(SLA)相關的保障條款。
支持的地域
公有云支持的地域
區域 | 支持高可用虛擬IP的地域 |
亞太 | 華東1(杭州)、華東2(上海)、華東5 (南京-本地地域)、華北1(青島)、華北2(北京)、華北3(張家口)、華北5(呼和浩特)、華北6(烏蘭察布)、華南1(深圳)、華南2(河源)、華南3(廣州)、西南1(成都)、中國香港、華中1(武漢-本地地域)、華東6(福州-本地地域)、日本(東京)、韓國(首爾)、新加坡、馬來西亞(吉隆坡)、印度尼西亞(雅加達)、菲律賓(馬尼拉)、泰國(曼谷) |
歐洲與美洲 | 德國(法蘭克福)、英國(倫敦)、美國(硅谷)、美國(弗吉尼亞) |
中東 | 阿聯酋(迪拜)、沙特(利雅得) 重要 沙特(利雅得)地域由合作伙伴運營。 |
金融云支持的地域
區域 | 支持高可用虛擬IP的地域 |
亞太 | 華南1 金融云、華東2 金融云、華北2 金融云(邀測) |
政務云支持的地域
區域 | 支持高可用虛擬IP的地域 |
亞太 | 華北2 阿里政務云1 |
使用限制與配額
配額名稱 | 描述 | 默認限制 | 提升配額 |
無 | 支持創建高可用虛擬IP(HaVip)的網絡類型 | VPC類型 | 無法提升 |
單個ECS實例支持同時綁定的HaVip數量 | 5個 | ||
單個HaVip支持同時綁定的EIP數量 | 1個 | ||
單個HaVip支持同時綁定的ECS實例或彈性網卡的數量 | 10個 說明
| ||
HaVip是否支持廣播和組播通信 | 不支持 說明 HaVip只支持單播,如果您使用Keepalived等第三方軟件實現高可用,需要修改配置文件中的通信方式為單播通信。 | ||
單個賬號支持創建的HaVip的數量 | 50個 | ||
單個VPC支持創建的HaVip的數量 | 50個 | ||
vpc_quota_havip_custom_route_entry | 單個VPC內,目的地址指向HaVip的路由條目的數量 | 5條 |
HaVip的使用示例
您可使用Terraform自動化腳本體驗快速部署,也可以通過控制臺操作手動部署ECS實例,來搭配HaVip和Keepalived實現同可用區雙機高可用,架構圖可參見本文使用場景。
配置流程
前提條件
配額:已通過阿里云配額中心控制臺自助申請高可用虛擬IP。
權限:如果您使用的是RAM用戶,請確保該賬號已被阿里云賬號授予以下VPC和ECS的最小權限。
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
針對通過控制臺手動部署的操作,還需準備以下資源:
費用
快速部署:執行Terraform腳本后,會為您創建3個ECS 1 vCPU 2 GiB的搶占式實例、1個VPC、1個vSwitch、1個HaVip。具體費用取決于您創建的ECS實例留存時間,建議您及時清除資源,防止繼續計費。
手動部署:具體費用取決于您創建的ECS資源規格。
如果您有公網訪問需求,為高可用虛擬IP綁定了EIP后,您需要為綁定的EIP支付費用。更多計費信息,請參見EIP計費概述。
配置步驟
快速部署(Terraform)
下載項目文件iac-example-havip.zip。
登錄阿里云Cloud Shell,上傳下載的文件至Cloud Shell。
依次執行以下命令,解壓壓縮包,進入工程根目錄,初始化腳本并創建資源。
unzip iac-example-havip.zip cd iac-example-havip terraform init terraform apply -auto-approve
返回結果:
結果驗證。
登錄ECS3實例。執行
curl ha_vip_private_ip
命令,即可查看到ECS1(主)實例返回的信息。在Cloud Shell中執行以下命令停止ECS1實例。
aliyun ecs StopInstance --InstanceId <$instance_id_ecs1> --ForceStop false --StoppedMode KeepCharging --DryRun false
登錄ECS3實例。再次執行
curl ha_vip_private_ip
命令,即可查看到返回的信息是ECS2。
此時,由于ECS1宕機,ECS2作為備機將自動接管ECS1實例的服務,以保證對外提供服務的IP不變,實現IP漂移。
執行以下命令,清除資源,防止繼續計費。
terraform destroy -auto-approve
手動部署(控制臺)
步驟一:創建HaVip
- 登錄專有網絡管理控制臺。
在左側導航欄,單擊高可用虛擬IP。
在頂部菜單欄處,選擇要創建HaVip的地域。
在高可用虛擬IP頁面,單擊創建高可用虛擬IP。
在創建高可用虛擬IP對話框,根據以下信息配置HaVip,其他參數可保持默認值或根據實際情況修改。然后單擊確定。
專有網絡:選擇HaVip所屬的專有網絡。
交換機:選擇HaVip所屬的交換機。
是否自動分配私網IP地址:選擇是否自動分配私網IP地址。
是:由系統在所選交換機的網段中分配一個未被占用的私網IP地址。
否:手動輸入一個私網IP地址,該IP地址必須為所選交換機的網段中未被占用的私網IP地址。
創建成功后,您可以在高可用虛擬IP頁面查看創建的HaVip。
步驟二:在主備ECS實例上安裝Keepalived
本示例以操作系統為CentOS的ECS實例為例,介紹如何安裝Keepalived。
登錄ECS1實例。具體操作,請參見ECS連接方式概述。
執行以下命令,安裝Keepalived。
yum install keepalived
編輯keepalived.conf文件。
執行以下命令,編輯keepalived.conf文件。
vim /etc/keepalived/keepalived.conf
執行
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文件。
按下Esc鍵,輸入
:wq
并回車以保存并關閉文件。
執行以下命令,啟動ECS1實例的Keepalived。
systemctl start keepalived
登錄ECS2實例。
執行以下命令,安裝Keepalived。
yum install keepalived
編輯keepalived.conf文件。
執行以下命令,編輯keepalived.conf文件。
vim /etc/keepalived/keepalived.conf
執行
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文件。
按下Esc鍵,輸入
:wq
并回車以保存并關閉文件。執行以下命令,啟動ECS2實例的Keepalived。
systemctl start keepalived
步驟三:將HaVip與主備ECS實例綁定
您可以將HaVip與ECS實例進行綁定,綁定后,ECS實例可以使用ARP協議進行該IP的宣告。
HaVip僅支持與同一個交換機下的ECS實例進行綁定,每個HaVip最多可以綁定10臺ECS實例。
完成以下操作,將HaVip分別與主備ECS實例綁定。
- 登錄專有網絡管理控制臺。
在左側導航欄,單擊高可用虛擬IP。
在頂部菜單欄處,選擇HaVip的地域。
找到步驟一創建的HaVip實例,單擊HaVip實例的ID。
在綁定資源區域ECS實例處,單擊立即綁定。
在彈出的對話框中,選擇ECS1實例,然后單擊確定。
重復上述步驟,將HaVip與ECS2實例綁定。
綁定成功后,您可在綁定資源區域查看HaVip綁定的ECS實例。
步驟四:訪問測試
登錄ECS3實例。執行curl ha_vip_private_ip
命令,訪問部署在ECS實例上的Nginx服務。
測試結果如下:
當主實例ECS1工作正常時,主實例ECS1承接客戶端訪問流量。
當主實例ECS1出現故障時,備用實例ECS2會自動調用自身的接管程序,接管主實例ECS1的虛擬IP資源及服務,實現業務高可用。
管理HaVip
通過控制臺管理HaVip
操作入口
- 登錄專有網絡管理控制臺。
在左側導航欄,單擊高可用虛擬IP。
在頂部菜單欄處,選擇高可用虛擬IP的地域。
根據您具體的需求,繼續執行以下操作。
創建高可用虛擬IP
在高可用虛擬IP頁面,單擊創建高可用虛擬IP。
在創建高可用虛擬IP對話框,根據以下信息配置高可用虛擬IP,然后單擊確定。
資源組:為HaVip選擇所屬的資源組。
標簽鍵:為HaVip輸入新標簽鍵或選擇已有標簽鍵。最多支持128個字符,不能以
aliyun
或acs:
開頭,不能包含http://
和https://
。一次最多綁定20個標簽鍵。標簽值:為HaVip輸入新標簽值或選擇已有標簽值。最多支持128個字符,不能以
aliyun
或acs:
開頭,不能包含http://
和https://
。一次最多綁定20個標簽值。地域:顯示要創建HaVip的地域。
專有網絡:選擇HaVip所屬的專有網絡。
交換機:選擇HaVip所屬的交換機。
交換機網段:顯示交換機的網段。
是否自動分配私網IP地址:選擇是否自動分配私網IP地址。
是:由系統在所選交換機的網段中分配一個未被占用的私網IP地址。
否:手動輸入一個私網IP地址,該IP地址必須為所選交換機的網段中未被占用的私網IP地址。
如果您無需再使用HaVip資源,您可以在高可用虛擬IP頁面,找到目標高可用虛擬IP,然后在操作列單擊刪除。請確保需刪除的高可用虛擬IP未綁定ECS實例、彈性網卡或EIP,如已綁定,請先解綁。
綁定和解綁ECS實例或彈性網卡
在高可用虛擬IP頁面,找到目標高可用虛擬IP實例,單擊高可用虛擬IP的ID。
在綁定資源區域ECS實例處,單擊立即綁定。
在彈出的對話框,根據以下信息選擇要綁定的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實例的狀態必須處于可用狀態。
在高可用虛擬IP頁面,找到目標高可用虛擬IP實例,然后在操作列單擊綁定EIP。
在綁定彈性公網IP對話框,選擇需要綁定的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實例和彈性公網IP綁定,持有HaVip的ECS實例進行公網通信時,數據包的源IP為HaVip的私網IP,并非ECS實例的私網IP,因為彈性公網IP是映射在HaVip的私網IP上,而不是映射在ECS實例的私網IP上。