pfSense book之Web服务器负载平衡配置示例

本文涉及的产品
云防火墙,500元 1000GB
简介:

  在pfsense的网关和服务器中有两种类型的负载平衡功能。网关负载平衡可以通过多个WAN连接分发Internet绑定的流量。服务器负载平衡管理传入流量,因此它利用多个内部服务器进行负载分配和冗余,服务器负载平衡允许流量在多个内部服务器之间分配,它最常用于Web服务器和SMTP服务器。下面我们就以实例来介绍服务器负载平衡的设置。

  下面介绍如何通过pfsense2.32配置Web服务器的负载平衡。

网络环境

../_images/diagrams-serverlb-example.png

服务器负载平衡示例网络环境

上图为示例网络环境。它由单个防火墙组成,使用其WAN IP地址池,DMZ段上有两个Web服务器。

配置地址池

  • 导航到 Services > Load Balancer

  • 单击Pools 标签

  • 单击 fa-plus 添加一个新的地址池

  • 如图所示,使用以下设置:

    Name: WebServers
    Mode: Load Balance
    Description: Web server Pool
    Port: 80
    Retry: 5
    Pool Members: 添加两个Web服务器 (10.6.0.11 和10.6.0.12
  • 单击Save

../_images/serverlb-pool.png

地址池配置

配置虚拟服务器

../_images/serverlb-virtualserver.png

虚拟服务器配置

  • 单击Virtual Servers标签

  • 单击 fa-plus 添加一个新的虚拟服务器

  • 如图所示,使用以下设置:

    Name: WebVirtualServer
    Description: Web Server
    IP Address: The firewall’s WAN IP address, 198.51.100.6
    Port: 80
    Virtual Server Pool:

    WebServers
    Fall Back Pool: None
  • 单击 Submit(提交)

  • 单击 Apply Changes(应用更改)



注意

在这个示例中,如果两个池服务器都关闭,则虚拟服务器无法访问。 如果没有配置虚拟服务器,防火墙将会起作用。 如果防火墙上的某些应用绑定到80端口,那么客户端就会直达绑定了这个端口的应用。 这可能包括通过端口80访问内置Web GUI,因此应该在System > Advanced Admin Access 选项卡上禁用或采用其他端口。


配置防火墙规则

防火墙规则必须配置为允许访问池中的服务器。 规则必须允许流量使用内部IP地址和端口,并且对虚拟服务器配置中使用的外部IP地址和端口不需要任何规则限制。

创建一个包含池中所有服务器的别名,因此可以使用单个防火墙规则进行访问。

  • 导航到Firewall > Aliases

  • 单击 fa-plus 添加 一个别名

  • 如图所示,使用以下设置:

    Name: www_servers
    Type: Hosts
    Hosts: 两个Web服务器IP地址: 10.6.0.11 和 10.6.0.12
  • 单击 Save

  • 单击 Apply Changes(应用更改)


图中的“Name”显示了用于此示例配置的别名,其中包含两个Web服务器。

../_images/serverlb-alias.png

Web 服务器别名设置

下一步,用这个别名创建一个防火墙规则: 导航到Firewall > Rules ,切换到外部连接访问的接口(例如WAN), 单击 fa-level-up 在顶部添加一条新规则,设置如下:

Interface: WAN
Protocol: TCP
Source: any
Destination Type:

Single Host or Alias
Destination Address:

www_servers
Destination Port Range:

HTTP
Description: Allow to Web Server
  • 单击 Save

  • 单击 Apply Changes(应用更改)

下图为Web服务器设置的防火墙规则,未显示的选项保留默认值。

../_images/serverlb-fwruleedit.png

为Web服务器添加防火墙规则

列表中显示的规则。

../_images/serverlb-fwrule.png

Web 服务器防火墙规则

查看负载平衡状态

现在已经配置了负载平衡器,要查看其状态,请浏览到Status > Load Balancer,然后单击“Virtual Servers”选项卡。此页面显示整个服务器的状态,通常列为“Active(联机”或“Down(脱机”。

Pools选项卡显示池的每个成员的单独状态(如图池状态)。如果服务器处于联机状态,服务器的行为绿色,如果服务器处于脱机状态,则为红色。

此外,池中的每个服务器都有一个复选框。 已检查的服务器在池中处于活动状态,池中已禁用未选中的服务器,与在池编辑页面上启用和禁用列表之间移动的服务器相同。 要禁用服务器:取消选中它,然后单击保存。 

../_images/serverlb-status-online.png

池状态

如果在其中一个服务器上停止了Web服务器服务,或者如果使用ICMP监视器将服务器完全从网络中删除,则状态将更新为“脱机”,并将服务器从池中删除。

验证负载平衡

为了验证负载平衡, curl 是确保Web浏览器缓存和持久连接不影响测试结果的最佳选择。curl 可以从 curl 官方网站下载,有各种操作系统的版本。 要使用它,只需运行以下命令:

curl http://mysite

在该命令中,将198.51.100.6替换为站点的IP地址或主机名。 这必须从网络外部进行测试(例如,从WAN上的远程网络或客户端)。 例如,在外网用curl进行测试:

# curl http://198.51.100.6
 This is server www2 - 10.6.0.12
# curl http://198.51.100.6
 This is server www1 - 10.6.0.11

测试负载平衡时,设置每个服务器返回指定其主机名、IP地址或两者,因此明确哪个服务器响应该请求。 如果未启用粘性连接,则不同的服务器将响应每个请求。

故障排除


不能连接到负载平衡

不能连接到负载平衡器通常是使用测试方法不当造成的,这通常是HTTP特有的。 Web浏览器通常会保持与Web服务器建立的连接,并且点击刷新会重新使用现有的连接。 单个连接将永远不会更改为另一个平衡服务器。 另一个常见的问题是网络浏览器缓存,浏览器只从缓存读取数据,未真正再次刷新页面。 最好使用诸如curl等命令行工具来测试,因为它确保测试不受Web浏览器测试中固有问题的影响。curl没有缓存,并在每次运行时都会重新建立与服务器的新连接。 

如果启用了粘性连接,请确保从多个源IP地址执行测试。来自单个源IP地址的测试将转到单个服务器,除非连接尝试之间经过了较长的时间。

关闭服务器未标记为脱机

如果服务器关闭但没有标记为脱机,那是因为负载平衡守护程序执行的监视信号仍然处于启动状态。 如果使用TCP监视器,TCP端口必须仍然接受连接。 该端口上的服务可以以多种方式断开,仍然可以回复TCP连接。 对于ICMP监视器,这个问题更加严重,因为服务器可以挂起或故障,没有任何监听服务,仍然可以回答ping。

在线服务器未标记为在线

如果服务器在线,但没有标记为在线,那是因为从负载平衡守护程序监视器的角度来看,它不是联机的。 服务器必须在所使用的TCP端口上回答或响应来自最靠近服务器的防火墙接口IP地址的ping。

例如,如果服务器在LAN上,则服务器必须应答从防火墙的LAN IP地址发起的请求。 要验证ICMP监视器,请导航到到Diagnostics > Ping,并使用服务器所在的接口Ping服务器IP地址。

对于TCP监视器,请使用“Diagnostics > Test Port”,并选择防火墙的LAN接口作为源,将Web服务器的IP地址和端口作为目标。

另一种测试方法是使用防火墙的shell提示符,使用console或ssh菜单选项8nc命令

# nc -vz 10.6.0.12 80nc: 
connect to 10.6.0.12 port 80 (tcp) failed: Operation timed out

上面是一个失败的例子。

下面是一个成功连接的例子:

# nc -vz 10.6.0.12 80
Connection to 10.6.0.12 80 port [tcp/http] succeeded!

如果连接失败,请在Web服务器上进一步进行故障排除。

与池服务器在同一子网中的客户端无法访问虚拟服务器

与池服务器在同一子网中的客户端系统将无法使用此负载平衡方法正确连接。 relayd将连接转发到具有客户端源地址的Web服务器。然后,服务器将尝试直接响应客户端。如果服务器具有到客户端的直接路径,例如通过同一子网中的本地连接的NIC,它将不会正常通过防火墙回流,客户端将从服务器的本地IP地址收到回复,而不会在relayd中收到该IP地址。然后,由于从客户端的角度看,服务器IP地址不正确,连接被丢弃为无效。


这样做的一个方法是使用手动出站NAT和制定手动出站NAT规则,以便从LAN子网到达Web服务器的内部接口(LAN)的流量转换为LAN的接口地址。这样,流量似乎源于防火墙,服务器将响应到防火墙,然后防火墙将该流量中继到客户端使用的预期地址。原始的客户端源IP地址在该过程中丢失,最佳的解决方案是将服务器移动到不同的网段。










本文转自 鐵血男兒 51CTO博客,原文链接:http://blog.51cto.com/fxn2025/1967084,如需转载请自行联系原作者
目录
相关文章
|
1月前
|
弹性计算 ice
阿里云4核8G云服务器配置价格:热门ECS实例及CPU处理器型号说明
阿里云2025年4核8G服务器配置价格汇总,涵盖经济型e实例、计算型c9i等热门ECS实例,CPU含Intel Xeon及AMD EPYC系列,月费159元起,年付低至1578元,按小时计费0.45元起,实际购买享折扣优惠。
406 1
|
1月前
|
弹性计算 定位技术 数据中心
阿里云服务器配置选择方法:付费类型、地域及CPU内存配置全解析
阿里云服务器怎么选?2025最新指南:就近选择地域,降低延迟;长期使用选包年包月,短期灵活选按量付费;企业选2核4G5M仅199元/年,个人选2核2G3M低至99元/年,高性价比爆款推荐,轻松上云。
161 11
|
1月前
|
存储 弹性计算 监控
阿里云渠道商:如何挑选阿里云服务器配置?
本文详解通用型、计算型、内存型等实例适用场景,结合性能评估与成本优化策略,助力用户按需选择。以日均1万访问企业网站为例,2核4G+3M带宽月费约200元,性价比高。合理配置更省钱。
|
1月前
|
存储 弹性计算 网络协议
超详细的阿里云服务器购买流程,ECS自定义购买配置教程
本文详细图解阿里云ECS服务器自定义购买全流程,涵盖付费模式、地域选择、网络配置、实例规格、镜像、存储、安全组及登录设置等核心步骤,助您轻松掌握专业级云服务器搭建方法。
|
1月前
|
弹性计算
阿里云ECS云服务器8核16G配置收费价格,多种ECS实例CPU及费用清单
阿里云8核16G云服务器价格因实例类型而异。计算型c9i约743元/月,一年6450元(7折);通用算力型u1仅673元/月,一年4225元(5.1折)。实际价格享时长折扣,详情见ECS官网。
|
1月前
|
弹性计算 运维 安全
阿里云轻量应用服务器与云服务器ECS啥区别?新手帮助教程
阿里云轻量应用服务器适合个人开发者搭建博客、测试环境等低流量场景,操作简单、成本低;ECS适用于企业级高负载业务,功能强大、灵活可扩展。二者在性能、网络、镜像及运维管理上差异显著,用户应根据实际需求选择。
221 10
|
1月前
|
运维 安全 Ubuntu
阿里云渠道商:服务器操作系统怎么选?
阿里云提供丰富操作系统镜像,涵盖Windows与主流Linux发行版。选型需综合技术兼容性、运维成本、安全稳定等因素。推荐Alibaba Cloud Linux、Ubuntu等用于Web与容器场景,Windows Server支撑.NET应用。建议优先选用LTS版本并进行测试验证,通过标准化镜像管理提升部署效率与一致性。
|
1月前
|
弹性计算 ice
阿里云4核8g服务器多少钱一年?1个月和1小时价格,省钱购买方法分享
阿里云4核8G服务器价格因实例类型而异,经济型e实例约159元/月,计算型c9i约371元/月,按小时计费最低0.45元。实际购买享折扣,1年最高可省至1578元,附主流ECS实例及CPU型号参考。
350 8