# 高级功能

> 运行时管理、操作系统能力、Lua 脚本编写和实时跟踪

---

LLMS 索引： [llms.txt](/zh/llms.txt)

---

<!-- Generated by scripts/generate-haproxy-docs.py from pinned upstream text. -->

## 3.5.1. 高级功能：系统管理 {#section-3-5-1}

HAProxy 旨在在常规生产环境中保持极高的稳定性与安全性。它以单个可执行文件的形式提供，无需任何安装过程。多个版本可轻松共存，因此建议按重要性顺序逐步升级实例，而非一次性全部迁移。配置文件易于版本化。配置检查可在离线状态下完成，无需重启可能失败的服务。在配置检查过程中，可检测到多种高级错误（例如规则相互隐藏，或无法生效的会话粘性），并提供详细的警告信息与配置建议以修复问题。配置文件的向后兼容性极为持久，版本 1.5 仍完全支持 13 年前为版本 1.1 编写的配置，而 1.6 仅移除了几乎不再使用、已过时的关键词，这些功能可通过其他方式实现。配置与软件升级机制平滑且无中断，允许旧版与新版进程在系统中共存，各自处理自身的连接。启动时会报告系统状态、构建选项及库兼容性信息。

某些高级功能允许应用管理员平稳地停止服务器，检测其是否已无活动，随后将其下线、停止、升级，并确保在升级期间不接收任何流量，然后通过正常路径再次测试，且无需向公众开放，所有这些操作均无需修改 HAProxy 配置。这确保了即使在复杂的生产环境中，也可在营业时间内完成操作，同时所有技术资源均保持可用。

该进程尽可能节省资源，使用内存池以减少分配时间并限制内存碎片，一旦数据包内容被发送即立即释放负载缓冲区，并支持强制执行严格的内存限制：当超过限制时，连接必须等待缓冲区可用，而非继续分配更多内存。该机制有助于在特定严格环境中保障内存使用。

提供命令行接口（CLI），可通过 UNIX 套接字或 TCP 套接字执行多项操作并获取故障排查信息。通过该套接字执行的所有操作均无需修改配置，因此主要用于临时变更。使用此接口可实现以下功能：更改服务器的地址、权重和状态，查询统计信息并清空计数器，转储并清空会话粘性表（可按键条件选择性操作），转储并终止客户端与服务器端的连接，转储捕获的错误并提供错误原因与位置的详细分析，转储、添加和删除 ACL 与映射中的条目，动态更新 TLS 共享密钥，对任意前端实时应用连接限制与速率限制（在共享托管环境中尤为有用），禁用特定前端以释放监听端口（在禁止白天操作但需修复时尤为有用）。支持动态更新证书及其配置，也支持启用并查阅流量处理每一步的追踪信息。

在 SNMP 为强制要求的环境中，至少存在两个代理程序。其中一个随 HAProxy 源码提供，依赖 Net-SNMP Perl 模块；另一个随商业版包提供，无需 Perl 支持。两者在功能覆盖范围上大致相当。

通常建议在部署 HAProxy 的机器上安装以下 4 个工具：

- socat（用于连接 CLI，尽管某些 netcat 的分支在一定程度上也可实现此功能）；

- halog：来自最新 HAProxy 版本的日志分析工具，可极快速解析原生 TCP 和 HTTP 日志（每秒 1 至 2 GB），并提取有用信息与统计信息，例如按 URL 统计的请求数、按源地址统计的请求数、按响应时间或错误率排序的 URL、终止码等。该工具专为部署在生产服务器上以协助排查实时问题而设计，因此必须始终就绪，随时可用。

- tcpdump：强烈建议使用该工具捕获网络流量，以便排查日志中显示的问题。当应用程序与 HAProxy 的分析结果出现分歧时，网络流量捕获是唯一能判断双方对错的方法。此外，借助 tcpdump 也常能发现网络栈和虚拟化平台中的缺陷。

- strace：它是 tcpdump 的配套工具。它将报告 HAProxy 实际接收到的内容，有助于区分操作系统层面的问题与 HAProxy 自身的问题。当怀疑 HAProxy 存在缺陷时，通常会要求提供 strace 输出。

## 3.5.2. 高级功能：系统特定能力 {#section-3-5-2}

根据 HAProxy 所部署的操作系统不同，某些额外功能可能可用或必需。尽管 HAProxy 支持多种平台，但其主要开发环境为 Linux，因此部分功能仅在该平台可用。

透明绑定和连接功能、将连接绑定到特定网络接口的支持，以及将多个进程绑定到同一 IP 地址和端口的能力，仅在 Linux 和 BSD 系统上可用，尽管只有 Linux 会在内核层面实现对可用进程间入站请求的负载均衡。

在 Linux 上，还提供了一系列额外功能和优化，包括对网络命名空间（也称为“容器”）的支持，使 HAProxy 可作为所有容器之间的网关；能够在客户端连接上设置 MSS、Netfilter 标记和 IP TOS 字段；支持在监听端启用 TCP FastOpen；通过 TCP 用户超时机制，当内核检测到客户端已断开但尚未达到配置超时时间时，可快速终止连接；支持 TCP 拼接，使内核能够直接在连接两端之间转发数据，避免多次内存拷贝；可启用“defer-accept”绑定选项，仅在内核缓冲区中有数据时才通知连接建立；还可通过“tcp-smart-connect”选项，使用 ACK 确认连接的同时发送请求（有时称为“捎带”）。在 Linux 上，HAProxy 还特别注重对 TCP 延迟 ACK 的处理，以尽可能减少网络中的数据包数量。

某些系统存在时钟不可靠的问题，其时间会在过去和未来之间来回跳变。过去，一些 NUMA 系统曾出现此类情况，由于多个处理器未能看到完全一致的当前时间，导致时间不同步；近期，虚拟化环境中此类问题更为常见，因为虚拟时钟与真实时钟无关联，从而引发巨大的时间跳跃（曾观察到长达 30 秒的跳变）。这在一般情况下对超时机制的执行造成了诸多困扰。由于此类系统存在缺陷，HAProxy 维护了自身的单调时钟，该时钟基于系统时钟，但会测量并补偿时钟漂移。这确保了即使系统时钟极不准确，定时器仍能保持合理精度，超时机制依然有效。请注意，该问题影响运行在这些系统上的所有软件，并非 HAProxy 特有。常见表现包括误报超时或应用程序冻结。因此，若在系统上检测到此类行为，必须予以修复，无论 HAProxy 是否已自行防护。

在 Linux 上，新启动的进程可与前一个进程通信，以复用其监听文件描述符，从而确保在进程替换过程中监听套接字始终不中断。

## 3.5.3. 高级功能：脚本编写 {#section-3-5-3}

HAProxy 可以编译支持嵌入式 Lua 语言，这为请求或响应的复杂处理、路由决策、统计信息处理等场景打开了广阔的可能性。借助 Lua，甚至可以建立与其它服务器的并行连接以交换信息。这种方式使得开发认证系统等复杂功能成为可能（尽管实现较为复杂）。有关如何使用 Lua 的更多信息，请参阅文件 "doc/lua-api/index.rst" 中的文档。

## 3.5.4. 高级功能：跟踪 {#section-3-5-4}

任何时刻，系统管理员均可通过 CLI 连接并启用各个内部子系统的追踪功能。默认情况下提供多种详细程度，实际可获取的追踪信息量介于每请求一行至每请求五百行之间。系统支持过滤器，以及自动捕获开启/关闭/暂停机制，因此完全可以等待特定事件发生，并对其进行详细观察。该功能对诊断由故障服务器或客户端引发的协议违规行为，或拒绝服务攻击极为便利。
