访问量一大单台服务器就顶不住?华为防火墙负载均衡按性能比分摊流量

对外提供服务的业务常常会走到这一步:一台服务器扛访问量越来越吃力,再加两台机器进来,问题变成流量怎么分——三台机器性能还不一样,强的闲着、弱的先满,客户访问时快时慢。这种局面不用急着上专用负载均衡设备,华为防火墙自带服务器负载均衡功能,把多台实服务器组成一个组,对外只暴露一个虚拟服务器地址,流量按各台性能加权分摊,同时用健康检测自动盯着每台机器可达性。华为官方文档有一套完整的 CLI 举例——配置服务器的负载均衡,本篇按这套示例把三台性能递减的服务器按 4:2:1 权值配起来,命令逐段给出,配置脚本一并附上方便整体核对。

本文的组网需求、配置思路与命令步骤,整理自华为官方发布的典型配置案例,参数可直接参考使用。

组网需求

企业有三台服务器 Server1、Server2 和 Server3,且这三台服务器的硬件性能顺次降低,Server1 性能是 Server2 的两倍、Server2 性能是 Server3 的两倍。通过配置负载均衡,让这三台服务器联合对外提供服务,且三台服务器承载业务的多少与服务器硬件性能的高低匹配。通过配置健康检测实时监控这三台服务器是否可达。同时对访问虚拟服务的流量进行 IPS/AV 检查,IP 地址为 1.1.1.11 的这台 PC 存在攻击行为,需要阻断其的访问。

本例中 interface1、interface2 分别代表 GE0/0/1、GE0/0/2。

翻译成白话:DeviceA 是出口防火墙,GE0/0/1(1.1.1.1/24)朝外归 untrust,GE0/0/2(192.168.1.254/24)接服务器区归 dmz;三台实服务器地址 192.168.1.1~192.168.1.3,服务端口 21;对外只发布虚拟服务器 1.1.1.10 的 2121 端口。

配置思路

  • 三台服务器的性能不同,要根据性能来负载均衡,所以负载均衡算法可以选择"weight-least-connection"。Server1 性能是 Server2 的两倍、Server2 性能是 Server3 的两倍,所以三台服务器的权值比为 4:2:1。
  • 为了监控三台服务器是否可达,需要在负载均衡设备上配置健康检查。本举例中健康检查的协议类型配置为 ICMP。
  • 客户端可能需要与服务器建立多条连接才能完成一项操作,为此需要在设备上配置会话保持,让同一个客户端的连接分配到同一台服务器上。
  • 配置安全策略。

这套方案的关键在"按权值分摊":weight-least-connection 算法同时看权值和连接数,性能强的机器权值高、多接活,性能弱的少接活;健康检查发现哪台不可达就把它摘出去;会话保持保证同一个客户端的多次连接落在同一台机器上,业务不中断。

操作步骤

第一步,配置各个接口的IP地址,并将接口加入相应的安全区域。

<HUAWEI> system-view
[HUAWEI] sysname DeviceA
[DeviceA] interface ge 0/0/1
[DeviceA-GE0/0/1] ip address 1.1.1.1 24
[DeviceA-GE0/0/1] quit
[DeviceA] interface ge 0/0/2
[DeviceA-GE0/0/2] ip address 192.168.1.254 24
[DeviceA-GE0/0/2] quit
[DeviceA] firewall zone dmz
[DeviceA-zone-dmz] add interface ge 0/0/2
[DeviceA-zone-dmz] quit
[DeviceA] firewall zone untrust 
[DeviceA-zone-untrust] add interface ge 0/0/1
[DeviceA-zone-untrust] quit

第二步,创建实服务器组,并添加实服务器。

[DeviceA] slb
[DeviceA-slb] group 0 Rserver
[DeviceA-slb-group-Rserver] metric weight-least-connection
[DeviceA-slb-group-Rserver] rserver 0 rip 192.168.1.1 port 21 status health-check weight 4 description server1
[DeviceA-slb-group-Rserver] rserver 1 rip 192.168.1.2 port 21 status health-check weight 2 description server2
[DeviceA-slb-group-Rserver] rserver 2 rip 192.168.1.3 port 21 status health-check weight 1 description server3

选择负载均衡算法"weight-least-connection",配置实服务器Server1、Server2、Server3,服务器的权重值依次为4、2、1。

第三步,配置健康检查功能。

[DeviceA-slb-group-Rserver] health-check type icmp tx-interval 5 times 3
[DeviceA-slb-group-Rserver] quit

健康检查协议类型 ICMP、发送间隔 5 秒、探测 3 次,实服务器状态都跟随探测结果变化。

第四步,配置会话保持。

[DeviceA] slb
[DeviceA-slb]session persistence 0 sourceip

第五步,配置虚拟服务器,关联实服务器组。

[DeviceA-slb] vserver 0 vs-1.1.1.10
[DeviceA-slb-vserver-vs-1.1.1.10] vserver type L4
[DeviceA-slb-vserver-vs-1.1.1.10] protocol tcp
[DeviceA-slb-vserver-vs-1.1.1.10] vip 0 1.1.1.10
[DeviceA-slb-vserver-vs-1.1.1.10] vport 2121
[DeviceA-slb-vserver-vs-1.1.1.10] group Rserver
[DeviceA-slb-vserver-vs-1.1.1.10] persistence sourceip
[DeviceA-slb-vserver-vs-1.1.1.10] quit

第六步,开启SLB流量的安全策略功能开关。

[DeviceA-slb] security-policy enable 
[DeviceA-slb] quit

第七步,配置安全策略。基于虚服务对流量进行安全管控,并在安全策略中引用入侵防御和反病毒配置文件。

[DeviceA] security-policy
[DeviceA-policy-security] rule name policy_sec0
[DeviceA-policy-security-rule-policy_sec0] source-address 1.1.1.11 32
[DeviceA-policy-security-rule-policy_sec0] vserver vs-1.1.1.10
[DeviceA-policy-security-rule-policy_sec0] action deny
[DeviceA-policy-security-rule-policy_sec0] quit
[DeviceA-policy-security] rule name policy_sec1
[DeviceA-policy-security-rule-policy_sec1] source-address 1.1.1.0 24
[DeviceA-policy-security-rule-policy_sec1] vserver vs-1.1.1.10
[DeviceA-policy-security-rule-policy_sec1] action permit
[DeviceA-policy-security-rule-policy_sec1] profile ips default
[DeviceA-policy-security-rule-policy_sec1] profile av default
[DeviceA-policy-security-rule-policy_sec1] quit
[DeviceA-policy-security] quit 

两条规则都在 vserver 维度上匹配流量:policy_sec0 把存在攻击行为的 1.1.1.11 单独阻断;policy_sec1 放行其余 1.1.1.0/24 网段并引用 ips、av 两个 default 配置文件,访问虚拟服务的流量顺带过一遍入侵防御和反病毒检测。

结果验证

在设备上查看静态Server-map表,存在相应表项证明服务器负载均衡功能配置成功。

[DeviceA] display firewall server-map static
 Current Total Server-map : 1
 Type: SLB,  ANY -> 1.1.1.10:2121[vs-1.1.1.10/0],  Zone:---,  protocol:tcp              
 Vpn: public -> public

当服务器请求流量较大时,经过一段时间后,在设备上查看虚拟服务器和实服务器的运行情况,可见3个实服务器的总会话数、并发会话数比约为4:2:1。

[DeviceA] display slb vserver name vs-1.1.1.10 verbose
Virtual Server Information(Total 1)
-------------------------------------------------------------------------------------------
  Virtual Server Name      : vs-1.1.1.10
  Virtual Server ID        : 0
  Virtual Server IP        : 1.1.1.10
  Protocol                 : tcp
  Source-nat Type          : NA
  Virtual Server Port      : 2121
  Http X-forward Enable    : Disable
  Virtual Server Max-conn  : --
  Group Name               : Rserver
  Group ID                 : 0
  Persistence Name/ID(Type): sourceip/0(source-ip)
  Tunnel Mode              : Disable  
  Auth-Enable              : Disable
  Virtual Server Statistics
   Current Connection       :112
   Total connection         :300
   Total Flow               :3247856_B
---------------------------------------------
[DeviceA] display slb group name Rserver verbose 
Group Information(Total 1)                                                      
--------------------------------------------------------------------------------
----------------------------                                                    
  Group Name               : Rserver                                   
  Group ID                 : 0                                                  
  Metric                   : weight-least-connection                            
  Health Check Type        : icmp                                               
  Real Server Number       : 3                                                  
    RserverID  IP-Address       Weight  Max-connection  Status         Ratio        TotalSession  CurSession                                                    
    0          192.168.1.1      4       -               Active         57.03%            1525        65                                                  
    1          192.168.1.2      2       -               Active         28.42%             760        32                                                    
    2          192.168.1.3      1       -               Active         14.55%             389        15                                                    
--------------------------------------------------------------------------------
---------------------------- 

判读要点有三处:一是 server-map 表里那条 SLB 表项,说明虚拟服务器 1.1.1.10:2121 已经建立映射;二是 display slb group 的 Ratio 列,57.03%、28.42%、14.55% 三个占比基本落在 4:2:1 上,权值分摊在真实生效;三是每台实服务器的 Status 都是 Active,表示 ICMP 健康检查探测通过,哪台宕了会在这里变状态、流量自动挪给另外两台。

配置脚本

#
sysname DeviceA 
#
interface GE0/0/1
 ip address 1.1.1.1 255.255.255.0
#
interface GE0/0/2
 ip address 192.168.1.254 255.255.255.0
#
firewall zone untrust
 add interface GE0/0/1
#
firewall zone dmz
 add interface GE0/0/2
#
security-policy
 rule name policy_sec0
  source-address 1.1.1.11  32
  vserver vs-1.1.1.10
  action deny
 rule name policy_sec1
  source-address 1.1.1.0  24
  vserver vs-1.1.1.10
  action permit
  profile ips default
  profile av default
#
healthcheck enable
slb
 group 0 Rserver
  metric weight-least-connection
  health-check type icmp   
  rserver 0 rip 192.168.1.1 port 21 status health-check weight 4 description server1
  rserver 1 rip 192.168.1.2 port 21 status health-check weight 2 description server2
  rserver 2 rip 192.168.1.3 port 21 status health-check description server3
 session persistence 0 sourceip
 security-policy enable
 vserver 0 vs-1.1.1.10
  vserver type l4
  vip 0 1.1.1.10
  protocol tcp
  vport 2121
  persistence sourceip
  group Rserver
#
return

命令行侧的对应关系很直观:metric weight-least-connection 定算法,rserver ... weight 4/2/1 定各台权值,health-check type icmp 定探测,vserver 把虚拟地址和实服务器组挂到一起,persistence sourceip 管会话保持。

注意事项

  • 权值跟性能走:Server1 是 Server2 的两倍性能、Server2 是 Server3 的两倍,权值就是 4:2:1——性能差一倍权值减半,加第四台机器时按同一逻辑折算,别拍脑袋平均分。
  • 脚本与步骤命令有个别书写差异:配置脚本里 Server3 那行没有再写 weight 1(步骤命令里写了),脚本里还多一条 healthcheck enable 全局命令;两处都是官方原文,整体粘贴使用时以脚本为准。
  • 对外只暴露虚拟服务器:客户端访问的是 1.1.1.10 的 2121 端口,三台实服务器的真实地址 192.168.1.1~192.168.1.3 和真实端口 21 不对外,增减实服务器对外无感。
  • 健康检查是自动摘除的关键:探测不到的实服务器不再接新流量,恢复后自动回来,这一条让"坏一台不影响服务"成立。
  • 会话保持别省:源地址保持让同一客户端的多条连接落在同一台实服务器上,登录态、多连接操作才不会串机器。
  • 安全策略两分法:deny 规则(policy_sec0)在前放攻击源,permit 规则(policy_sec1)在后挂 ips/av 检查其余流量,顺序不能颠倒。

服务器扩容加机器、调整权值比例这类调整,建议请诚鑫致达科技先把各台机器的性能摸一遍底再定分摊比例,比按感觉拍脑袋稳当。各厂商设备的命令与默认参数存在差异,本文步骤与命令均出自华为官方文档,操作前请核对你的设备型号与软件版本。

源:华为USG防火墙6000F-S官方文档