当前位置: 首页 > ds >正文

@HAProxy 介绍部署使用

文章目录

      • **1. HAProxy 简介**
        • **1.1 什么是 HAProxy?**
        • **1.2 核心特性**
        • **1.3 关键术语**
      • **2. 安装 HAProxy**
        • **2.1 在 Ubuntu/Debian 上安装**
        • **2.2 在 CentOS/RHEL/Rocky Linux/AlmaLinux 上安装**
      • **3. 配置与使用**
        • **3.1 核心配置文件结构**
        • **3.2 基础配置示例:HTTP负载均衡**
        • **3.3 进阶配置:基于URL路径的分流(ACL)**
        • **3.4 配置SSL终止**
      • **4. 日常操作与监控**
        • **4.1 服务管理**
        • **4.2 日志**
        • **4.3 使用Socket进行运行时管理**
      • **5. 故障排除**

1. HAProxy 简介

1.1 什么是 HAProxy?

HAProxy(High Availability Proxy)是一个开源、高性能的TCP/HTTP 负载均衡器代理服务器。它被广泛用于将网络流量分发到多个后端服务器(如Web服务器、数据库服务器),以此提高应用程序的可用性、可靠性和可扩展性。

1.2 核心特性
  • 高性能: 采用事件驱动、单线程模型(非阻塞I/O),即使在极高并发连接下也能保持极低的资源消耗。
  • TCP & HTTP 支持: 既可以在第4层(传输层,TCP)进行负载均衡,也可以在第7层(应用层,HTTP)进行更智能的流量分发。
  • 健康检查: 持续监控后端服务器的健康状况,自动从集群中移除故障服务器,并在其恢复后重新加入。
  • 会话保持: 支持多种方式(如Cookie插入)将特定客户端的请求始终转发到同一台后端服务器。
  • SSL/TLS 终止: 可以在HAProxy处解密HTTPS流量,然后将明文的HTTP请求转发给后端服务器,减轻后端服务器的计算压力。
  • 精细的日志记录: 提供详细的日志,便于监控和故障排除。
  • 动态配置: 支持运行时通过Socket API动态更新部分配置,而无需重启服务,避免连接中断。
  • 高可用性: 常与Keepalived等工具结合,实现HAProxy自身的主动-被动高可用集群。
1.3 关键术语
  • 前端(Frontend): 定义HAProxy监听的IP地址、端口以及如何处理传入的客户端请求。
  • 后端(Backend): 定义一组接收流量的后端服务器(称为“Server”或“Backend Server”)以及使用的负载均衡算法。
  • 监听器(Listener): 前端中具体的IP:端口绑定。
  • 服务器(Server): 后端集群中一个具体的、提供服务的实例(如 192.168.1.10:8080)。
  • 负载均衡算法: 决定如何选择后端服务器的规则,常见的有 roundrobin(轮询)、leastconn(最小连接数)、source(源IP哈希)等。
  • ACL(访问控制列表): 用于对请求进行条件测试(如匹配URL路径、主机头),从而做出更智能的转发决策。
  • Stick Table: 用于跟踪和存储客户端会话信息,实现会话保持。

2. 安装 HAProxy

以下是在主流Linux发行版上的安装步骤。

2.1 在 Ubuntu/Debian 上安装
# 1. 更新软件包列表
sudo apt update# 2. 安装 HAProxy
sudo apt install -y haproxy# 3. 验证安装版本
haproxy -v# 4. 启动服务并设置为开机自启 (安装后默认未启动)
sudo systemctl enable --now haproxy# 5. 检查服务状态
sudo systemctl status haproxy
2.2 在 CentOS/RHEL/Rocky Linux/AlmaLinux 上安装

对于较老的CentOS/RHEL 7/8,默认仓库的版本可能较旧。建议启用EPEL仓库。

# CentOS/RHEL 7/8/9 (启用EPEL)
sudo yum install -y epel-release# 或者 Rocky Linux/AlmaLinux 9
sudo dnf install -y epel-release# 安装 HAProxy
sudo yum install -y haproxy  # CentOS 7/8
# 或者
sudo dnf install -y haproxy  # CentOS/Rocky/AlmaLinux 9# 启动并启用服务
sudo systemctl enable --now haproxy
sudo systemctl status haproxy

注意: 如果需要最新版本,通常需要从官方源码编译或使用第三方仓库(如Software Collections)。


3. 配置与使用

3.1 核心配置文件结构

HAProxy的主配置文件通常是 /etc/haproxy/haproxy.cfg。它主要分为以下几个部分:

  • global: 全局设置,如进程、安全、性能调优参数。
  • defaults: 为后续的 frontendbackend 块提供默认值。
  • frontend: 定义如何接收客户端请求。
  • backend: 定义将请求转发到哪些服务器。
  • listen:frontendbackend 功能结合在一起的简化配置块。
3.2 基础配置示例:HTTP负载均衡

让我们配置一个最简单的HTTP负载均衡器,将80端口的流量轮询分发到两个Web服务器。

  1. 备份原始配置

    sudo cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.backup
    
  2. 编辑配置文件

    sudo vim /etc/haproxy/haproxy.cfg
    
  3. 清空文件并写入以下内容

    globallog /dev/log local0   # 使用本地syslog的local0设备记录日志maxconn 4000          # 每个进程的最大连接数user haproxy          # 运行进程的用户和组group haproxydaemon                # 以守护进程方式运行defaultsmode http             # 默认模式为HTTPlog global            # 继承global中的日志设置option httplog        # 记录详细的HTTP日志option dontlognull    # 不记录空连接timeout connect 5000ms # 连接后端服务器的超时时间timeout client 50000ms # 客户端不活动超时时间timeout server 50000ms # 后端服务器响应超时时间# 定义一个前端,监听80端口
    frontend http_frontbind *:80             # 监听所有IPv4地址的80端口default_backend http_back # 默认将所有流量转发到‘http_back’后端# 定义后端服务器组
    backend http_backbalance roundrobin    # 使用轮询算法server web1 192.168.1.10:80 check  # 'check'启用健康检查server web2 192.168.1.11:80 check# 可选:状态监控页面
    listen statsbind *:8404           # 监听8404端口用于状态页面stats uri /haproxy?stats  # 访问状态页面的URIstats realm Haproxy\ Statistics  # 认证域提示stats auth admin:password  # 认证用户名和密码stats admin if TRUE    # 如果通过认证,允许管理操作(如禁用服务器)
    
  4. 语法检查
    HAProxy非常严格,配置错误会导致启动失败。务必在重启前检查语法。

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

    输出 Configuration file is valid 表示成功。

  5. 重启HAProxy服务

    sudo systemctl restart haproxy
    
  6. 验证

    • 访问你的服务器IP(http://your-haproxy-ip),流量会被分发到web1和web2。
    • 访问状态页面(http://your-haproxy-ip:8404/haproxy?stats),用配置的用户名(admin)和密码(password)登录,查看后端服务器状态和统计信息。
3.3 进阶配置:基于URL路径的分流(ACL)

假设你想将 /api 的请求发送到一组API服务器,其他请求发送到Web服务器。

frontend http_front 部分中添加ACL规则:

frontend http_frontbind *:80# 定义一个ACL规则,匹配路径以/api开头acl is_api path_beg /api# 如果匹配is_api规则,使用api_back后端use_backend api_back if is_api# 默认使用web_back后端default_backend web_backbackend web_backbalance roundrobinserver web1 192.168.1.10:80 checkserver web2 192.168.1.11:80 checkbackend api_backbalance roundrobinserver api1 192.168.1.20:8080 checkserver api2 192.168.1.21:8080 check

重载配置(不中断服务)

sudo systemctl reload haproxy
# 或者
sudo haproxy -f /etc/haproxy/haproxy.cfg -sf $(pidof haproxy)
3.4 配置SSL终止
  1. 将你的SSL证书(PEM格式)合并。 通常需要将证书文件、中间证书和私钥合并到一个.pem文件中。

    cat yourdomain.crt yourdomain.key > /etc/haproxy/yourdomain.pem
    chmod 600 /etc/haproxy/yourdomain.pem
    chown haproxy:haproxy /etc/haproxy/yourdomain.pem
    
  2. 修改前端配置

    frontend https_frontbind *:443 ssl crt /etc/haproxy/yourdomain.pem# 可选:强制重定向HTTP到HTTPS# redirect scheme https code 301 if !{ ssl_fc }default_backend http_back
    

4. 日常操作与监控

4.1 服务管理
# 启动
sudo systemctl start haproxy
# 停止
sudo systemctl stop haproxy
# 重启 (会中断连接)
sudo systemctl restart haproxy
# 重载配置 (平滑重启,不中断连接)
sudo systemctl reload haproxy
# 查看状态
sudo systemctl status haproxy
4.2 日志

HAProxy日志默认不输出到文件。需要配置rsyslog。

  1. 编辑 /etc/rsyslog.d/99-haproxy.conf
    local0.* /var/log/haproxy.log
    
  2. 重启rsyslog和haproxy
    sudo systemctl restart rsyslog
    sudo systemctl restart haproxy
    
  3. 查看日志
    tail -f /var/log/haproxy.log
    
4.3 使用Socket进行运行时管理

配置文件中的 stats socket 选项启用了强大的运行时管理功能。

  1. global 部分添加:

    global...stats socket /run/haproxy/admin.sock mode 660 level admin
    
  2. 使用 socathaproxy-apt 工具管理

    # 查看帮助
    echo "help" | sudo socat stdio /run/haproxy/admin.sock
    # 禁用后端服务器
    echo "disable server http_back/web1" | sudo socat stdio /run/haproxy/admin.sock
    # 启用后端服务器
    echo "enable server http_back/web1" | sudo socat stdio /run/haproxy/admin.sock
    # 显示状态信息
    echo "show info" | sudo socat stdio /run/haproxy/admin.sock
    echo "show stat" | sudo socat stdio /run/haproxy/admin.sock
    

5. 故障排除

  1. 配置文件语法检查: sudo haproxy -f /etc/haproxy/haproxy.cfg -c
  2. 查看系统日志: journalctl -u haproxy
  3. 查看HAProxy日志: tail -f /var/log/haproxy.log
  4. 检查端口监听状态: ss -tlnp | grep haproxy
  5. 检查防火墙规则: sudo iptables -L -nsudo firewall-cmd --list-all

HAProxy是一个强大而灵活的工具,是构建现代、高可用性应用架构的基石。本SOP提供了从入门到进阶的指导。要掌握HAProxy,请务必阅读其官方文档(https://www.haproxy.org/),其中包含了所有配置指令的详细说明和更多高级用例。

安全提示: 在生产环境中,请务必使用强密码保护状态页面,并谨慎管理Socket接口的访问权限。

http://www.xdnf.cn/news/19134.html

相关文章:

  • Copilot、Cursor、Trae、ChatGPT 的“四件套”场景选择表
  • 5G相对于4G网络的优化对比
  • 卷积神经网络实现mnist手写数字集识别案例
  • 三、计算机网络与分布式系统(上)
  • Linux DNS配置文件resolv.conf简介
  • Centos 8 磁盘扩展xfs文件系统 (LVM)
  • 云计算学习100天-第32天
  • 1-ATSAMV71Q21
  • 大模型后训练——Online-RL实践
  • DistributedLock 实现.Net分布式锁
  • 智能养花谁更优?WebIDE PLOY技术与装置的结合及实践价值 —— 精准养护的赋能路径
  • 北斗导航 | 工信部印发《关于优化业务准入促进卫星通信产业发展的指导意见》解析
  • MySQL数据库精研之旅第十三期:吃透用户与权限管理,筑牢数据库安全第一道防线
  • 【MySQL数据库】存储引擎 学习记录
  • 高光谱成像在食品质量和安全检测中的应用
  • 【C++游记】子承父业——乃继承也
  • [p2p-Magnet] 队列与处理器 | DHT路由表
  • iOS文件管理在uni-app开发中的实战应用,多工具解决
  • hive on tez如果是2个大表union会写几次临时文件到hdfs目录,数据量如何计算
  • 密码管理中
  • 水果目标检测[2]:ALAD-YOLO:一种轻便、精确的苹果叶病检测仪
  • 学习Python中Selenium模块的基本用法(7:元素操作-1)
  • 【golang长途旅行第33站】常量------补充知识点
  • golang 12 package 和 module
  • Docker 入门指南:从基础概念到常见命令及高级工具详解
  • C++:知识点小结
  • vue2 watch 的使用
  • 从 WPF 到 Avalonia 的迁移系列实战篇1:依赖属性的异同点与迁移技巧
  • LangChain4j入门一:LangChain4j简介及核心概念
  • Python计算点云的欧式、马氏、最近邻、平均、倒角距离(Chamfer Distance)