@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.pswp.cn/bicheng/94985.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/94985.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Two-Twer模型做歌曲智能推荐与规则算法对比的优缺点分析

基于规则与机器学习驱动的音乐推荐:核心差异分析1.推荐精度2. 个性化能力3. 模型适应性(潜在特征关联发现)4. 可扩展性与复杂性成本5. 冷启动/数据稀疏阶段表现6. 听感匹配与主观反馈1.推荐精度 规则推荐: 依赖预设的 if-then 逻…

【完整源码+数据集+部署教程】停车位状态检测系统源码和数据集:改进yolo11-DCNV2-Dynamic

背景意义 随着城市化进程的加快,城市交通拥堵问题日益严重,停车难成为了许多城市居民面临的普遍问题。有效的停车管理不仅可以提高城市交通的流动性,还能减少因寻找停车位而造成的时间浪费和环境污染。因此,开发一个高效的停车位状…

《Password Guessing Using Random Forest》论文解读

论文填补了传统统计方法(如 PCFG、Markov)与深度学习方法(如 LSTM、GAN)之间的研究空白,提出基于随机森林的口令猜测框架 RFGuess,覆盖三种核心猜测场景,为口令安全研究提供了全新技术路线。一、…

项目一系列-第9章 集成AI千帆大模型

第9章 集成AI千帆大模型 学习目标 能够说清楚健康评估模块在项目中的作用能够掌握千帆大模型的开通和对接能够掌握健康评估模块中的prompt提示词编写能够自主完成健康评估模块的接口开发 分析设计 需求说明 健康评估是指老人办理入住前需上传体检报告,由AI自动…

vben admin5组件文档(豆包版)---VbenTree

VbenTree 用法说明 VbenTree 是 Vben5 中基于 radix-vue 实现的树形组件,支持单选、多选、展开/折叠、权限控制等功能。以下是其核心用法说明: 1. 基础引入 import { VbenTree } from vben-core/shadcn-ui;2. 核心属性(Props)属性…

postman常用快捷键

作为一名IT程序猿,不懂一些工具的快捷方式,应该会被鄙视的吧。收集了一些Postman的快捷方式,大家一起动手操作~ 1小时postman接口测试从入门到精通教程简单操作 操作mac系统windows系统 打开新标签 ⌘TCtrl T关闭标签⌘WCtrl W强制关闭标签…

【物联网】什么是 DHT11(数字温湿度传感器)?

正面照片(蓝色传感器朝上,针脚朝下) 丝印标注非常清晰: 左边 → S 👉 信号 (DATA) 中间 → 👉 VCC (电源,3.3V 或 5V) 右边 → - 👉 GND (地) ✅ 正确接法(Arduino Nano…

光谱相机在雾霾监测中有何优势?

光谱相机在雾霾监测中的优势主要体现在多维度数据采集和环境适应性方面,结合最新技术进展分析如下:一、核心优势‌穿透性监测能力‌ 短波红外(SWIR)波段可穿透雾霾颗粒,结合可见光成像实现雾霾浓度与能见度的同步监测&…

【c++】超好玩游戏

#include <iostream> #include <vector> #include <conio.h> #include <windows.h> #include <time.h>using namespace std;// 游戏常量 const int WIDTH 40; const int HEIGHT 20; const int PADDLE_WIDTH 5;// 方向枚举 enum Direction { S…

GitHub 热榜项目 - 日榜(2025-08-27)

GitHub 热榜项目 - 日榜(2025-08-27) 生成于&#xff1a;2025-08-27 统计摘要 共发现热门项目&#xff1a;15 个 榜单类型&#xff1a;日榜 本期热点趋势总结 本期GitHub热榜呈现出三大技术趋势&#xff1a;1. AI生产力工具持续升温&#xff1a;系统提示词泄露库、DeepCode…

基于Springboot + vue3实现的学校学报出版发行管理系统

项目描述本系统包含管理员和用户两个角色。管理员角色&#xff1a;用户管理&#xff1a;管理系统中所有用户的信息&#xff0c;包括添加、删除和修改用户。稿件分类管理&#xff1a;管理稿件分类信息&#xff0c;包括新增、查看、修改和删除稿件分类。新闻资讯管理&#xff1a;…

【Keil5教程及技巧】耗时一周精心整理万字全网最全Keil5(MDK-ARM)功能详细介绍【建议收藏-细细品尝】

&#x1f48c; 所属专栏&#xff1a;【单片机开发软件技巧】 &#x1f600; 作  者&#xff1a; 于晓超 &#x1f680; 个人简介&#xff1a;嵌入式工程师&#xff0c;专注嵌入式领域基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f496; 欢迎大家&#xff1…

国家育儿补贴政策遭利用,黑产组织借机窃取敏感数据

组织概况与作案手法近期网络安全领域出现了一个高度组织化的犯罪集团UTG-Q-1000&#xff0c;该组织通过利用中国国家育儿补贴政策实施大规模金融诈骗和数据窃取活动。这个结构严密的犯罪网络下设多个专业部门&#xff0c;包括财务组、新闻与色情组、设计与制造组以及黑市交易组…

Python Imaging Library (PIL) 全面指南:PIL高级图像处理-分割与颜色空间转换

高级图像处理&#xff1a;PIL中的图像分割与颜色空间转换 学习目标 本课程将深入探讨PIL&#xff08;Python Imaging Library&#xff09;中的一些高级功能&#xff0c;包括图像分割和颜色空间转换。通过本课程的学习&#xff0c;学员将能够掌握如何使用PIL进行更复杂的图像处理…

图解 OAuth,为什么这样设计?

OAuth 于 2007 年首次推出。它最初由 Twitter 创建&#xff0c;因为 Twitter 希望能够允许第三方应用代表用户发布推文。想象一下&#xff0c;如果今天设计类似的应用&#xff0c;你会怎么做&#xff1f;一种方法是直接要求用户输入用户名和密码。因此&#xff0c;你创建一个非…

WeakAuras Lua Script ICC (BarneyICC) Simplified Chinese [Mini]

WeakAuras Lua Script ICC &#xff08;BarneyICC&#xff09; Simplified Chinese [Mini] ICC 迷你版本会打了只需要团队框体高亮提示即可&#xff0c;因为有DBM&#xff0c;就不需要那么多了 !WA:2!S3xc4XrXzI6wkSjzcVSyb4aoKWGaC04ijMdPrsoit0OdRXwxmsYgmWoNTup4rZ0UNr2sKL…

mcp学习

mcp学习 预算&#xff1a;5块(半顿拼好饭呜呜呜) 出问题试着开启或者关闭代理。 文章目录mcp学习1. 基本原理2. 环境配置1. cherryStudiodeepseekpython2. Clinedeepseek3. 常用mcp服务1. mcp-server-fetch2. mcp-playwright3. baidu-map4. filesystem5. mcp-mysql-server参考…

Rust:所有权

Rust&#xff1a;所有权拷贝 & 移动堆栈拷贝移动克隆所有权变量的初始权限指针的双重权限权限的动态变化引用赋值重新借用函数调用时的权限移动拷贝借用不可变借用可变借用复合类型的权限结构体元组数组传统语言的内存管理要么依赖程序员手动管理&#xff08;C/C&#xff0…

Elasticsearch数据迁移快照方案初探(二):快照创建与多节点存储问题解决

快照仓库创建成功 经过前面的配置修改&#xff0c;我们成功创建了快照仓库&#xff1a; curl -X PUT "https://[ES_HOST]:9200/_snapshot/backup_repo" \-H "Content-Type: application/json" \-u "[USERNAME]:[PASSWORD]" \-k \-d {"type&…

DeepSeek大模型风靡云平台,百度智能云、阿里云、腾讯云等多个平台宣布上线DeepSeek模型

近日&#xff0c;百度智能云、华为云、阿里云、腾讯云、360数字安全、云轴科技等多个平台纷纷宣布上线DeepSeek大模型&#xff0c;这一消息无疑为AI开发者和企业用户带来了全新的机遇和选择。本文将探讨DeepSeek大模型上线的背景、意义以及未来的发展趋势。 首先&#xff0c;我…