本文为您介绍如何使用高可用虚拟IP(HaVip)和keepalived搭建主备双机,实现业务高可用。

前提条件

  • 您已经注册了阿里云账号。如未注册,请先完成账号注册
  • 目前,HaVip功能正在公测,如需使用,请提交公测申请
  • 您已经申请了弹性公网IP(EIP)。详细信息,请参见申请新EIP
  • 您已经创建了两台云服务器ECS实例,并在ECS实例部署了Nginx服务。详细信息,请参见使用向导创建实例

背景信息

本文以下图场景为例。某公司在阿里云创建了两台ECS实例,两台ECS实例均部署了Nginx服务。因公司业务发展,要求业务具有高可用性。

您可以使用HaVip和keepalived搭建主备双机,搭建成功后,默认主实例ECS1承接客户端访问流量。当主实例ECS1发生故障时,备用实例ECS2会自动调用自身的接管程序,接管主实例ECS1的虚拟IP资源及服务,实现业务高可用。

高可用场景图

配置步骤

配置步骤

步骤一:创建HaVip

HaVip是一种可以独立创建和释放的私网IP资源。ECS实例绑定HaVip后,ECS实例可以通过使用ARP协议进行该IP的宣告。

完成以下操作,创建HaVip。

  1. 登录专有网络管理控制台
  2. 在左侧导航栏,单击高可用虚拟IP
  3. 在顶部菜单栏处,选择要创建HaVip的地域。
  4. 高可用虚拟IP页面,单击创建高可用虚拟IP
  5. 创建高可用虚拟IP对话框,根据以下信息配置HaVip,然后单击确定
    • 地域:显示要创建HaVip的地域。
    • 专有网络:选择HaVip所属的专有网络。
    • 交换机:选择HaVip所属的交换机。
    • 交换机网段:显示交换机的网段。
    • 私网IP地址:指定HaVip的私网IP。
      说明 指定的私网IP必须为交换机网段中未被占用的私网IP。
创建成功后,您可以在高可用虚拟IP页面查看创建的HaVip。创建HaVip

步骤二:在主备ECS实例上安装keepalived

Keepalived的作用是检测ECS实例的状态,如果主ECS实例发生故障,备用ECS实例会自动调用自身的接管程序,接管主ECS实例的虚拟IP资源及服务,实现业务高可用。

本示例以操作系统为CentOS的ECS实例为例,介绍如何安装keepalived。

  1. 登录ECS1实例。
  2. 执行以下命令,安装keepalived。
    yum install keepalived
  3. 编辑keepalived配置文件。
    1. 执行以下命令,编辑keepalived.conf文件。
      vim /etc/keepalived/keepalived.conf
    2. 执行以下命令,进入输入模式。
      i
    3. 根据以下信息修改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           #设置ECS实例为主实例
          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 
      #    }
      }
    4. 执行以下命令,保存编辑并退出。
      :wq
  4. 执行以下命令,启动ECS1实例的keepalived。
    systemctl start keepalived
  5. 登录ECS2实例。
  6. 执行以下命令,安装keepalived。
    yum install keepalived
  7. 编辑keepalived配置文件。
    1. 执行以下命令,编辑keepalived.conf文件。
      vim /etc/keepalived/keepalived.conf
    2. 执行以下命令,进入输入模式。
      i
    3. 根据以下信息修改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           #设置ECS实例为备用实例
          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 
      #    }
      }
    4. 执行以下命令,保存编辑并退出。
      :wq
  8. 执行以下命令,启动ECS2实例的keepalived。
    systemctl start keepalived

步骤三:将HaVip与主备ECS实例绑定

您可以将HaVip绑定到ECS实例上,绑定后,ECS实例可以通过使用ARP协议进行该IP的宣告。
说明 HaVip仅支持绑定到同一个交换机下的ECS实例,每个HaVip最多可以绑定两台ECS实例。

完成以下操作,将HaVip分别与主备ECS实例绑定。

  1. 登录专有网络管理控制台
  2. 在左侧导航栏,单击高可用虚拟IP
  3. 在顶部菜单栏处,选择HaVip的地域。
  4. 找到步骤一创建的HaVip实例,单击操作列下的管理
  5. 绑定资源区域,单击图标。
  6. 在弹出的对话框中,选择ECS1实例,然后单击确定
  7. 重复上述步骤,将HaVip与ECS2实例绑定。
  8. 高可用虚拟IP详情页面,单击刷新,查看HaVip绑定的ECS实例。
    绑定ECS

步骤四:将HaVip与EIP绑定

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

完成以下操作,将HaVip与EIP绑定。

  1. 绑定资源区域,单击绑定EIP图标图标。
    绑定EIP
  2. 在弹出的对话框中,选择需要绑定的EIP,然后单击确定
绑定成功后,您可以查看绑定的EIP。绑定EIP

步骤五:访问测试

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

  1. 打开电脑的浏览器。
  2. 输入EIP的IP地址访问部署在ECS实例上的Nginx服务。
    测试结果如下:
    • 当主实例ECS1工作正常时,主实例ECS1承接客户端访问流量。测试结果1
    • 当主实例ECS1出现故障时,备用实例ECS2会自动调用自身的接管程序,接管主实例ECS1的虚拟IP资源及服务,实现业务高可用。测试结果2