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
,典型配置示例:
globallog /dev/log local0maxconn 4000user haproxygroup haproxydaemondefaultsmode httptimeout connect 5000mstimeout client 50000mstimeout server 50000msfrontend http-inbind *:80default_backend serversbackend serversbalance roundrobinserver server1 192.168.1.10:80 checkserver server2 192.168.1.11:80 check
健康检查配置
通过 check
参数启用健康检查,支持主动(HTTP 请求)和被动(TCP 连接)模式:
backend web_serversoption httpchk GET /healthserver web1 192.168.1.10:80 check inter 5s rise 2 fall 3
日志与监控
启用日志需在 global
部分配置 log
指令,并配置系统日志服务(如 rsyslog):
globallog 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 MASTERinterface eth0virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1234}virtual_ipaddress {192.168.1.100/24}track_script {chk_haproxy}
}
HAProxy 基本配置结构
HAProxy 的配置文件通常分为几个主要部分:全局设置(global)、默认设置(defaults)、前端(frontend)和后端(backend)。以下是基本配置的组成部分:
globallog /dev/log local0log /dev/log local1 noticechroot /var/lib/haproxystats socket /run/haproxy/admin.sock mode 660 level adminstats timeout 30suser haproxygroup haproxydaemonmaxconn 4000defaultslog globalmode httpoption httplogoption dontlognulltimeout connect 5000timeout client 50000timeout server 50000errorfile 400 /etc/haproxy/errors/400.httperrorfile 403 /etc/haproxy/errors/403.httperrorfile 408 /etc/haproxy/errors/408.httperrorfile 500 /etc/haproxy/errors/500.httperrorfile 502 /etc/haproxy/errors/502.httperrorfile 503 /etc/haproxy/errors/503.httperrorfile 504 /etc/haproxy/errors/504.httpfrontend http-inbind *:80default_backend serversbackend serversbalance roundrobinserver server1 192.168.1.10:80 checkserver 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 serversoption httpchk GET /healthserver server1 192.168.1.10:80 check inter 2000 rise 2 fall 3
httpchk
:指定健康检查的 HTTP 请求路径。inter
:检查间隔(毫秒)。rise
:成功次数标记服务器为健康。fall
:失败次数标记服务器为不健康。
统计页面
启用统计页面以监控 HAProxy 状态:
listen statsbind *:8404stats enablestats uri /statsstats refresh 10sstats admin if TRUE
bind
:指定统计页面的监听端口。stats uri
:设置访问路径。stats admin
:允许通过页面管理服务器状态。