全部产品
Search
文档中心

专有网络 VPC:高可用虚拟IP(HaVip)

更新时间:Feb 21, 2024

借助VPC提供的高可用虚拟IP HaVip(High-Availability Virtual IP Address)功能,您可在云上基于ARP协议,通过Keepalived或Heartbeat软件来搭建服务高可用架构,以确保主备切换过程中服务IP不变(即IP漂移)。

什么是高可用虚拟IP(HaVip)

定义

HaVip是一种可以独立创建和释放的私网IP资源,具备与ECS实例主私网IP地址一样的网络接入能力,可以与高可用软件,例如Keepalived配合使用,搭建高可用主备服务,提高业务的可用性。

HaVip支持绑定一个弹性公网IP(EIP)、多个ECS实例或多个ECS实例的主网卡或辅助网卡,以实现同可用区、多服务器高可用架构下的IP漂移,确保对外提供服务的私网IP始终不变。此外,该架构下的多个ECS实例还可以利用部署集能力进一步提升业务的可靠性,更多信息,请参见部署集概述

Keepalived就可以支持实现虚拟IP高可用,为什么要配合HaVip来实现呢?

在传统数据中心里,服务器可以通过地址解析协议ARP(Address Resolution Protocol)声明自己的IP地址并对外提供服务,很多应用场景或常用软件需要主机具备此能力。例如,使用Keepalived、Heartbeat等软件实现容灾恢复过程中服务IP不变的高可用方案。

然而,大部分云厂商采用SDN架构后,在VPC环境下不支持免费ARP广播功能。因为云上网络环境需使用虚拟化技术构建,虚拟服务器IP地址由云平台底层的虚拟化平台分配和管理。您的应用无法像传统方式一样修改主机IP地址,且整个虚拟网络是基于3层的隧道技术,ARP被终结在发送端,主机无法声明IP地址。为此,阿里云推出HaVip功能,解决此问题。

使用场景

场景一:面向公网的高可用服务

如下图所示,ECS1和ECS2实例通过Keepalived实现主备高可用,并与HaVip成功绑定;其中,ECS1实例通过ARP宣告该HaVip。宣告成功后,ECS1作为主实例通过与HaVip绑定的EIP对外提供服务,ECS2作为备用ECS实例。

当ECS1发生故障时,ECS2会自动调用自身的接管程序,接管ECS1的服务,实现业务高可用。

image

场景二:面向私网的高可用服务

如下图所示,ECS1和ECS2实例基于HaVip,使用Keepalived组合成一个高可用的私网服务。VPC内的其他实例ECS3可以通过私网访问该服务,服务地址为HaVip的地址。当ECS1发生故障时,ECS2会自动调用自身的接管程序,接管ECS1的服务,实现业务高可用。

image

配额和费用

HaVip功能正在公测,您可以登录阿里云配额中心控制台进行自助申请。

重要

公测期间,HaVip免费使用,且不承诺任何服务等级协议(SLA)相关的保障条款。

支持的地域

支持HaVip功能的地域如下表所示。

区域

支持HaVip的地域

亚太

华北1(青岛)、华北2(北京)、华北3(张家口)、华北5(呼和浩特)、华北6(乌兰察布)、华东1(杭州)、华东2(上海)、华东5(南京-本地地域)、华东6(福州-本地地域)、华南1(深圳)、华南2(河源)、华南3(广州)、西南1(成都)、华中1(武汉-本地地域)、中国香港、日本(东京)、韩国(首尔)、新加坡、澳大利亚(悉尼)、马来西亚(吉隆坡)、印度尼西亚(雅加达)、菲律宾(马尼拉)、泰国(曼谷)、印度(孟买)

欧洲与美洲

德国(法兰克福)、英国(伦敦)、美国(硅谷)、美国(弗吉尼亚)

中东

阿联酋(迪拜)沙特(利雅得)

使用限制与配额

配额名称

描述

默认限制

提升配额

支持创建高可用虚拟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脚本后,会为您创建2个ECS 1 vCPU 2 GiB的抢占式实例、1个VPC、1个vSwitch、1个EIP、1个HaVip。可能会产生约0.5美元的费用(前提是您在10分钟内完成并清除资源)。更多计费信息,请参见ECS抢占式实例EIP计费概述

  • 手动部署:具体费用则取决于您创建的ECS和EIP等资源规格。

配置步骤

快速部署(Terraform)

  1. 下载项目文件iac-example-havip

  2. 登录阿里云Cloud Shell,上传下载的文件至Cloud Shell。image

  3. 依次执行以下命令,解压压缩包,进入工程根目录,初始化脚本并创建资源。

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

    返回结果:

    image.png

  4. 结果验证。

    1. 执行curl web_url命令,即可查看到ECS1(主)实例返回的信息。

      image.png

    2. 执行以下命令停止ECS1实例。

      aliyun ecs StopInstance --InstanceId <$instance_id_ecs1> --ForceStop false --StoppedMode KeepCharging -- Dryrun false
    3. 再次执行curl web_url命令,即可查看到返回的信息是ECS2。

      image.png

此时,由于ECS1宕机,ECS2作为备机将自动接管ECS1实例的服务,EIP绑定了HaVip,对外暴露的服务IP不变,实现漂移。

  1. 执行以下命令,清除资源,防止继续计费。

    terraform destroy -auto-approve

手动部署(控制台)

步骤一:创建HaVip

  1. 登录专有网络管理控制台
  2. 在左侧导航栏,单击高可用虚拟IP

  3. 在顶部菜单栏处,选择要创建HaVip的地域。

  4. 高可用虚拟IP页面,单击创建高可用虚拟IP

  5. 创建高可用虚拟IP对话框,根据以下信息配置HaVip,然后单击确定

    • 资源组:为HaVip选择所属的资源组。

    • 标签键:为HaVip输入新标签键或选择已有标签键。最多支持128个字符,不能以aliyunacs:开头,不能包含http://https://。一次最多绑定20个标签键。

    • 标签值:为HaVip输入新标签值或选择已有标签值。最多支持128个字符,不能以aliyunacs:开头,不能包含http://https://。一次最多绑定20个标签值。

    • 地域:显示要创建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

    3. 根据以下信息修改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文件。

    4. 按下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

    3. 根据以下信息修改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文件。

    4. 按下Esc键,输入:wq并回车以保存并关闭文件。

  8. 执行以下命令,启动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实例,单击HaVip实例的ID。

  5. 绑定资源区域ECS实例处,单击立即绑定

    绑定ECS

  6. 在弹出的对话框中,选择ECS1实例,然后单击确定

  7. 重复上述步骤,将HaVip与ECS2实例绑定。

绑定成功后,在绑定资源区域,查看HaVip绑定的ECS实例。

步骤四:将HaVip与EIP绑定

您可以将HaVip与EIP绑定,绑定后该HaVip可以通过EIP提供公网服务。

  1. 登录专有网络管理控制台
  2. 在左侧导航栏,单击高可用虚拟IP

  3. 在顶部菜单栏处,选择HaVip的地域。

  4. 找到步骤一:创建HaVip创建的HaVip实例,单击HaVip实例的ID。

  5. 绑定资源区域,单击弹性公网IP右侧的立即绑定

    绑定EIP

  6. 在弹出的对话框中,选择需要绑定的EIP,然后单击确定

绑定成功后,您可以查看绑定的EIP。

步骤五:访问测试

完成以下操作,测试业务的高可用。

  1. 打开本地PC的浏览器。

  2. 输入EIP的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的ECS实例,系统会自动解除高可用虚拟IP和该ECS实例的绑定关系。

  • 如果从ECS实例上解绑已绑定高可用虚拟IP的辅助弹性网卡,不会影响高可用虚拟IP和该辅助弹性网卡的绑定关系。

  • 如果删除已绑定高可用虚拟IP的辅助弹性网卡,系统会自动解除高可用虚拟IP和该辅助弹性网卡的绑定关系。

绑定和解绑EIP

您可以将EIP绑定至高可用虚拟IP上,绑定后该高可用虚拟IP可以通过EIP提供公网服务。绑定EIP前,您需要申请EIP。需要绑定的EIP必须满足以下条件:

  • EIP的地域必须和高可用虚拟IP的地域相同。

  • EIP实例的状态必须处于可用状态。

  1. 高可用虚拟IP页面,找到目标高可用虚拟IP实例,然后在操作列单击绑定EIP

  2. 绑定弹性公网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上。