当前位置:首页 > 行业动态 > 正文

ha负载均衡用法

安装HA负载均衡软件,配置主备或集群模式,设置健康检查,自动分发请求至健康节点,保障服务高可用

HAProxy负载均衡用法详解

HAProxy基础

HAProxy是一款开源的高性能TCP/HTTP负载均衡器,支持四层(TCP)和七层(HTTP/HTTPS)流量分发,其核心优势在于高并发处理能力、丰富的负载均衡策略和健康检查机制,广泛应用于Web服务、数据库中间层等场景。

1 核心特性

特性 说明
协议支持 TCP、HTTP、HTTPS、FTP、SSL等
负载均衡算法 轮询/最小连接/源IP哈希/URI哈希等
健康检查 HTTP状态码检测/TCP端口检测/自定义脚本检测
会话保持 基于Cookie、源IP或自定义标识符实现会话粘性
高可用性 支持主备模式、多节点集群部署
性能指标 单进程架构,可处理数万并发连接(视硬件配置)

环境准备与安装

1 操作系统兼容性

系统类型 安装方式
Debian/Ubuntu apt-get install haproxy
CentOS/RHEL yum install haproxy
Docker容器 docker run -d --name haproxy haproxy:latest

2 配置文件结构

HAProxy主配置文件为/etc/haproxy/haproxy.cfg,包含以下核心段:

global      # 全局参数(日志、进程优先级等)
defaults    # 默认设置(超时时间、日志格式等)
frontend    # 接入端配置(监听端口/协议)
backend     # 后端服务器池配置

基础配置实战

1 简单轮询负载均衡

配置示例:

frontend http_front
    bind :80               # 监听80端口
    mode http               # 七层HTTP模式
    default_backend http_back # 指定后端服务器组
backend http_back
    mode http
    balance roundrobin      # 轮询算法
    server web1 192.168.1.10:80 check # 后端服务器1
    server web2 192.168.1.11:80 check # 后端服务器2

2 最小连接数算法

修改balance参数为leastconn,适合长连接场景(如数据库连接池):

backend db_pool
    balance leastconn
    server db1 10.0.0.1:3306 check
    server db2 10.0.0.2:3306 check

3 会话保持配置

通过cookie插入实现会话粘性:

ha负载均衡用法  第1张

backend app_servers
    cookie SERVERID insert indirect nocache
    server app1 172.16.0.1:8080 check
    server app2 172.16.0.2:8080 check

高级功能配置

1 SSL终端配置

frontend段配置证书卸载:

frontend https_front
    bind :443 ssl crt /etc/ssl/cert.pem
    mode http
    default_backend http_back

2 健康检查配置

支持多种检测方式:
| 类型 | 配置示例 |
|——————-|—————————————–|
| HTTP状态码检测 | server web1 192.168.1.10:80 check |
| TCP端口检测 | server db1 10.0.0.1:3306 check |
| 自定义脚本检测 | check script "/path/to/script.sh" |

3 动态服务器列表

通过AIX(Auto-Increment X)语法批量定义服务器:

backend web_farm
    mode http
    balance uri
    server web[1-5] 192.168.1.1[1-5]:80 check inter 2s rise 2 fall 3

高可用性部署方案

1 VRRP+HAProxy集群

配合keepalived实现VIP漂移:

# keepalived配置示例
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.1.254/24 dev eth0
    }
}

2 多数据中心部署

通过map文件实现地域分流:

# maps/geo.map内容:
192.168.1.0--192.168.255.255 region A
10.0.0.0--10.255.255.255 region B
frontend geo_front
    map /etc/haproxy/maps/geo.map region
    use_backend datacenter_A if { var(txn_region) -m found }
    default_backend datacenter_B

监控与日志管理

1 实时状态查看

通过haproxy -f /etc/haproxy/haproxy.cfg -c命令输出统计信息,关键指标包括:

  • pxName: 后端服务器名称
  • svcurr: 当前活跃连接数
  • svlimit: 最大连接限制
  • stot: 总处理请求数
  • bin: 输入流量(字节)
  • bout: 输出流量(字节)

2 日志格式配置

global段配置日志模板:

global
    log /var/log/haproxy.log local0 err
    log-format %ci:%cp [%tr] %ft %b %D %Tq %Tw %Ss:%Sp %STq %Qr %Hi %hs:%hp %Pq %Pe %Resp(%rcode) %[un] %[fc] %[sc] %[ac] %[buf] %[ct] %[rt] %[pt] %[cl] %[sl] %[fl] %[fd] %[tr] %[sd] %[pr] %[hdr(Host)] %[hdr(User-Agent)] %[hdr(Referrer)] %[req.clen] %[res.clen] %[req.time] %[res.time] %[sip] %[sport] %[rip] %[rport] %[sid] %[pid] %[uid] %[gid] %[tq] %[tw] %[tc] %[td] %[sc] %[sd] %[pc] %[pd] %[lc] %[ld] %[mc] %[md] %[rc] %[rd] %[fc] %[fd] %[ec] %[ed] %[dc] %[dd] %[ic] %[id] %[xff]

常见问题与优化建议

1 性能调优参数

参数 作用 建议值
maxconn 最大并发连接数 根据CPU核心数1000
timeout connect 连接超时时间 5s-10s
timeout client 客户端超时时间 50s-300s
timeout server 服务器超时时间 50s-300s
nbthread 工作线程数 CPU核心数+1
spread-checks 健康检查分散间隔 2s-5s

2 典型故障排查

现象 可能原因 解决方案
请求全部转发到单个服务器 负载均衡算法配置错误 检查balance参数是否正确
健康检查始终失败 后端服务未启动/防火墙拦截 验证端口可达性,检查防火墙规则
SSL握手失败 证书路径错误/协议不匹配 确认证书路径,检查HTTPS配置
连接数突然下降 超时时间设置过短 调大timeout相关参数

FAQs

Q1:如何排查健康检查不生效的问题?

  • 检查后端服务器实际运行状态(netstat -an查看监听端口)
  • 验证防火墙规则允许HAProxy访问后端端口
  • 查看HAProxy日志中是否有具体错误信息(如SSL证书错误)
  • 测试独立健康检查脚本的可执行性(chmod +x脚本文件)

Q2:HAProxy如何处理WebSocket长连接?

  • frontendbackend段添加option http-keep-alive
  • 禁用连接队列:option redispatch
  • 调整超时参数:timeout tunnel 3600s(WebSocket默认使用
0