本文为您介绍如何使用高可用虚拟IP(High-Availability Virtual IP Address,简称HaVip)和keepalived搭建主备双机,实现业务高可用。
前提条件
- 目前,高可用虚拟IP功能正在公测,如需使用,请您登录阿里云配额中心控制台进行自助申请。
- 您已经申请了弹性公网IP(Elastic IP Address,简称EIP)。具体操作,请参见申请EIP。
- 您已经创建了两台云服务器ECS(Elastic Compute Service)实例,并在ECS实例部署了Nginx服务。具体操作,请参见使用向导创建实例。
背景信息
本文以下图场景为例。某公司在阿里云创建了两台ECS实例,两台ECS实例均部署了Nginx服务。因公司业务发展,要求业务具有高可用性。
您可以使用HaVip和keepalived搭建主备双机,搭建成功后,默认主实例ECS1承接客户端访问流量。当主实例ECS1发生故障时,备用实例ECS2会自动调用自身的接管程序,接管主实例ECS1的虚拟IP资源及服务,实现业务高可用。

配置步骤

步骤一:创建HaVip
HaVip是一种可以独立创建和释放的私网IP资源。ECS实例绑定HaVip后,ECS实例可以通过使用ARP协议进行该IP的宣告。
- 登录专有网络管理控制台。
- 在左侧导航栏,单击高可用虚拟IP。
- 在顶部菜单栏处,选择要创建HaVip的地域。
- 在高可用虚拟IP页面,单击创建高可用虚拟IP。
- 在创建高可用虚拟IP对话框,根据以下信息配置HaVip,然后单击确定。
- 地域:显示要创建HaVip的地域。
- 专有网络:选择HaVip所属的专有网络。
- 交换机:选择HaVip所属的交换机。
- 交换机网段:显示交换机的网段。
- 是否自动分配私网IP地址:选择是否自动分配私网IP地址。
- 是:由系统在所选交换机的网段中分配一个未被占用的私网IP地址。
- 否:手动输入一个私网IP地址,该IP地址必须为所选交换机的网段中未被占用的私网IP地址。
创建成功后,您可以在
高可用虚拟IP页面查看创建的HaVip。

步骤二:在主备ECS实例上安装keepalived
keepalived的作用是检测ECS实例的状态,如果主ECS实例发生故障,备用ECS实例会自动调用自身的接管程序,接管主ECS实例的虚拟IP资源及服务,实现业务高可用。
本示例以操作系统为CentOS的ECS实例为例,介绍如何安装keepalived。
- 登录ECS1实例。具体操作,请参见ECS连接方式概述。
- 执行以下命令,安装keepalived。
yum install keepalived
- 编辑keepalived配置文件。
- 执行以下命令,编辑keepalived.conf文件。
vim /etc/keepalived/keepalived.conf
- 执行以下命令,进入输入模式。
i
- 根据以下信息修改keepalived配置文件。
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
#vrrp_script checkhaproxy
#{
# script "/etc/keepalived/do_sth.sh"
# interval 5
#}
vrrp_instance VI_1 {
state MASTER #设置ECS1实例为主实例
interface eth0 #设置网卡名,本示例配置为eth0
virtual_router_id 51
nopreempt
# preempt_delay 10
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
}
notify_master "/etc/keepalived/notify_action.sh MASTER"
notify_backup "/etc/keepalived/notify_action.sh BACKUP"
notify_fault "/etc/keepalived/notify_action.sh FAULT"
notify_stop "/etc/keepalived/notify_action.sh STOP"
garp_master_delay 1
garp_master_refresh 5
track_interface {
eth0 #设置ECS实例网卡名,本示例配置为eth0
}
# track_script {
# checkhaproxy
# }
}
- 按下Esc键,输入
:wq
并回车以保存并关闭文件。
- 执行以下命令,启动ECS1实例的keepalived。
systemctl start keepalived
- 登录ECS2实例。
- 执行以下命令,安装keepalived。
yum install keepalived
- 编辑keepalived配置文件。
- 执行以下命令,编辑keepalived.conf文件。
vim /etc/keepalived/keepalived.conf
- 执行以下命令,进入输入模式。
i
- 根据以下信息修改keepalived配置文件。
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
vrrp_garp_interval 0
vrrp_gna_interval 0
}
#vrrp_script checkhaproxy
#{
# script "/etc/keepalived/do_sth.sh"
# interval 5
#}
vrrp_instance VI_1 {
state BACKUP #设置ECS2实例为备用实例
interface eth0 #设置网卡名,本示例配置为eth0
virtual_router_id 51
nopreempt
# preempt_delay 10
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
}
notify_master "/etc/keepalived/notify_action.sh MASTER"
notify_backup "/etc/keepalived/notify_action.sh BACKUP"
notify_fault "/etc/keepalived/notify_action.sh FAULT"
notify_stop "/etc/keepalived/notify_action.sh STOP"
garp_master_delay 1
garp_master_refresh 5
track_interface {
eth0 #设置ECS实例网卡名,本示例配置为eth0
}
# track_script {
# checkhaproxy
# }
}
- 按下Esc键,输入
:wq
并回车以保存并关闭文件。
- 执行以下命令,启动ECS2实例的keepalived。
systemctl start keepalived
步骤三:将HaVip与主备ECS实例绑定
您可以将HaVip绑定到ECS实例上,绑定后,ECS实例可以使用ARP协议进行该IP的宣告。
说明 HaVip仅支持绑定到同一个交换机下的ECS实例,每个HaVip最多可以绑定两台ECS实例。
完成以下操作,将HaVip分别与主备ECS实例绑定。
- 登录专有网络管理控制台。
- 在左侧导航栏,单击高可用虚拟IP。
- 在顶部菜单栏处,选择HaVip的地域。
- 找到步骤一:创建HaVip创建的HaVip实例,单击HaVip实例的ID。
- 在绑定资源区域ECS实例处,单击立即绑定。
- 在弹出的对话框中,选择ECS1实例,然后单击确定。
- 重复上述步骤,将HaVip与ECS2实例绑定。
绑定成功后,在
绑定资源区域,查看HaVip绑定的ECS实例。

步骤四:将HaVip与EIP绑定
您可以将HaVip与EIP绑定,绑定后该HaVip可以通过EIP提供公网服务。
- 登录专有网络管理控制台。
- 在左侧导航栏,单击高可用虚拟IP。
- 在顶部菜单栏处,选择HaVip的地域。
- 找到步骤一:创建HaVip创建的HaVip实例,单击HaVip实例的ID。
- 在绑定资源区域,单击弹性公网IP右侧的立即绑定。
- 在弹出的对话框中,选择需要绑定的EIP,然后单击确定。
绑定成功后,您可以查看绑定的EIP。

步骤五:访问测试
完成以下操作,测试业务的高可用。
- 打开本地PC的浏览器。
- 输入EIP的IP地址,访问部署在ECS实例上的Nginx服务。
测试结果如下:
- 当主实例ECS1工作正常时,主实例ECS1承接客户端访问流量。

- 当主实例ECS1出现故障时,备用实例ECS2会自动调用自身的接管程序,接管主实例ECS1的虚拟IP资源及服务,实现业务高可用。
