访问量一大单台服务器就顶不住?华为防火墙负载均衡按性能比分摊流量
对外提供服务的业务常常会走到这一步:一台服务器扛访问量越来越吃力,再加两台机器进来,问题变成流量怎么分——三台机器性能还不一样,强的闲着、弱的先满,客户访问时快时慢。这种局面不用急着上专用负载均衡设备,华为防火墙自带服务器负载均衡功能,把多台实服务器组成一个组,对外只暴露一个虚拟服务器地址,流量按各台性能加权分摊,同时用健康检测自动盯着每台机器可达性。华为官方文档有一套完整的 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官方文档