高可用虛擬IP(HaVip)
借助VPC提供的高可用虛擬IP HaVip(High-Availability Virtual IP Address)功能,您可在云上基于ARP協(xié)議,通過Keepalived或Heartbeat軟件來搭建服務(wù)高可用架構(gòu),以確保主備切換過程中服務(wù)IP不變(即IP漂移)。
什么是高可用虛擬IP(HaVip)
定義
HaVip是一種可以獨(dú)立創(chuàng)建和釋放的私網(wǎng)IP資源,具備與ECS實(shí)例主私網(wǎng)IP地址一樣的網(wǎng)絡(luò)接入能力,可以與高可用軟件,例如Keepalived配合使用,搭建高可用主備服務(wù),提高業(yè)務(wù)的可用性。
HaVip支持綁定多個(gè)ECS實(shí)例或多個(gè)ECS實(shí)例的主網(wǎng)卡或輔助網(wǎng)卡,以實(shí)現(xiàn)同可用區(qū)、多服務(wù)器高可用架構(gòu)下的IP漂移,確保對(duì)外提供服務(wù)的私網(wǎng)IP始終不變。您可以將HaVip與彈性公網(wǎng)IP(EIP)綁定,綁定后HaVip可以通過EIP提供公網(wǎng)服務(wù)。此外,該架構(gòu)下的多個(gè)ECS實(shí)例還可以利用部署集能力進(jìn)一步提升業(yè)務(wù)的可靠性,更多信息,請(qǐng)參見部署集。
在傳統(tǒng)數(shù)據(jù)中心里,服務(wù)器可以通過地址解析協(xié)議ARP(Address Resolution Protocol)聲明自己的IP地址并對(duì)外提供服務(wù),很多應(yīng)用場(chǎng)景或常用軟件需要主機(jī)具備此能力。例如,使用Keepalived、Heartbeat等軟件實(shí)現(xiàn)容災(zāi)恢復(fù)過程中服務(wù)IP不變的高可用方案。
然而,大部分云廠商采用SDN架構(gòu)后,在VPC環(huán)境下不支持免費(fèi)ARP廣播功能。因?yàn)樵粕暇W(wǎng)絡(luò)環(huán)境需使用虛擬化技術(shù)構(gòu)建,虛擬服務(wù)器IP地址由云平臺(tái)底層的虛擬化平臺(tái)分配和管理。您的應(yīng)用無法像傳統(tǒng)方式一樣修改主機(jī)IP地址,且整個(gè)虛擬網(wǎng)絡(luò)是基于3層的隧道技術(shù),ARP被終結(jié)在發(fā)送端,主機(jī)無法聲明IP地址。為此,阿里云推出HaVip功能,解決此問題。
使用場(chǎng)景
如下圖所示,ECS1和ECS2實(shí)例基于HaVip,使用Keepalived組合成一個(gè)高可用的私網(wǎng)服務(wù)。VPC內(nèi)的其他實(shí)例ECS3可以通過私網(wǎng)訪問該服務(wù),服務(wù)地址為HaVip的地址。當(dāng)ECS1發(fā)生故障時(shí),ECS2會(huì)自動(dòng)調(diào)用自身的接管程序,接管ECS1的服務(wù),實(shí)現(xiàn)業(yè)務(wù)高可用。
如果您有公網(wǎng)訪問需求,您可為高可用虛擬IP綁定EIP,綁定后該高可用虛擬IP可以通過EIP面向公網(wǎng)提供高可用服務(wù)。
配額和費(fèi)用
HaVip功能正在公測(cè),您可以登錄阿里云配額中心控制臺(tái)進(jìn)行自助申請(qǐng)。
公測(cè)期間,HaVip免費(fèi)使用,且不承諾任何服務(wù)等級(jí)協(xié)議(SLA)相關(guān)的保障條款。
支持的地域
公有云支持的地域
區(qū)域 | 支持高可用虛擬IP的地域 |
亞太 | 華東1(杭州)、華東2(上海)、華東5 (南京-本地地域)、華北1(青島)、華北2(北京)、華北3(張家口)、華北5(呼和浩特)、華北6(烏蘭察布)、華南1(深圳)、華南2(河源)、華南3(廣州)、西南1(成都)、中國(guó)香港、華中1(武漢-本地地域)、華東6(福州-本地地域)、日本(東京)、韓國(guó)(首爾)、新加坡、馬來西亞(吉隆坡)、印度尼西亞(雅加達(dá))、菲律賓(馬尼拉)、泰國(guó)(曼谷) |
歐洲與美洲 | 德國(guó)(法蘭克福)、英國(guó)(倫敦)、美國(guó)(硅谷)、美國(guó)(弗吉尼亞) |
中東 | 阿聯(lián)酋(迪拜)、沙特(利雅得) 重要 沙特(利雅得)地域由合作伙伴運(yùn)營(yíng)。 |
金融云支持的地域
區(qū)域 | 支持高可用虛擬IP的地域 |
亞太 | 華南1 金融云、華東2 金融云、華北2 金融云(邀測(cè)) |
政務(wù)云支持的地域
區(qū)域 | 支持高可用虛擬IP的地域 |
亞太 | 華北2 阿里政務(wù)云1 |
使用限制與配額
配額名稱 | 描述 | 默認(rèn)限制 | 提升配額 |
無 | 支持創(chuàng)建高可用虛擬IP(HaVip)的網(wǎng)絡(luò)類型 | VPC類型 | 無法提升 |
單個(gè)ECS實(shí)例支持同時(shí)綁定的HaVip數(shù)量 | 5個(gè) | ||
單個(gè)HaVip支持同時(shí)綁定的EIP數(shù)量 | 1個(gè) | ||
單個(gè)HaVip支持同時(shí)綁定的ECS實(shí)例或彈性網(wǎng)卡的數(shù)量 | 10個(gè) 說明
| ||
HaVip是否支持廣播和組播通信 | 不支持 說明 HaVip只支持單播,如果您使用Keepalived等第三方軟件實(shí)現(xiàn)高可用,需要修改配置文件中的通信方式為單播通信。 | ||
單個(gè)賬號(hào)支持創(chuàng)建的HaVip的數(shù)量 | 50個(gè) | ||
單個(gè)VPC支持創(chuàng)建的HaVip的數(shù)量 | 50個(gè) | ||
vpc_quota_havip_custom_route_entry | 單個(gè)VPC內(nèi),目的地址指向HaVip的路由條目的數(shù)量 | 5條 | 您可以通過以下任意方式自助提升配額:
|
HaVip的使用示例
您可使用Terraform自動(dòng)化腳本體驗(yàn)快速部署,也可以通過控制臺(tái)操作手動(dòng)部署ECS實(shí)例,來搭配HaVip和Keepalived實(shí)現(xiàn)同可用區(qū)雙機(jī)高可用,架構(gòu)圖可參見本文使用場(chǎng)景。
配置流程
前提條件
配額:已通過阿里云配額中心控制臺(tái)自助申請(qǐng)高可用虛擬IP。
權(quán)限:如果您使用的是RAM用戶,請(qǐng)確保該賬號(hào)已被阿里云賬號(hào)授予以下VPC和ECS的最小權(quán)限。
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
更多信息,請(qǐng)參見RAM鑒權(quán)和RAM用戶。
針對(duì)通過控制臺(tái)手動(dòng)部署的操作,還需準(zhǔn)備以下資源:
已創(chuàng)建3臺(tái)ECS實(shí)例,并在主備ECS實(shí)例部署了Nginx服務(wù),確保Nginx正常運(yùn)行。具體操作,請(qǐng)參見自定義購(gòu)買實(shí)例和安裝Nginx。
費(fèi)用
快速部署:執(zhí)行Terraform腳本后,會(huì)為您創(chuàng)建3個(gè)ECS 1 vCPU 2 GiB的搶占式實(shí)例、1個(gè)VPC、1個(gè)vSwitch、1個(gè)HaVip。具體費(fèi)用取決于您創(chuàng)建的ECS實(shí)例留存時(shí)間,建議您及時(shí)清除資源,防止繼續(xù)計(jì)費(fèi)。
手動(dòng)部署:具體費(fèi)用取決于您創(chuàng)建的ECS資源規(guī)格。
如果您有公網(wǎng)訪問需求,為高可用虛擬IP綁定了EIP后,您需要為綁定的EIP支付費(fèi)用。更多計(jì)費(fèi)信息,請(qǐng)參見EIP計(jì)費(fèi)概述。
配置步驟
快速部署(Terraform)
下載項(xiàng)目文件iac-example-havip.zip。
登錄阿里云Cloud Shell,上傳下載的文件至Cloud Shell。
依次執(zhí)行以下命令,解壓壓縮包,進(jìn)入工程根目錄,初始化腳本并創(chuàng)建資源。
unzip iac-example-havip.zip cd iac-example-havip terraform init terraform apply -auto-approve
返回結(jié)果:
結(jié)果驗(yàn)證。
登錄ECS3實(shí)例。執(zhí)行
curl ha_vip_private_ip
命令,即可查看到ECS1(主)實(shí)例返回的信息。在Cloud Shell中執(zhí)行以下命令停止ECS1實(shí)例。
aliyun ecs StopInstance --InstanceId <$instance_id_ecs1> --ForceStop false --StoppedMode KeepCharging --DryRun false
登錄ECS3實(shí)例。再次執(zhí)行
curl ha_vip_private_ip
命令,即可查看到返回的信息是ECS2。
此時(shí),由于ECS1宕機(jī),ECS2作為備機(jī)將自動(dòng)接管ECS1實(shí)例的服務(wù),以保證對(duì)外提供服務(wù)的IP不變,實(shí)現(xiàn)IP漂移。
執(zhí)行以下命令,清除資源,防止繼續(xù)計(jì)費(fèi)。
terraform destroy -auto-approve
手動(dòng)部署(控制臺(tái))
步驟一:創(chuàng)建HaVip
- 登錄專有網(wǎng)絡(luò)管理控制臺(tái)。
在左側(cè)導(dǎo)航欄,單擊高可用虛擬IP。
在頂部菜單欄處,選擇要?jiǎng)?chuàng)建HaVip的地域。
在高可用虛擬IP頁(yè)面,單擊創(chuàng)建高可用虛擬IP。
在創(chuàng)建高可用虛擬IP對(duì)話框,根據(jù)以下信息配置HaVip,其他參數(shù)可保持默認(rèn)值或根據(jù)實(shí)際情況修改。然后單擊確定。
專有網(wǎng)絡(luò):選擇HaVip所屬的專有網(wǎng)絡(luò)。
交換機(jī):選擇HaVip所屬的交換機(jī)。
是否自動(dòng)分配私網(wǎng)IP地址:選擇是否自動(dòng)分配私網(wǎng)IP地址。
是:由系統(tǒng)在所選交換機(jī)的網(wǎng)段中分配一個(gè)未被占用的私網(wǎng)IP地址。
否:手動(dòng)輸入一個(gè)私網(wǎng)IP地址,該IP地址必須為所選交換機(jī)的網(wǎng)段中未被占用的私網(wǎng)IP地址。
創(chuàng)建成功后,您可以在高可用虛擬IP頁(yè)面查看創(chuàng)建的HaVip。
步驟二:在主備ECS實(shí)例上安裝Keepalived
本示例以操作系統(tǒng)為CentOS的ECS實(shí)例為例,介紹如何安裝Keepalived。
登錄ECS1實(shí)例。具體操作,請(qǐng)參見ECS連接方式概述。
執(zhí)行以下命令,安裝Keepalived。
yum install keepalived
編輯keepalived.conf文件。
執(zhí)行以下命令,編輯keepalived.conf文件。
vim /etc/keepalived/keepalived.conf
執(zhí)行
i
命令,進(jìn)入輸入模式。根據(jù)以下信息修改keepalived.conf文件。! Configuration File for keepalived vrrp_instance VI_1 { state MASTER #設(shè)置ECS1實(shí)例為主實(shí)例 interface eth0 #設(shè)置網(wǎng)卡名,本示例配置為eth0 virtual_router_id 51 nopreempt priority 100 #設(shè)置優(yōu)先級(jí),數(shù)字越大,優(yōu)先級(jí)越高,本示例配置主用實(shí)例優(yōu)先級(jí)為100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } unicast_src_ip 192.168.0.209 #設(shè)置ECS實(shí)例的私網(wǎng)IP地址,本示例配置為192.168.0.209 unicast_peer { 192.168.0.210 #對(duì)端ECS實(shí)例的私網(wǎng)IP地址,本示例配置為192.168.0.210 } virtual_ipaddress { 192.168.0.88 #設(shè)置HaVip的IP地址,本示例配置為192.168.0.88 } garp_master_delay 1 garp_master_refresh 5 track_interface { eth0 #設(shè)置ECS實(shí)例網(wǎng)卡名,本示例配置為eth0 } }
說明本示例僅展示需修改部分,請(qǐng)結(jié)合具體實(shí)例修改keepalived.conf文件配置。請(qǐng)勿直接復(fù)制本示例覆蓋已有keepalived.conf文件。
按下Esc鍵,輸入
:wq
并回車以保存并關(guān)閉文件。
執(zhí)行以下命令,啟動(dòng)ECS1實(shí)例的Keepalived。
systemctl start keepalived
登錄ECS2實(shí)例。
執(zhí)行以下命令,安裝Keepalived。
yum install keepalived
編輯keepalived.conf文件。
執(zhí)行以下命令,編輯keepalived.conf文件。
vim /etc/keepalived/keepalived.conf
執(zhí)行
i
命令,進(jìn)入輸入模式。根據(jù)以下信息修改keepalived.conf文件。! Configuration File for keepalived vrrp_instance VI_1 { state BACKUP #設(shè)置ECS2實(shí)例為備用實(shí)例 interface eth0 #設(shè)置網(wǎng)卡名,本示例配置為eth0 virtual_router_id 51 nopreempt priority 10 #設(shè)置優(yōu)先級(jí),數(shù)字越大,優(yōu)先級(jí)越高,本示例配置備用實(shí)例優(yōu)先級(jí)為10 advert_int 1 authentication { auth_type PASS auth_pass 1111 } unicast_src_ip 192.168.0.210 #設(shè)置ECS實(shí)例的私網(wǎng)IP地址,本示例配置為192.168.0.210 unicast_peer { 192.168.0.209 #對(duì)端ECS實(shí)例的私網(wǎng)IP地址,本示例配置為192.168.0.209 } virtual_ipaddress { 192.168.0.88 #設(shè)置HaVip的IP地址,本示例配置為192.168.0.88 } garp_master_delay 1 garp_master_refresh 5 track_interface { eth0 #設(shè)置ECS實(shí)例網(wǎng)卡名,本示例配置為eth0 } }
說明本示例僅展示需修改部分,請(qǐng)結(jié)合具體實(shí)例修改keepalived.conf文件配置。請(qǐng)勿直接復(fù)制本示例覆蓋已有keepalived.conf文件。
按下Esc鍵,輸入
:wq
并回車以保存并關(guān)閉文件。執(zhí)行以下命令,啟動(dòng)ECS2實(shí)例的Keepalived。
systemctl start keepalived
步驟三:將HaVip與主備ECS實(shí)例綁定
您可以將HaVip與ECS實(shí)例進(jìn)行綁定,綁定后,ECS實(shí)例可以使用ARP協(xié)議進(jìn)行該IP的宣告。
HaVip僅支持與同一個(gè)交換機(jī)下的ECS實(shí)例進(jìn)行綁定,每個(gè)HaVip最多可以綁定10臺(tái)ECS實(shí)例。
完成以下操作,將HaVip分別與主備ECS實(shí)例綁定。
- 登錄專有網(wǎng)絡(luò)管理控制臺(tái)。
在左側(cè)導(dǎo)航欄,單擊高可用虛擬IP。
在頂部菜單欄處,選擇HaVip的地域。
找到步驟一創(chuàng)建的HaVip實(shí)例,單擊HaVip實(shí)例的ID。
在綁定資源區(qū)域ECS實(shí)例處,單擊立即綁定。
在彈出的對(duì)話框中,選擇ECS1實(shí)例,然后單擊確定。
重復(fù)上述步驟,將HaVip與ECS2實(shí)例綁定。
綁定成功后,您可在綁定資源區(qū)域查看HaVip綁定的ECS實(shí)例。
步驟四:訪問測(cè)試
登錄ECS3實(shí)例。執(zhí)行curl ha_vip_private_ip
命令,訪問部署在ECS實(shí)例上的Nginx服務(wù)。
測(cè)試結(jié)果如下:
當(dāng)主實(shí)例ECS1工作正常時(shí),主實(shí)例ECS1承接客戶端訪問流量。
當(dāng)主實(shí)例ECS1出現(xiàn)故障時(shí),備用實(shí)例ECS2會(huì)自動(dòng)調(diào)用自身的接管程序,接管主實(shí)例ECS1的虛擬IP資源及服務(wù),實(shí)現(xiàn)業(yè)務(wù)高可用。
管理HaVip
通過控制臺(tái)管理HaVip
操作入口
- 登錄專有網(wǎng)絡(luò)管理控制臺(tái)。
在左側(cè)導(dǎo)航欄,單擊高可用虛擬IP。
在頂部菜單欄處,選擇高可用虛擬IP的地域。
根據(jù)您具體的需求,繼續(xù)執(zhí)行以下操作。
創(chuàng)建高可用虛擬IP
在高可用虛擬IP頁(yè)面,單擊創(chuàng)建高可用虛擬IP。
在創(chuàng)建高可用虛擬IP對(duì)話框,根據(jù)以下信息配置高可用虛擬IP,然后單擊確定。
資源組:為HaVip選擇所屬的資源組。
標(biāo)簽鍵:為HaVip輸入新標(biāo)簽鍵或選擇已有標(biāo)簽鍵。最多支持128個(gè)字符,不能以
aliyun
或acs:
開頭,不能包含http://
和https://
。一次最多綁定20個(gè)標(biāo)簽鍵。標(biāo)簽值:為HaVip輸入新標(biāo)簽值或選擇已有標(biāo)簽值。最多支持128個(gè)字符,不能以
aliyun
或acs:
開頭,不能包含http://
和https://
。一次最多綁定20個(gè)標(biāo)簽值。地域:顯示要?jiǎng)?chuàng)建HaVip的地域。
專有網(wǎng)絡(luò):選擇HaVip所屬的專有網(wǎng)絡(luò)。
交換機(jī):選擇HaVip所屬的交換機(jī)。
交換機(jī)網(wǎng)段:顯示交換機(jī)的網(wǎng)段。
是否自動(dòng)分配私網(wǎng)IP地址:選擇是否自動(dòng)分配私網(wǎng)IP地址。
是:由系統(tǒng)在所選交換機(jī)的網(wǎng)段中分配一個(gè)未被占用的私網(wǎng)IP地址。
否:手動(dòng)輸入一個(gè)私網(wǎng)IP地址,該IP地址必須為所選交換機(jī)的網(wǎng)段中未被占用的私網(wǎng)IP地址。
如果您無需再使用HaVip資源,您可以在高可用虛擬IP頁(yè)面,找到目標(biāo)高可用虛擬IP,然后在操作列單擊刪除。請(qǐng)確保需刪除的高可用虛擬IP未綁定ECS實(shí)例、彈性網(wǎng)卡或EIP,如已綁定,請(qǐng)先解綁。
綁定和解綁ECS實(shí)例或彈性網(wǎng)卡
在高可用虛擬IP頁(yè)面,找到目標(biāo)高可用虛擬IP實(shí)例,單擊高可用虛擬IP的ID。
在綁定資源區(qū)域ECS實(shí)例處,單擊立即綁定。
在彈出的對(duì)話框,根據(jù)以下信息選擇要綁定的ECS實(shí)例或彈性網(wǎng)卡,然后單擊確定。
配置
說明
綁定類型
選擇要綁定高可用虛擬IP的資源類型,支持選擇以下兩種資源類型:
ECS實(shí)例
彈性網(wǎng)卡
綁定資源
選擇要綁定高可用虛擬IP的ECS實(shí)例或彈性網(wǎng)卡。
要綁定高可用虛擬IP的ECS實(shí)例或彈性網(wǎng)卡必須滿足以下條件:
ECS實(shí)例的網(wǎng)絡(luò)類型為專有網(wǎng)絡(luò)類型。
ECS實(shí)例或彈性網(wǎng)卡所屬的交換機(jī)與高可用虛擬IP所屬的交換機(jī)相同。
如需解綁ECS實(shí)例或彈性網(wǎng)卡,在綁定資源區(qū)域,在已綁定ECS實(shí)例處找到目標(biāo)ECS實(shí)例或彈性網(wǎng)卡,單擊解除關(guān)聯(lián)。
高可用虛擬IP在一個(gè)時(shí)刻只可綁定同一類型資源,如需綁定其他類型資源,請(qǐng)先解綁已經(jīng)綁定的資源。
如果刪除已綁定高可用虛擬IP的ECS實(shí)例,系統(tǒng)會(huì)自動(dòng)解除高可用虛擬IP和該ECS實(shí)例的綁定關(guān)系。
如果從ECS實(shí)例上解綁已綁定高可用虛擬IP的輔助彈性網(wǎng)卡,不會(huì)影響高可用虛擬IP和該輔助彈性網(wǎng)卡的綁定關(guān)系。
如果刪除已綁定高可用虛擬IP的輔助彈性網(wǎng)卡,系統(tǒng)會(huì)自動(dòng)解除高可用虛擬IP和該輔助彈性網(wǎng)卡的綁定關(guān)系。
綁定和解綁EIP
您可以將EIP綁定至高可用虛擬IP上,綁定后該高可用虛擬IP可以通過EIP提供公網(wǎng)服務(wù)。綁定EIP前,您需要申請(qǐng)EIP。需要綁定的EIP必須滿足以下條件:
EIP的地域必須和高可用虛擬IP的地域相同。
EIP實(shí)例的狀態(tài)必須處于可用狀態(tài)。
在高可用虛擬IP頁(yè)面,找到目標(biāo)高可用虛擬IP實(shí)例,然后在操作列單擊綁定EIP。
在綁定彈性公網(wǎng)IP對(duì)話框,選擇需要綁定的EIP,然后單擊確定。
如果高可用虛擬IP不再需要通過EIP提供公網(wǎng)服務(wù),您可以將HaVip與EIP解綁。在高可用虛擬IP頁(yè)面,找到目標(biāo)高可用虛擬IP實(shí)例,在操作列單擊解綁EIP。
相關(guān)API文檔
您可以通過其他方式,SDK、Terraform或ROS調(diào)用以下API管理HaVip:
FAQ
使用Keepalived實(shí)現(xiàn)高可用時(shí),推薦使用什么版本的Keepalived?
推薦使用V1.2.15及以上版本的Keepalived。
使用Keepalived時(shí)遇到問題怎么辦?
建議您前往Keepalived GitHub了解更多信息。
使用Keepalived等第三方軟件實(shí)現(xiàn)高可用,心跳檢測(cè)的源IP怎么配置?
如果您使用Keepalived等第三方軟件實(shí)現(xiàn)高可用,您需要將心跳檢測(cè)的源IP修改為ECS實(shí)例的私網(wǎng)IP,而不能使用HaVip的私網(wǎng)IP進(jìn)行心跳檢測(cè)。
是否支持使用HaVip實(shí)現(xiàn)自建Linux虛擬服務(wù)器(LVS)高可用?
不支持。
持有HaVip的ECS實(shí)例訪問公網(wǎng)時(shí),數(shù)據(jù)包的源IP是什么?
HaVip分別與ECS實(shí)例和彈性公網(wǎng)IP綁定,持有HaVip的ECS實(shí)例進(jìn)行公網(wǎng)通信時(shí),數(shù)據(jù)包的源IP為HaVip的私網(wǎng)IP,并非ECS實(shí)例的私網(wǎng)IP,因?yàn)閺椥怨W(wǎng)IP是映射在HaVip的私網(wǎng)IP上,而不是映射在ECS實(shí)例的私網(wǎng)IP上。