在 pfSense 上配置 HAProxy 负载均衡
HAProxy 是一款开源软件,可以为 TCP/HTTP 服务提供高可用性和负载均衡,以速度快、性能高效著称。本文将介绍如何在 pfSense 上配置 HAProxy 实现负载均衡。HAProxy 分为前端和后端两部分:前端监听对外开放端口,面向外部用户;后端是内部的服务器池。创建一个前端并将其指向后端,后端可以连接多台服务器。
以下是本文使用的拓扑架构:三台 Web 服务器连接到 pfSense 的 LAN 侧,均运行 Apache 服务并通过 80 端口提供网页。我们将配置 HAProxy 以轮询方式在三台服务器之间进行负载均衡。

在局域网内可以正常访问 Web 服务。下面我们将通过 HAProxy 让外部用户通过防火墙公网 IP 平衡访问内部的三台服务器。
安装 HAProxy
进入 系统 > 插件管理,点击 可用插件 选项卡,搜索 HAProxy,单击右侧的 安装 按钮进行安装。

安装完成后的提示如下:

配置 HTTP 服务负载均衡
现在为运行在 80 端口的三台 Web 服务器配置 HAProxy 负载均衡。导航到 服务 > HAProxy 打开配置界面。

配置后端服务器
首先配置后端服务器,后端是包含 Web1、Web2 和 Web3 的虚拟服务器池。点击 后端 选项卡,再点击 添加 按钮。

填写以下必填字段:
- 名称:填入一个便于识别的名称,例如
http_web_server_pool1
在 服务器列表 下方,点击 添加 逐一添加服务器。

为第一台服务器填写:
- 模式:Active
- 名称:web1
- 地址:10.1.1.11
- 端口:80
点击左下角的 添加 按钮添加下一台服务器。

为第二台服务器填写:
- 模式:Active
- 名称:web2
- 地址:10.1.1.12
- 端口:80
继续添加第三台服务器:

- 模式:Active
- 名称:web3
- IP:10.1.1.13
- 端口:80
配置负载均衡选项
在服务器列表正下方可以配置负载均衡算法。这里选用 轮询(Round Robin),这是一种标准的负载均衡方式,会将请求平均分配到后端服务器。

其他如 ACL、动作、超时/重试等设置可使用默认值,本文只介绍基本配置。
服务器健康检查
勾选 启用健康检查 来监控后端服务器的健康状态。健康检查方法选择 HTTP,因为它将使用 HTTP 协议检查 Web 服务器。启用日志,当任一 Web 服务器故障时会自动生成日志。HTTP 检查方式选择 GET。

其余选项保持默认,点击 保存 并应用更改。此时后端服务器尚未关联到前端,会显示为灰色。

配置前端
点击 前端 选项卡,再点击 添加 按钮。

编辑 HAProxy 前端,填写以下内容:
- 名称:
http_access - 描述:提供对 web1、2 和 3 的 http 访问
- 状态:Active
- 外部地址:保持默认
- 监听地址:WAN 地址 (IPv4)
- 端口:80
以上设置将使前端对外网 IP 的 80 端口进行监听。

将后端附加到前端
向下滚动,在 默认后端 / 访问控制列表和操作 区域,从下拉列表中选择刚才创建的后端服务器 http_web_server_pool1,点击 保存。

HAProxy 设置
配置完前端后,进入 HAProxy 的 设置 选项卡。在此启用 HAProxy 进程:勾选 启用 HAProxy,并将 每个进程的最大连接数 设为 1000。

其他保持默认,向下滚动到 统计 部分,可以配置内部统计端口,例如填入 2000,可根据需要指定任意未占用端口。

点击 保存 应用设置。
配置防火墙规则
为了让外部用户能够访问防火墙公网 IP 的 80 端口,需要添加一条 WAN 规则。进入 防火墙 > 规则策略 > WAN,点击 添加。
规则参数如下:
- 动作:PASS
- 接口:WAN
- 地址系列:IPv4
- 协议:TCP
- 源:ANY
- 目标:ANY
- 目标端口:HTTP (80)

测试 HAProxy 负载均衡
配置完成后,可以先查看统计信息,所有后端 Web 服务器应显示为绿色。在 HAProxy 配置界面,右键单击 Stats FS,选择在新的标签页中打开。

新打开的统计页面类似于下方所示,可以直观看到后端服务器的健康状态。

访问网页
在外部浏览器访问防火墙公网 IP 地址,第一个请求会被轮询到 web1,第二个到 web2,第三个到 web3,以此类推。

检查统计数据
同样可以通过 HAProxy 统计界面验证请求分发情况,可以看到请求被依次派发到 web1 和 web2。

多次刷新后,统计信息中会记录每个后端服务器接收到的请求数。

至此,已经完成了在 pfSense 上使用 HAProxy 实现基本 Web 负载均衡的配置。
觉得内容不错?我要