HAProxy 简介
HAProxy 是一款高性能的负载均衡器和代理服务器,支持 TCP 和 HTTP 应用。广泛用于高可用性集群,能够有效分发流量到多个后端服务器,确保服务的稳定性和可扩展性。
HAProxy 核心功能
- 负载均衡:支持轮询(round-robin)、最少连接(leastconn)、源 IP 哈希(source)等多种调度算法。
- 健康检查:自动检测后端服务器状态,剔除故障节点。
- SSL/TLS 终止:支持 HTTPS 流量解密和加密。
- 高可用性:可结合 Keepalived 实现 VIP 漂移,避免单点故障。
HAProxy 安装与配置
在 Ubuntu/Debian 系统安装 HAProxy:
sudo apt update
sudo apt install haproxy
配置文件位于 /etc/haproxy/haproxy.cfg
,典型配置示例:
global
log /dev/log local0
maxconn 4000
user haproxy
group haproxy
daemon
defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend http-in
bind *:80
default_backend servers
backend servers
balance roundrobin
server server1 192.168.1.10:80 check
server server2 192.168.1.11:80 check
健康检查配置
通过 check
参数启用健康检查,支持主动(HTTP 请求)和被动(TCP 连接)模式:
backend web_servers
option httpchk GET /health
server web1 192.168.1.10:80 check inter 5s rise 2 fall 3
日志与监控
启用日志需在 global
部分配置 log
指令,并配置系统日志服务(如 rsyslog):
global
log 127.0.0.1 local0 info
HAProxy 高可用方案
结合 Keepalived 实现 VIP 漂移:
- 安装 Keepalived:
sudo apt install keepalived
- 配置 Keepalived(
/etc/keepalived/keepalived.conf
):
vrrp_script chk_haproxy {
script "pidof haproxy"
interval 2
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
192.168.1.100/24
}
track_script {
chk_haproxy
}
}
HAProxy 基本配置结构
HAProxy 的配置文件通常分为几个主要部分:全局设置(global)、默认设置(defaults)、前端(frontend)和后端(backend)。以下是基本配置的组成部分:
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
maxconn 4000
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
frontend http-in
bind *:80
default_backend servers
backend servers
balance roundrobin
server server1 192.168.1.10:80 check
server server2 192.168.1.11:80 check
全局配置(global)
全局配置部分定义了 HAProxy 进程的全局参数,通常包括日志、用户权限和性能调优等。
log
:定义日志输出位置和级别。chroot
:将 HAProxy 进程限制在指定目录,增强安全性。stats socket
:启用统计信息套接字,用于管理。user
和group
:指定运行 HAProxy 的用户和组。daemon
:以守护进程模式运行。maxconn
:设置最大连接数。
默认配置(defaults)
默认配置部分定义了适用于所有 frontend 和 backend 的默认参数。
mode
:设置代理模式(http、tcp)。option httplog
:启用 HTTP 日志记录。timeout
:定义连接、客户端和服务器的超时时间。errorfile
:指定错误响应文件路径。
前端配置(frontend)
前端配置定义了 HAProxy 如何接收客户端请求。
bind
:指定监听的 IP 和端口。default_backend
:设置默认的后端服务器组。- 其他常用选项:
acl
:定义访问控制规则。use_backend
:根据条件选择后端服务器组。
后端配置(backend)
后端配置定义了请求如何转发到后端服务器。
balance
:设置负载均衡算法(如roundrobin
、leastconn
)。server
:定义后端服务器地址和端口,check
表示启用健康检查。- 其他常用选项:
cookie
:启用会话持久性。http-check
:自定义健康检查方式。
负载均衡算法
HAProxy 支持多种负载均衡算法,常见的有:
roundrobin
:轮询(默认)。leastconn
:最少连接数优先。source
:基于源 IP 哈希。uri
:基于 URI 哈希。
健康检查
HAProxy 支持主动健康检查,确保后端服务器的可用性:
backend servers
option httpchk GET /health
server server1 192.168.1.10:80 check inter 2000 rise 2 fall 3
httpchk
:指定健康检查的 HTTP 请求路径。inter
:检查间隔(毫秒)。rise
:成功次数标记服务器为健康。fall
:失败次数标记服务器为不健康。
统计页面
启用统计页面以监控 HAProxy 状态:
listen stats
bind *:8404
stats enable
stats uri /stats
stats refresh 10s
stats admin if TRUE
bind
:指定统计页面的监听端口。stats uri
:设置访问路径。stats admin
:允许通过页面管理服务器状态。