使用Keepalived实现Haproxy主备切换高可用

1.案例概述
Keepalived可提供虚拟路由功能以及health-check功能,实现双机热备份高可用功能,来避免Haproxy单点故障问题,一台为主的Haproxy服务器,一台为备份Haproxy服务器,对为表现为一个虚拟IP,当主服务器出现故障时,备份服务就会接管虚拟IP,继续提供服务,因为keepalived没有配置真实服务器器所以不能做到IP漂移所以我们需要编写一个脚本让keepalived实现IP漂移并监控haproxy的状态,来实现haproxy服务器的高可用性能。

yarn主备切换 haproxy主备切换_yarn主备切换


2.案例环境

Haproxy keepalived 主:172.16.16.100

Haproxy keepalived 备:172.16.16.200

VIP :172.16.16.172

添加一台haproxy服务器作为主服务器,再添加一台haproxy服务器作副服务器配置和主haproxy服务器基本相同。主服务器配置:

先下载haproxy和keepalived源

[root@kgc3 ~]# yum install -y keepalived haproxy

(1)修改haproxy配置文件添加后台真实web服务器地址:

yarn主备切换 haproxy主备切换_centos_02

(1.1)修改haproxy的keepalived配置文件 /etc/keepalived/keepalived.conf

global_defs {
router_id LVS_HA_TEST_R1

}
global_defs {
router_id LVS_HA_TEST_R1

}
vrrp_script check_haproxy { //定义Haproxy的检测脚本路径
script “/etc/keepalived/check_haproxy.sh”
interval 2

weight 2

}
vrrp_instance VI_1 {
state MASTER //为主服务器
interface ens33
virtual_router_id 1
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress { //绑定VIP地址
172.16.16.172
}
track_script {
check_haproxy //追踪脚本状态
}
}

编写监控脚本
root@kgc3 ~]# vim /etc/keepalived/check_haproxy.sh
加入下面内容
#!/bin/bash
#HAPROXY down
A=ps -C haproxy --no-header | wc -l if [ $A -eq 0 ]
then
systemctl start haproxy
if [ ps -C haproxy --no-header | wc -l -eq 0 ]
then
killall -9 haproxy
echo “HAPROXY down” | mail -s “haproxy” 1665547553@qq.com
sleep 3600
fi

fi
添加执行权限:
[root@kgc3 ~]# chmod +x /etc/keepalived/check_haproxy.sh

重启haproxy主服务器上的keepalived服务和haproxy服务:
[root@kgc3 ~]# systemctl restart keepalived
[root@kgc3 ~]# systemctl restart haproxy
主服务器配置完成

(2)配置备份机haproxy服务器也可以直接从主服务器上拷贝过来修改一下即可

副服务器配置:

也需要先下载haproxy和keepalived源

[root@kgc3 ~]# yum install -y keepalived haproxy

(2.1)配置备份机的haproxy配置文件:

yarn主备切换 haproxy主备切换_linux_03

然后重主服务器上拷贝配置文件过去:
[root@kgc3 ~]#
scp /etc/keepalived/keepalived.conf root@172.16.16.200:/etc/keepalived/keepalived.conf
root@172.16.16.200’s password:
输入密码即可:

备份haproxy服务器上的keepalived配置与主haproxy服务器类似,只需要将配置文件Keepalived.conf中的 MASTER改为BACKUP状态,priority值修改小即可,

配置如下:

yarn主备切换 haproxy主备切换_yarn主备切换_04

[root@kgcc keepalived]# vim /etc/keepalived/keepalived.conf

global_defs {
router_id LVS_HA_TEST_R1

}
vrrp_script check_haproxy {
script “/etc/keepalived/check_haproxy.sh”
interval 2

weight 2

}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 1
priority 80
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
172.16.16.172
}
track_script {
check_haproxy
}

添加备份haproxy服务器的检测脚本如下:
[root@kgcc keepalived]# vim /etc/keepalived/check_haproxy.sh
#!/bin/bash
#HAPROXY down
A=ps -C haproxy --no-header | wc -l if [ $A -eq 0 ]
then
systemctl start haproxy
if [ ps -C haproxy --no-header | wc -l -eq 0 ]
then
killall -9 haproxy
echo “HAPROXY down” | mail -s “haproxy” 1665547553@qq.com
sleep 3600
fi

fi

添加执行权限:

[root@kgcc ~]# chmod +x /etc/keepalived/check_haproxy.sh

重启haproxy主服务器上的keepalived服务和haproxy服务:

[root@kgcc ~]# systemctl restart keepalived

[root@kgcc ~]# systemctl restart haproxy

(1)浏览器验证,如果浏览网页是遇到这样的问题:

yarn主备切换 haproxy主备切换_centos_05

需要去修改主副haproxy的配置文件即可如下:

yarn主备切换 haproxy主备切换_linux_06

然后再访问:

yarn主备切换 haproxy主备切换_centos_07

刷新一下:

yarn主备切换 haproxy主备切换_centos_08

说明负载均衡配置成功。

下面验证主备切换高可用:

先查看主haproxy服务器上的VIP地址:

yarn主备切换 haproxy主备切换_linux_09

因为我们编写的脚本是应用自愈能力的所有我们去改下配置文件的名字验证:

yarn主备切换 haproxy主备切换_nginx_10

可以看到监控脚本生效了,再去查看主haproxy服务的VIP地址

yarn主备切换 haproxy主备切换_centos_11

再去查看副haproxy上的VIP地址:

yarn主备切换 haproxy主备切换_centos_12

可以看到已经切换成功了。

再去把主haproxy的服务器启动看是否能抢占回来。

yarn主备切换 haproxy主备切换_centos_13