高可用虚拟IP(HaVip)

借助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实例还可以利用部署集能力进一步提升业务的可靠性,更多信息,请参见部署集

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

在传统数据中心里,服务器可以通过地址解析协议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的服务,实现业务高可用。

image
说明

如果您有公网访问需求,您可为高可用虚拟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个

说明
  • 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用户使用ECS资源

  • 针对通过控制台手动部署的操作,还需准备以下资源:

费用

  • 快速部署:执行Terraform脚本后,会为您创建3个ECS 1 vCPU 2 GiB的抢占式实例、1个VPC、1个vSwitch、1个HaVip。具体费用取决于您创建的ECS实例留存时间,建议您及时清除资源,防止继续计费。

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

说明

如果您有公网访问需求,为高可用虚拟IP绑定了EIP后,您需要为绑定的EIP支付费用。更多计费信息,请参见EIP计费概述

配置步骤

快速部署(Terraform)

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

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

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

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

    返回结果:

    output.png

  4. 结果验证。

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

      result1.png

    2. 在Cloud Shell中执行以下命令停止ECS1实例。

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

      result2.png

    此时,由于ECS1宕机,ECS2作为备机将自动接管ECS1实例的服务,以保证对外提供服务的IP不变,实现IP漂移。

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

    terraform destroy -auto-approve

手动部署(控制台)

步骤一:创建HaVip

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

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

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

  5. 创建高可用虚拟IP对话框,根据以下信息配置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命令,进入输入模式。根据以下信息修改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文件。

    3. 按下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命令,进入输入模式。根据以下信息修改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文件。

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

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

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

    绑定ECS

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

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

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

步骤四:访问测试

登录ECS3实例。执行curl ha_vip_private_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在一个时刻只可绑定同一类型资源,如需绑定其他类型资源,请先解绑已经绑定的资源。

  • 如果删除已绑定高可用虚拟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上。

SAP系统高可用部署最佳实践