👉点击这里申请火山引擎VIP帐号,立即体验火山引擎产品>>>
前提条件
已创建私有网络VPC-01及其子网subnet-01,具体操作可参见创建私有网络。
已在子网subnet-01中创建2台云服务器ecs-01、ecs-02,本文云服务器镜像以CentOS 7.9为例,您也可以按需替换为CentOS 7.6等CentOS 7系镜像。具体操作可参考购买云服务器。
已成功申请试用HAVIP服务。当前HAVIP正在邀测中,暂仅支持完成 企业认证 的账号申请试用,如需试用,请联系客户经理。
实现原理
操作步骤
步骤一:创建HAVIP
登录高可用虚拟IP控制台。
在顶部导航栏,选择目标地域。此处选择的地域需要与VPC-01地域一致,本操作选择华北2(北京)。
单击“创建高可用虚拟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 |
单击“确定”按钮,完成创建。HAVIP的IP地址为192.168.1.9。
步骤二:在云服务器上安装Keepalived
参考通过控制台登录Linux实例登录云服务器ecs-01。
执行如下命令,查看Keepalived安装包版本。
yum list keepalived
执行如下命令,安装Keepalived。
yum install -y 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" # 补充本段代码,检测业务进程是否运行正常。“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 # 补充本段代码 } }
配置完成后,在键盘上按esc键,然后输入:wq保存并退出编辑模式。
执行如下命令,启动ecs-01的Keepalived,使步骤5中的配置生效。
systemctl start keepalived
登录云服务器ecs-02,参照步骤1~步骤4安装Keepalived并进入keepalived.conf文件的编辑模式。
参照下方信息修改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 # 补充本段代码 } }
配置完成后,在键盘上按esc键,然后输入:wq保存并退出编辑模式。
执行如下命令,启动ecs-02的Keepalived,使步骤9中的配置生效。
systemctl start keepalived
步骤三:为云服务器绑定HAVIP
返回高可用虚拟IP控制台。
在顶部导航栏,选择目标地域。此处选择的地域需要与VPC-01地域一致,本操作选择华北2(北京)。
单击待绑定高可用虚拟IP名称“HAVIP-01”。
在“绑定资源”中单击“实例”下其中一个“立即绑定”按钮。
单击“云服务器”页签,选中云服务器ecs-01。
单击“确定”按钮,完成绑定操作。
同样的,在“绑定资源”中单击“实例”下另一个“立即绑定”按钮,绑定云服务器ecs-02。
步骤四:HAVIP绑定公网IP
进入高可用虚拟IP“HAVIP-01”详情页面,在“绑定资源”中单击“公网IP”的“立即绑定”按钮,进入绑定公网IP页面。
选中待绑定的公网IP,单击“确定”按钮,完成绑定操作。
步骤五:模拟故障状态下访问测试
正常情况:ecs-01处于激活状态提供相关服务,ecs-02处于备用状态不提供服务,HAVIP供ecs-01使用。
模拟异常:通过停止ecs-01的Keepalived进程模拟ecs-01故障,在HAVIP控制台检查是否完成主备切换。
预期结果:主备切换成功,ecs-02被激活接管ecs-01的业务,HAVIP供ecs-02使用。