标签归档:haproxy

Debian Linux 下安装和配置HAProxy

HAProxy简介

HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全地整合进用户当前的架构中, 同时可以保护用户的web服务器不被暴露到网络上。
HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。
包括 GitHub、Bitbucket、Stack Overflow、Reddit、Tumblr、Twitter和 Tuenti在内的知名网站,及亚马逊网络服务系统都使用了HAProxy。摘自百度百科

debian 下安装 HAProxy

本次安装基于debian 12版本进行,并且HAProxy基于2.6.19版本

通过apt安装(推荐)

Bash
sudo apt install haproxy -y

通过源码编译

Bash
# 安装编译所需的依赖库
sudo apt install wget make build-essential libpcre3 libpcre3-dev libssl-dev zlib1g-dev -y

# 下载源码
sudo wget https://www.haproxy.org/download/2.6/src/haproxy-2.6.19.tar.gz

# 解压
sudo tar -zxvf haproxy-2.6.19.tar.gz

# 编译
sudo make TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 -j

// 编译参数解释
* TARGET=linux-glibc
    * 指定要编译的目标平台。
    * linux-glibc 表示目标平台是使用 GNU C 库(glibc)的 Linux 系统。不同的平台可能需要不同的目标设置。
* USE_PCRE=1
    * 启用 PCRE(Perl Compatible Regular Expressions)库的支持。
    * PCRE 用于正则表达式处理,HAProxy 使用它来支持高级模式匹配和正则表达式功能。
    * 设置为 1 表示在编译时启用此功能。
* USE_OPENSSL=1
    * 启用 OpenSSL 库的支持。
    * OpenSSL 提供了加密和 SSL/TLS 功能,HAProxy 使用它来支持 HTTPS 和其他加密通信。
    * 设置为 1 表示在编译时启用此功能。
* USE_ZLIB=1
    * 启用 Zlib 库的支持。
    * Zlib 用于压缩和解压缩数据,HAProxy 使用它来支持 HTTP 压缩(如 gzip)。
    * 设置为 1 表示在编译时启用此功能。

# 安装
sudo make install PREFIX=/usr/local/bin
// 参数解释
* PREFIX=/usr/local/bin
    * 指定安装目录。

配置HAProxy

通过apt安装的配置文件默认在 /etc/haproxy/haproxy.cfg

通过源码编译的需要手动创建配置文件

配置文件内容示例

Bash
global
    # 配置 HAProxy 使用系统日志服务
    log /var/log/logfile local0
    log /var/log/logfil local1 notice
    chroot /var/lib/haproxy # 将 HAProxy 进程的根目录更改为 /var/lib/haproxy
    #创建一个 Unix 套接字,允许使用 haproxy 管理命令。mode 660 设置文件权限,level admin 指定管理权限。
    stats socket /run/haproxy/admin.sock mode 660 level admin 
    #设置管理接口的超时时间为 120 秒
    stats timeout 120s
    user haproxy  # 设置运行 HAProxy 的用户和组。
    group haproxy  # 设置运行 HAProxy 的用户和组。
    daemon # 让 HAProxy 以后台进程方式运行。
    maxconn 4096 #设置 HAProxy 允许的最大并发连接数为 4096。

defaults
    log global # 继承 global 部分的日志设置。
    timeout connect 30s # 连接超时设置为 30秒
    timeout client 30s # 客户端超时设置 30秒
    timeout server 300s # 服务器超时设置300秒
    errorfile 400 /etc/haproxy/errors/400.http # 设置 http 400 错误模板
    errorfile 403 /etc/haproxy/errors/403.http # 设置 http 403 错误模板
    errorfile 408 /etc/haproxy/errors/408.http # 设置 http 408 错误模板
    errorfile 500 /etc/haproxy/errors/500.http # 设置 http 500 错误模板
    errorfile 502 /etc/haproxy/errors/502.http # 设置 http 502 错误模板
    errorfile 503 /etc/haproxy/errors/503.http # 设置 http 503 错误模板
    errorfile 504 /etc/haproxy/errors/504.http # 设置 http 504 错误模板

frontend http-in
    bind *:8001  # : 绑定到所有网络接口的 80 端口
    mode tcp  # 配置 HAProxy 以 HTTP 模式工作。或者https或者tcp
    use_backend servers
backend servers
    server server1 192.168.33.125:8081 maxconn 32 # 最大连接数为 32。

验证配置文件

Bash
haproxy -c -f /etc/haproxy/haproxy.cfg

输出Configuration file is valid就表示配置文件正常

启动HAProxy

通过apt安装的只需要重启一下HAProxy

Bash
sudo server haproxy restart

通过源码编译的启动,下面的haproxy要替换为你实际安装haproxy的绝对路径,在上面的编译过程中,我将haproxy的安装目录设置为了/usr/local/bin,所以下面的代码是可以正常运行的。

Bash
haproxy -f /etc/haproxy/haproxy.cfg