HAProxy 和 Keepalived 经常被结合使用,以构建更加健壮和可靠的负载均衡及高可用性解决方案。下面是如何将它们结合起来使用的一个常见架构:
架构概述
- 前端负载均衡:使用 HAProxy 处理前端的请求负载均衡。HAProxy 可以根据不同的策略将请求分发到后端的服务器集群中。
- 高可用性:使用 Keepalived 来实现 HAProxy 的高可用性。Keepalived 可以监视 HAProxy 的运行状态,并在 HAProxy 故障时将虚拟 IP 地址转移到备用的 HAProxy 服务器上。
具体实现
1. HAProxy 配置
HAProxy 负责接收外部请求并将请求分发到内部服务器。以下是 HAProxy 的一个基本配置示例:
global
log 127.0.0.1 local0
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
retries 3
timeout connect 5000
timeout client 50000
timeout server 50000
frontend www
bind *:80
default_backend servers
backend servers
balance roundrobin
server web1 192.168.1.10:80 check
server web2 192.168.1.11:80 check
2. Keepalived 配置
Keepalived 用于确保 HAProxy 的高可用性。以下是 Keepalived 的一个基本配置示例:
global_defs {
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass abc123
}
virtual_ipaddress {
192.168.1.1
}
}
vrrp_instance VI_2 {
state BACKUP
interface eth0
virtual_router_id 51
priority 95
advert_int 1
authentication {
auth_type PASS
auth_pass abc123
}
virtual_ipaddress {
192.168.1.1
}
}
script {
script "/etc/keepalived/check_haproxy.sh"
interval 2
weight 2
}
notify_master "/etc/keepalived/master.sh"
notify_backup "/etc/keepalived/backup.sh"
在这个配置中,VI_1
是主实例,VI_2
是备用实例。如果 VI_1
出现故障,VI_2
会接管虚拟 IP 并成为新的主实例。
3. 健康检查脚本
你可能还需要编写一些脚本来检查 HAProxy 的状态,确保它在运行并且正常工作。这些脚本可以在 Keepalived 的配置中指定。
#!/bin/sh
# 检查 HAProxy 是否运行
if ! pgrep haproxy > /dev/null; then
exit -1
fi
exit 0
优点
- 高可用性:通过 Keepalived 的 VRRP 实现,确保即使 HAProxy 故障也能快速恢复服务。
- 负载均衡:HAProxy 提供了强大的负载均衡能力,可以根据不同的策略分发请求。
- 易维护:这种架构使得维护变得更加简单,因为 HAProxy 和 Keepalived 分别承担不同的职责。