软件负载均衡通过在多台后端服务器之间分发流量,能够有效避免单台服务器过载,提升整体服务的稳定性和处理能力,HAProxy是Linux环境下常用的高性能负载均衡解决方案,支持多种协议和灵活的调度策略。

环境准备
首先准备至少三台Linux服务器,一台作为HAProxy负载均衡节点,另外两台作为后端业务服务器,所有服务器建议关闭防火墙或者开放对应端口,确保节点之间网络互通。本文示例使用的系统为CentOS 7,其他Linux发行版操作逻辑类似,命令可能略有差异。
安装HAProxy
在负载均衡节点上执行安装命令,CentOS系统可以直接通过yum包管理器安装:
# 安装HAProxy yum install -y haproxy # 验证安装版本 haproxy -v
核心配置说明
HAProxy的默认配置文件路径为/etc/haproxy/haproxy.cfg,配置文件主要分为全局配置段和代理配置段,以下是常用配置项的说明:
| 配置段 | 核心配置项 | 作用说明 |
|---|---|---|
| global | log, maxconn, user, group | 定义全局日志、最大连接数、运行用户等基础参数 |
| defaults | mode, timeout, retries | 定义默认的运行模式、超时时间、重试次数等通用规则 |
| frontend | bind, default_backend | 定义前端监听地址和端口,指定默认转发的后端集群 |
| backend | balance, server | 定义后端服务器集群,指定负载均衡算法和后端节点信息 |
完整配置示例
以下是一个HTTP层负载均衡的完整配置示例,将80端口的流量分发到两台后端Web服务器:
global
# 全局日志配置,输出到本地syslog
log 127.0.0.1 local2
# 最大连接数
maxconn 4000
# 以haproxy用户运行
user haproxy
group haproxy
# 后台运行
daemon
defaults
# 默认运行模式为http
mode http
# 日志格式
log global
# 连接超时时间
timeout connect 5000ms
# 客户端超时时间
timeout client 50000ms
# 服务器超时时间
timeout server 50000ms
# 前端配置,监听80端口
frontend http_front
bind *:80
# 统计页面路径
stats uri /haproxy?stats
# 默认转发到后端http_back集群
default_backend http_back
# 后端配置
backend http_back
# 负载均衡算法,roundrobin为轮询
balance roundrobin
# 后端服务器配置,check表示开启健康检查
server web1 192.168.0.10:80 check weight 1
server web2 192.168.0.11:80 check weight 1
启动与验证
配置完成后,先检查配置文件语法是否正确:
# 检查配置文件语法 haproxy -c -f /etc/haproxy/haproxy.cfg
语法检查通过后启动HAProxy服务并设置开机自启:
# 启动HAProxy systemctl start haproxy # 设置开机自启 systemctl enable haproxy # 查看服务状态 systemctl status haproxy
验证负载均衡是否生效,可以多次访问负载均衡节点的80端口,观察请求是否被轮询分发到两台后端服务器,也可以通过配置的统计页面http://负载均衡节点IP/haproxy?stats查看后端服务器的健康状态和请求分发情况。
常见负载均衡算法
- roundrobin:轮询算法,按顺序将请求依次分发到每台后端服务器,适合服务器性能一致的场景
- leastconn:最少连接算法,优先将请求分发到当前连接数最少的服务器,适合长连接场景
- source:源地址哈希算法,根据客户端IP计算哈希值,同一IP的请求会固定转发到同一台后端服务器,适合需要会话保持的场景
注意事项
生产环境中建议开启HAProxy的日志功能,方便排查问题;后端服务器健康检查的参数需要根据业务实际情况调整,避免误判;如果业务流量较大,需要调整全局和默认段的最大连接数和超时参数,避免性能瓶颈。