HAProxy:高性能的负载均衡与代理解决方案

HAProxy 是一款能够提供高可用性、负载均衡及基于 TCP 和 HTTP 应用的代理工具,以其免费、快速、可靠的特性成为许多大规模并发网站的首选。尤其适用于需要会话保持或七层处理的场景。HAProxy 的运行模式简单易用,能够轻松集成到现有架构中,同时有效保护 Web 服务器不直接暴露在公网中。

官方网站:HAProxy 官方网站

HAProxy 的主要特性

HAProxy 具备许多强大的功能,使其在负载均衡领域成为硬件级别解决方案的有力替代品,如 F5 SLB(服务器负载均衡)。以下是 HAProxy 的主要特性:

  1. 高可靠性与稳定性:HAProxy 的可靠性和稳定性足以媲美 F5 负载均衡设备。
  2. 高并发支持:支持 40000-50000 个并发连接,最大处理能力可达 10Gbit/s,每秒可处理的请求数为 20000。
  3. 多种负载均衡算法:支持 8 种负载均衡算法,并支持会话保持,极大地提高了负载均衡的灵活性。
  4. 虚拟主机支持:支持虚拟主机功能,使得 Web 负载均衡更加灵活。
  5. 独特功能:支持连接拒绝、全透明代理等功能,增强了 HAProxy 的适应性。
  6. 强大的访问控制列表(ACL)支持:用于灵活的访问控制。
  7. 高效的数据结构:采用弹性二叉树结构,查找速度不会随着数据量的增加而下降。
  8. 连接保持功能:支持客户端 keepalive,减少多次握手带来的资源浪费。
  9. TCP 加速与零复制:支持 TCP 加速和零复制功能,类似于 mmap 机制。
  10. 支持多协议与功能:支持 RDP 协议、响应池、基于源的粘性(类似于 Nginx 的 ip_hash),并提供详细的统计数据接口和健康检测。
  11. 日志分析与管理:提供命令行管理接口及日志分析器,便于对流量与状态进行实时监控。

HAProxy 的负载均衡策略

HAProxy 提供了多种负载均衡策略,能够满足不同场景下的需求。常见的策略包括:

  1. roundrobin:简单的轮询算法。
  2. static-rr:基于权重的轮询。
  3. leastconn:最少连接者优先处理。
  4. source:基于请求源 IP 进行负载均衡。
  5. uri:基于请求的 URI,适用于 CDN 负载均衡。
  6. url_param:基于 URL 参数进行负载均衡。
  7. hdr(name):基于 HTTP 请求头来锁定每一次请求。
  8. rdp-cookie(name):基于 cookie 进行负载均衡。

LVS、Nginx 和 HAProxy 的区别

  1. LVS:基于 Linux 内核实现的 4 层负载均衡,适合高性能和抗负载场景,但无法实现基于 URL 和目录的转发。
  2. Nginx:不仅是 Web 服务器,还是 4 层和 7 层负载均衡的解决方案。支持正则表达式,但对健康检查的支持有限,不支持会话保持。
  3. HAProxy:功能强大,支持多种负载均衡策略、会话保持及健康检查,虽然性能略低于 LVS,但在灵活性和功能上远超 LVS。

HAProxy 搭建 Web 集群

我们可以使用 HAProxy 搭建一个简单的 Web 服务器群集,以下是具体步骤:

环境准备

  • HAProxy 服务器:192.168.10.23
  • Nginx 服务器1:192.168.10.16
  • Nginx 服务器2:192.168.10.17
  • 客户端:192.168.10.2

1. 关闭防火墙并安装 HAProxy

systemctl stop firewalld
setenforce 0

# 上传并解压 HAProxy 安装包
tar zxvf haproxy-1.5.19.tar.gz -C /opt/

# 编译安装
yum install -y pcre-devel bzip2-devel gcc gcc-c++ make
cd /opt/haproxy-1.5.19/
make TARGET=linux2628 ARCH=x86_64
make install

2. 配置 HAProxy

首先创建配置目录并复制示例配置文件:

mkdir /etc/haproxy
cp examples/haproxy.cfg /etc/haproxy/

然后编辑 haproxy.cfg 文件,进行如下修改:

global
    log /dev/log   local0 info
    log /dev/log   local0 notice
    maxconn 4096
    daemon

defaults
    log     global
    mode    http
    option  httplog
    option  dontlognull
    retries 3
    redispatch
    maxconn 2000
    timeout http-request 10s
    timeout queue 1m
    timeout connect 10s
    timeout client 1m
    timeout server 1m
    timeout http-keep-alive 10s
    timeout check 10s

listen  webcluster 0.0.0.0:80
    option httpchk GET /test.html
    balance roundrobin
    server inst1 192.168.10.16:80 check inter 2000 fall 3
    server inst2 192.168.10.17:80 check inter 2000 fall 3

3. 添加 HAProxy 系统服务并启动

cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
chmod +x /etc/init.d/haproxy
chkconfig --add haproxy
service haproxy start

4. 部署 Nginx 服务器

在两台 Nginx 服务器上安装并配置 Nginx:

yum install -y pcre-devel zlib-devel gcc gcc-c++ make
useradd -M -s /sbin/nologin nginx

tar zxvf nginx-1.12.0.tar.gz -C /opt/
cd /opt/nginx-1.12.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make && make install

# 启动 Nginx
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
nginx

在每台 Nginx 服务器的 /usr/local/nginx/html/ 目录下分别创建 test.html 文件,内容如下:

# 192.168.10.16
echo "this is kgc web" > /usr/local/nginx/html/test.html

# 192.168.10.17
echo "this is benet web" > /usr/local/nginx/html/test.html

5. 测试集群

在客户端使用浏览器访问 http://192.168.10.23/test.html,不断刷新页面即可测试负载均衡效果。

6. 配置日志

为了更好地管理日志,可以修改 rsyslog 配置文件,将 HAProxy 的日志独立定义为 haproxy.conf:

vim /etc/rsyslog.d/haproxy.conf

if ($programname == 'haproxy' and $syslogseverity-text == 'info')
then -/var/log/haproxy/haproxy-info.log
&~

if ($programname == 'haproxy' and $syslogseverity-text == 'notice')
then -/var/log/haproxy/haproxy-notice.log
&~

重启 rsyslog 并查看日志:

systemctl restart rsyslog.service
tail -f /var/log/haproxy/haproxy-info.log

通过以上步骤,HAProxy 集群即已部署完成。

结论

y-notice.log
&~


重启 rsyslog 并查看日志:

```bash
systemctl restart rsyslog.service
tail -f /var/log/haproxy/haproxy-info.log

通过以上步骤,HAProxy 集群即已部署完成。

结论

HAProxy 作为一款强大的负载均衡解决方案,凭借其多种负载均衡策略、高并发支持以及丰富的状态监测功能,成为大规模 Web 集群中的重要组成部分。通过与 Nginx 和 LVS 的配合使用,能够更好地满足不同业务场景下的性能和稳定性要求。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐