藉助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執行個體還可以利用部署集能力進一步提升業務的可靠性,更多資訊,請參見部署集。
使用情境
如下圖所示,ECS1和ECS2執行個體基於HaVip,使用Keepalived組合成一個高可用的私網服務。VPC內的其他執行個體ECS3可以通過私網訪問該服務,服務地址為HaVip的地址。當ECS1發生故障時,ECS2會自動調用自身的接管程式,接管ECS1的服務,實現業務高可用。
如果您有公網訪問需求,您可為高可用虛擬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個
| ||
HaVip是否支援廣播和組播通訊 | 不支援 HaVip只支援單播,如果您使用Keepalived等第三方軟體實現高可用,需要修改設定檔中的通訊方式為單播通訊。 | ||
單個帳號支援建立的HaVip的數量 | 50個 | ||
單個VPC支援建立的HaVip的數量 | 50個 | ||
vpc_quota_havip_custom_route_entry | 單個VPC內,目的地址指向HaVip的路由條目的數量 | 5條 |
HaVip的使用樣本
您可使用Terraform自動化指令碼體驗快速部署,也可以通過控制台操作手動部署ECS執行個體,來搭配HaVip和Keepalived實現同可用性區域雙機高可用,架構圖可參見本文使用情境。
配置流程
前提條件
費用
快速部署:執行Terraform指令碼後,會為您建立3個ECS 1 vCPU 2 GiB的搶佔式執行個體、1個VPC、1個vSwitch、1個HaVip。具體費用取決於您建立的ECS執行個體留存時間,建議您及時清除資源,防止繼續計費。
手動部署:具體費用取決於您建立的ECS資源規格。
如果您有公網訪問需求,為高可用虛擬IP綁定了EIP後,您需要為綁定的EIP支付費用。更多計費資訊,請參見EIP計費概述。
配置步驟
下載專案檔。
登入阿里雲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的地區。
根據您具體的需求,繼續執行以下操作。
相關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上。