HAVIP结合Keepalived实现主备多机高可用
概述
本文档介绍如何通过高可用虚拟 IP(High-Availability Virtual IP Address,简称 HAVIP)和 Keepalived 搭建主备集群。默认由主服务器承接客户端访问流量;当主服务器发生故障时,备服务器自动接管服务,实现业务高可用。
方案概述
本文以下图场景为例,创建四台BCC实例和一个HAVIP,BCC内网IP分别为192.168.0.2,192.168.1.2,192.168.2.2,192.168.0.5,HAVIP内网IP为192.168.2.3。通过Keepalived使得192.168.0.2为主服务器,192.168.1.2和192.168.2.2为备服务器,模拟客户端(192.168.0.5)去访问HAVIP(192.168.2.3)。

配置步骤
步骤一:创建HAVIP
1.登录 高可用虚拟IP 控制台,选择 产品服务->私有网络 VPC->高可用虚拟 IP 路径,进入高可用虚拟 IP 列表页。
单击 【创建高可用虚拟 IP】 进入创建弹框。
2.填写下列配置信息:

| 配置项 | 说明 |
|---|---|
| 虚拟IP名称 | 用户自定义HAVIP名称 |
| 所在网络 | 选择待创建 HAVIP所在的私有网络 |
| 所在子网 | HAVIP具有子网属性,请下拉选择当前VPC下的子网 |
| IP地址 | 默认选择自动分配IP地址,支持输入指定IP,该IP要求未被占用 |
| 描述 | 编辑HAVIP相关描述信息 |
3.单击 【确定】 完成创建。创建完成后,高可用虚拟 IP 列表中显示新建 HAVIP,状态为“可用”。。

步骤二:在主备服务器上安装Keepalived
1.登录 云服务器BCC 控制台进入实例页面,点击“创建实例”,填写配置信息后完成BCC创建。具体操作请参见创建实例导航。
2.登录云服务器实例。具体操作请参见登录方式概述。
3.在主服务器和备服务器上搭建Keepalived,使用 yum 方式安装软件包。
1 yum install keepalived -y
步骤三:配置Keepalived绑定HAVIP到主备服务器
1.登录 高可用虚拟IP 控制台,选择 产品服务->私有网络 VPC->高可用虚拟 IP 路径,进入高可用虚拟 IP 列表页。找到目标 HAVIP,单击 绑定服务器(网卡) 列中的数量,进入 绑定服务器 页签。

2.单击 【添加后端服务器】 打开添加后端服务器弹框。选择 绑定类型 为 云服务器 后,选择需要绑定的主服务器和备服务器,单击 【确定】 完成绑定。
3.登录主服务器,执行vim /etc/keepalived/keepalived.conf,修改相关配置。将代码中的 <...> 替换为实际 IP 地址、网卡名称和认证信息。
1 global_defs {
2 notification_email {
3 acassen@firewall.loc
4 failover@firewall.loc
5 sysadmin@firewall.loc
6 }
7 notification_email_from Alexandre.Cassen@firewall.loc
8 smtp_server 192.168.200.1
9 smtp_connect_timeout 30
10 router_id <路由标识>
11 vrrp_skip_check_adv_addr
12 vrrp_garp_interval 0
13 vrrp_gna_interval 0
14 }
15
16 vrrp_script checkService
17 {
18 script "/etc/keepalived/check_status.sh"
19 interval 1
20 }
21
22 vrrp_instance VI_1 {
23 state MASTER
24 interface <网卡名称>
25 virtual_router_id <VRID>
26 nopreempt
27 priority <主服务器优先级>
28 advert_int 1
29 authentication {
30 auth_type PASS
31 auth_pass <认证密码>
32 }
33 unicast_src_ip <主服务器内网IP>
34 unicast_peer {
35 <备服务器1内网IP>
36 <备服务器2内网IP>
37 }
38 virtual_ipaddress {
39 <HAVIP内网IP>
40 }
41 notify_master "/etc/keepalived/notify_action.sh MASTER"
42 notify_backup "/etc/keepalived/notify_action.sh BACKUP"
43 notify_fault "/etc/keepalived/notify_action.sh FAULT"
44 notify_stop "/etc/keepalived/notify_action.sh STOP"
45 garp_master_refresh 5
46 garp_master_delay 1
47 track_interface {
48 <网卡名称>
49 }
50 track_script {
51 checkService
52 }
53 }
4.登录备服务器 1,执行 vim /etc/keepalived/keepalived.conf,修改相关配置。
1 global_defs {
2 notification_email {
3 acassen@firewall.loc
4 failover@firewall.loc
5 sysadmin@firewall.loc
6 }
7 notification_email_from Alexandre.Cassen@firewall.loc
8 smtp_server 192.168.200.1
9 smtp_connect_timeout 30
10 router_id <路由标识>
11 vrrp_skip_check_adv_addr
12 vrrp_garp_interval 0
13 vrrp_gna_interval 0
14 }
15
16 vrrp_script checkService
17 {
18 script "/etc/keepalived/check_status.sh"
19 interval 1
20 }
21
22 vrrp_instance VI_1 {
23 state BACKUP
24 interface <网卡名称>
25 virtual_router_id <VRID>
26 nopreempt
27 priority <备服务器1优先级>
28 advert_int 1
29 authentication {
30 auth_type PASS
31 auth_pass <认证密码>
32 }
33 unicast_src_ip <备服务器1内网IP>
34 unicast_peer {
35 <主服务器内网IP>
36 <备服务器2内网IP>
37 }
38 virtual_ipaddress {
39 <HAVIP内网IP>
40 }
41 notify_master "/etc/keepalived/notify_action.sh MASTER"
42 notify_backup "/etc/keepalived/notify_action.sh BACKUP"
43 notify_fault "/etc/keepalived/notify_action.sh FAULT"
44 notify_stop "/etc/keepalived/notify_action.sh STOP"
45 garp_master_refresh 5
46 garp_master_delay 1
47 track_interface {
48 <网卡名称>
49 }
50 track_script {
51 checkService
52 }
53 }
5.登录备服务器2,执行vim /etc/keepalived/keepalived.conf,修改相关配置。
1 global_defs {
2 notification_email {
3 acassen@firewall.loc
4 failover@firewall.loc
5 sysadmin@firewall.loc
6 }
7 notification_email_from Alexandre.Cassen@firewall.loc
8 smtp_server 192.168.200.1
9 smtp_connect_timeout 30
10 router_id <路由标识>
11 vrrp_skip_check_adv_addr
12 vrrp_garp_interval 0
13 vrrp_gna_interval 0
14 }
15
16 vrrp_script checkService
17 {
18 script "/etc/keepalived/check_status.sh"
19 interval 1
20 }
21
22 vrrp_instance VI_1 {
23 state BACKUP
24 interface <网卡名称>
25 virtual_router_id <VRID>
26 nopreempt
27 priority <备服务器2优先级>
28 advert_int 1
29 authentication {
30 auth_type PASS
31 auth_pass <认证密码>
32 }
33 unicast_src_ip <备服务器2内网IP>
34 unicast_peer {
35 <主服务器内网IP>
36 <备服务器1内网IP>
37 }
38 virtual_ipaddress {
39 <HAVIP内网IP>
40 }
41 notify_master "/etc/keepalived/notify_action.sh MASTER"
42 notify_backup "/etc/keepalived/notify_action.sh BACKUP"
43 notify_fault "/etc/keepalived/notify_action.sh FAULT"
44 notify_stop "/etc/keepalived/notify_action.sh STOP"
45 garp_master_refresh 5
46 garp_master_delay 1
47 track_interface {
48 <网卡名称>
49 }
50 track_script {
51 checkService
52 }
53 }
6.检查业务 check_status.sh。您可以根据业务编写正确的脚本内容,调整脚本路径,并同步更新 keepalived.conf 配置。以下脚本通过 /tmp/down文件是否存在来判断服务是否正常:如果不存在 /tmp/down 文件,认为服务正常并返回 0;否则返回 1,通知 Keepalived 切主。 将脚本保存为 /etc/keepalived/check_status.sh,并确保权限为 755 及以上。

/etc/keepalived/check_status.sh
1 #!/bin/sh
2 if [ ! -f /tmp/down ]
3 then
4 exit 0
5 fi
6 exit 1
7.重启 keepalived 进程使配置生效。
1 systemctl start keepalived
2 systemctl restart keepalived
3 systemctl status keepalived
8.登录 高可用虚拟IP 控制台,选择 产品服务->私有网络 VPC->高可用虚拟 IP 路径,在目标 HAVIP 的 绑定服务器 页签中确认主服务器和备服务器已完成绑定。
步骤四:HAVIP绑定EIP(可选)
1.登录 高可用虚拟IP 控制台,选择 产品服务->私有网络 VPC->高可用虚拟 IP 路径,进入高可用虚拟 IP 列表页。在目标 HAVIP 的操作中单击 【绑定 EIP】。

2.在 弹性公网 IP 绑定 弹框中选择待绑定的 EIP,并单击 【确定】。如果没有可用的 EIP,可单击 【创建公网 IP】 申请新的 EIP 后再绑定。
步骤五:测试验证
- 根据 Keepalived 配置文件启动后,确认主服务器状态为 MASTER,备服务器状态为 BACKUP。
- 在模拟客户端持续 ping HAVIP。
1 ping <HAVIP内网IP> -i 0.001
- 在主服务器的 /tmp 目录下创建 down 文件,通过 Keepalived 周期任务检查 /tmp/down 是否存在来模拟业务异常,从而触发 HAVIP 切换。
- 在备服务器上抓取 HAVIP 的免费 ARP 包和 ICMP 包,确认备服务器切换为主服务器后发送免费 ARP,并开始接收客户端访问 HAVIP 的 ICMP 报文。
- 完成主备切换后,登录 高可用虚拟IP 控制台,确认 HAVIP 的绑定主机已切换为接管服务的云服务器。
相关产品
评价此篇文章
