借助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与EIP绑定,绑定后HaVip可以通过弹性公网IP(EIP)提供公网服务。此外,该架构下的多个ECS实例还可以利用部署集能力进一步提升业务的可靠性,更多信息,请参见部署集。
使用场景
如下图所示,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(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计费概述。
配置步骤
快速部署(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
绑定和解绑ECS实例或弹性网卡
绑定和解绑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上。