You need to enable JavaScript to run this app.
导航

通过HAVIP和Keepalived搭建高可用主备集群

最近更新时间2023.12.08 11:53:22

首次发布时间2022.03.01 09:03:59

高可用虚拟IP通常用于搭建高可用主备服务。本文为您介绍如何使用高可用虚拟IP搭建高可用主备集群。

前提条件

  • 已创建私有网络VPC-01及其子网subnet-01,具体操作可参见创建私有网络
  • 已在子网subnet-01中创建2台云服务器ecs-01、ecs-02,本文云服务器镜像以CentOS 7.9为例,您也可以按需替换为CentOS 7.6等CentOS 7系镜像。具体操作可参考购买云服务器
  • 已成功申请试用HAVIP服务。当前HAVIP正在邀测中,如需使用,请提交工单或联系客户经理申请。

实现原理

HAVIP同时绑定两台云服务器,绑定成功后两台云服务器通过ARP(Address Resolution Protocol)宣告同一个HAVIP,形成主备集群,即一台云服务器为主实例,另一台云服务器为备实例。分别在主、备云服务器实例上安装Keepalived,Keepalived会定期检测云服务器的状态,当主云服务器状态异常时,备用云服务器切换为主云服务器并继续提供服务。

操作步骤

步骤一:创建HAVIP

  1. 登录高可用虚拟IP控制台

  2. 在顶部导航栏,选择目标地域。
    此处选择的地域需要与VPC-01地域一致,本操作选择华北2(北京)。

  3. 单击“创建高可用虚拟IP”按钮,进入创建高可用虚拟IP页面。

  4. 参考下表配置高可用虚拟IP。

    参数说明取值样例
    名称设置高可用虚拟IP的名称。HAVIP-01
    私有网络选择高可用虚拟IP所属的私有网络。若没有可用的私有网络,您可单击“创建私有网络”按钮创建新的私有网络。VPC-01|192.168.0.0/16
    子网选择高可用虚拟IP所属的子网。该子网会为高可用虚拟IP提供IP地址,且高可用虚拟IP仅可绑定该子网下的云服务器或网卡。subnet-01|192.168.1.0/24
    分配方式选择IP地址的分配方式,支持手动分配和自动分配。手动分配 | 192.168.1.9
  5. 单击“确定”按钮,完成创建。
    HAVIP的IP地址为192.168.1.9。

步骤二:在云服务器上安装Keepalived

  1. 参考通过控制台登录Linux实例登录云服务器ecs-01。
  2. 执行如下命令,查看Keepalived安装包版本。
    yum list keepalived
    
    CentOS 7.9默认的keepalived版本如下图所示。

    说明

    以下配置以keepalived版本1.3.5-19.e17为例进行介绍。

  3. 执行如下命令,安装Keepalived。
    yum install -y keepalived
    
  4. 执行如下命令,进入keepalived.conf文件目录。
    vim /etc/keepalived/keepalived.conf
    
  5. 在键盘上按i进入编辑模式。
  6. 参照下方信息修改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"   # 补充本段代码,检测业务进程是否运行正常。“do_sth.sh”是自定义的业务进程检测脚本,您在操作时应替换为实际的脚本。
         interval 5
    }
    
    vrrp_instance VI_1 {
        state MASTER       # 设置云服务器ecs-01中keepalived节点初始状态,MASTER表示主用状态,BACKUP表示备用状态。本示例设置ecs-01为MASTER。
        interface eth0    # 设置云服务器中绑定HAVIP的网卡,用于发送VRRP包。本示例使用eth0。
        virtual_router_id 51
        nopreempt  # 补充本行代码设置为非抢占模式,即当高优先级的云服务器实例恢复后,低优先级的云服务器实例仍为MASTER。
        preempt_delay 10  # 补充本行代码,设置仅state为MASTER时抢占延迟,单位秒,取值0~1000。
        priority 100   # 设置优先级,数字越大优先级越高。本示例ecs-01优先级设置为100。
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        unicast_src_ip 192.168.1.19   # 补充本行代码设置云服务器ecs-01的私网IP地址,本示例为192.168.1.19,您在操作时应替换为实际的私网IP地址。
        unicast_peer {
          192.168.1.20             # 补充本段代码设置云服务器ecs-02的私网IP地址,本示例为192.168.1.20,您在操作时应替换为实际的私网IP地址。
      }
        virtual_ipaddress {
            192.168.1.9  # 设置高可用虚拟IP的IP地址,本示例为192.168.1.9,您在操作时应替换为实际HAVIP的IP地址。   
        }
        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    # 补充本行代码,设置切换为主状态后更新ARP缓存的时间。
        garp_master_refresh 5   # 补充本行代码,设置主节点发送ARP报文的时间间隔。
        track_interface {
                    eth0               # 补充本段代码,设置ecs-01的网卡,本示例为eth0。
            }
        track_script {
         checkhaproxy   # 补充本段代码
      }
    }   
    
  7. 配置完成后,在键盘上按esc键,然后输入:wq保存并退出编辑模式。
  8. 执行如下命令,启动ecs-01的Keepalived,使步骤5中的配置生效。
    systemctl start keepalived
    
  9. 登录云服务器ecs-02,参照步骤1~步骤4安装Keepalived并进入keepalived.conf文件的编辑模式。
  10. 参照下方信息修改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"   # 补充本段代码,检测业务进程是否运行正常。“do_sth.sh”是自定义的业务进程检测脚本,您在操作时应替换为实际的脚本。
         interval 5
    }
    
    vrrp_instance VI_1 {
        state BACKUP       # 设置云服务器ecs-02中keepalived节点初始状态,本示例设置ecs-02为BACKUP。
        interface eth0    # 设置云服务器中绑定HAVIP的网卡,用于发送VRRP包。本示例使用eth0。
        virtual_router_id 51
        nopreempt
        preempt_delay 10
        priority 50   # 设置优先级,数字越大优先级越高。本示例ecs-02优先级设置为50。
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        unicast_src_ip 192.168.1.20   # 补充本行代码设置云服务器ecs-02的私网IP地址,本示例为192.168.1.20,您在操作时应替换为实际的私网IP地址。
        unicast_peer {
          192.168.1.19             # 补充本段代码设置云服务器ecs-01的私网IP地址,本示例为192.168.1.19,您在操作时应替换为实际的私网IP地址。
      }
        virtual_ipaddress {
            192.168.1.9  # 设置高可用虚拟IP的IP地址,本示例为192.168.1.9,您在操作时应替换为实际HAVIP的IP地址。   
        }
        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    # 补充本行代码,设置切换为主状态后更新ARP缓存的时间。
        garp_master_refresh 5   # 补充本行代码,设置主节点发送ARP报文的时间间隔。
        track_interface {
                    eth0               # 补充本段代码,设置ecs-02的网卡,本示例为eth0。
            }
        track_script {
         checkhaproxy   # 补充本段代码
      }
    }   
    
  11. 配置完成后,在键盘上按esc键,然后输入:wq保存并退出编辑模式。
  12. 执行如下命令,启动ecs-02的Keepalived,使步骤9中的配置生效。
    systemctl start keepalived
    

步骤三:为云服务器绑定HAVIP

  1. 返回高可用虚拟IP控制台
  2. 在顶部导航栏,选择目标地域。
    此处选择的地域需要与VPC-01地域一致,本操作选择华北2(北京)。
  3. 在高可用虚拟IP列表中,单击待绑定高可用虚拟IP名称“HAVIP-01”,进入详情页面。
  4. 在“绑定资源”中单击“实例”下其中一个“立即绑定”按钮,进入绑定实例页面。
  5. 单击“云服务器”页签,选中云服务器ecs-01。
  6. 单击“确定”按钮,完成绑定操作。
  7. 同样的,在“绑定资源”中单击“实例”下另一个“立即绑定”按钮,绑定云服务器ecs-02。

步骤四:HAVIP绑定公网IP

如果您的云服务器ecs-01和ecs-02需要提供公网服务,您为HAVIP绑定公网IP实现。如果云服务器ecs-01和ecs-02不需要提供公网服务,您可跳过此部分操作。

  1. 进入高可用虚拟IP“HAVIP-01”详情页面,在“绑定资源”中单击“公网IP”的“立即绑定”按钮,进入绑定公网IP页面。
  2. 选中待绑定的公网IP,单击“确定”按钮,完成绑定操作。
    若没有可用公网IP,可先申请一个使用,具体操作请参见申请公网IP

步骤五:模拟故障状态下访问测试

  • 正常情况:ecs-01处于激活状态提供相关服务,ecs-02处于备用状态不提供服务,HAVIP供ecs-01使用。
  • 模拟异常:通过停止ecs-01的Keepalived进程模拟ecs-01故障,在HAVIP控制台检查是否完成主备切换。
  • 预期结果:主备切换成功,ecs-02被激活接管ecs-01的业务,HAVIP供ecs-02使用。