F5 BIG-IP LTM 负载均衡:从 VLAN 到故障切换的配置思路
F5 BIG-IP 本地流量管理器(LTM)位于一组服务器前面,把客户端请求分发到各台服务器上。它检查哪些服务器健康,在需要时让相关请求保持在同一台服务器上,卸载 TLS 加密,并在备用设备存在时自动接管。本文按你实际会遇到的顺序,讲解完整的配置过程:LTM 的作用、设计规划、首次访问与网络、池与健康监控、虚拟服务器、负载均衡方法与会话保持、SSL 卸载、高可用性以及故障排查。配置示例给出了每个步骤对应的 tmsh 命令。
需要准备的东西
你需要了解 IP 地址、子网划分、VLAN,以及路由器和交换机的作用。如果已读过本站的 CCNA 文章和 FortiGate 文章中的负载均衡思路,会更容易理解。练习时可以使用 BIG-IP 实验设备,或用于实验的虚拟版(virtual edition)。请只在你拥有或获准配置的设备上操作;没有书面计划和回滚方案时,不要更改生产环境的负载均衡器。
示意图
知识点 1: BIG-IP LTM 的作用
负载均衡器让一组服务器看起来像一个服务。客户端连接一个地址,由 LTM 决定每个请求由哪台服务器处理。这样可以增加处理能力,可以在不中断服务的情况下把服务器拿下来维护,还能对用户隐藏服务器故障。LTM 工作在传输层和应用层,因此它的决定可以利用 TCP 的细节和 HTTP 的内容。
为什么要使用负载均衡器
一台 Web 服务器能服务的用户数量有限。只有在有某种机制把请求分发到多台服务器时,增加服务器才有意义。LTM 分发负载,检查每台服务器,并停止向已宕机的服务器发送流量。用户看到的是一个地址,团队可以在不改变地址的情况下更换服务器。
本地流量管理与其他 F5 产品
LTM 负责数据中心内部的流量。Global Traffic Manager(GTM,现称基于 DNS 的负载均衡)负责在数据中心之间做选择。Application Security Manager(ASM,现称 Advanced WAF)增加 Web 应用防火墙功能。应先学习 LTM,因为池和虚拟服务器等对象在其他产品中同样使用。
数据路径
请求到达虚拟服务器地址,经过配置文件处理,与池进行匹配,然后发送到某个成员。成员的响应经由 BIG-IP 返回,这就是为什么 BIG-IP 必须位于客户端与服务器之间的路径上,或者通过 SNAT 处理返回流量。
知识点 2: 配置前先做设计规划
负载均衡器的故障大多源于没有被记录下来的设计,而不是设备本身。在打开配置工具之前,先规划网络、服务器、健康检查和故障切换。
画出示意图
画出客户端、外部网络、BIG-IP、放有 Web 服务器的内部网络以及备用设备。给每个端口标注所属 VLAN,给每个地址标注用途:虚拟服务器地址、自身 IP(self IP)、服务器地址和管理地址。这张图是后续每一步的参考。
编写地址规划
记录用户连接的虚拟服务器地址、每个 VLAN 的 self IP、服务器地址、默认网关和管理地址。把管理网络与业务流量网络分开。只要列出了所有依赖对象,以后修改地址也很容易。
决定如何检查服务器
为每项服务确定服务器健康的标准。Web 服务器可以用对健康页面的 HTTP 请求来检查,数据库可以用 TCP 连接来检查。只检测端口的检查可能会把已损坏的应用标记为健康,因此应测试用户真正需要的功能。
规划回滚
在第一次修改之前保存配置,并记下如何恢复。对会移动实时流量的更改安排维护窗口,并通知依赖该服务的人员。
知识点 3: 首次访问、VLAN、自身 IP 与路由
新的 BIG-IP 在能够转发流量之前,需要主机名、DNS、NTP、许可证以及网络配置。图形界面和命令行都可以使用。本文示例使用 tmsh,即 BIG-IP 的命令行工具,因为这些命令可以保存并重复执行。
主机名、DNS 与 NTP
为设备设置完整的名称,例如 bigip01.example.local。设置 DNS 服务器以便解析域名,设置 NTP 以便日志、证书和故障切换消息带有正确的时间。在第一次登录时修改默认管理员密码,并为每个人创建具名账户。
VLAN 与端口的对应关系
VLAN 是 BIG-IP 上的网络分段。根据交换机的要求,把每个物理端口分配到某个 VLAN,并决定是否带 VLAN 标签。外部 VLAN 面向客户端,内部 VLAN 面向服务器。两者应保持分离,因为 BIG-IP 在它们之间进行路由。
自身 IP(Self IP)
自身 IP 是 VLAN 上的一个地址,BIG-IP 用它处理自身的流量,例如健康检查和路由。给每个 VLAN 配置一个位于其子网内的自身 IP。只在必要的地方把 allow-service 设为 default,绝不要在外部 VLAN 上允许管理服务。
默认路由
默认路由把目的地未知的流量发送到网关。用 ping 测试到客户端和服务器的路由。能到达 BIG-IP 却无法回应的服务器,通常是服务器一侧缺少路由,因此也要检查服务器的默认网关。
设备配置: 设置主机名、DNS、NTP、VLAN 和自身 IP
为设备命名,设置 DNS 和 NTP,把外部和内部端口放入 VLAN,并为每个 VLAN 配置设备自身流量使用的 self IP。默认路由通过 ISP 网关把互联网流量送出。保存配置后,检查 self IP 和接口。
# tmsh: hostname, DNS, NTP, VLANs, self IPs and the default route
tmsh modify sys global-settings hostname bigip01.example.local
tmsh modify sys dns name-servers add { 8.8.8.8 }
tmsh modify sys ntp servers add { pool.ntp.org }
tmsh create net vlan external interfaces add { 1.1 }
tmsh create net vlan internal interfaces add { 1.2 { untagged } }
tmsh create net self 203.0.113.5/24 vlan external allow-service default
tmsh create net self 10.10.10.5/24 vlan internal allow-service default
tmsh create net route default network default gw 203.0.113.1
tmsh save sys config
# Check
tmsh list net self
tmsh show net interface
知识点 4: 池、成员与健康监控
池是提供相同服务的一组服务器。池成员是池中的一台服务器及其端口。健康监控器检查每个成员,并将其标记为正常或故障,因此 BIG-IP 永远不会把请求发给无法应答的服务器。
池与成员
把每台服务器及其端口添加为成员,例如 10.10.10.11:80。同一池中的成员应运行相同的应用和内容,因为 BIG-IP 会把每个请求发送给它选择的任一成员。当服务器的处理能力不同时,为每个成员设置比率或优先级。
HTTP 监控器
HTTP 监控器发送一个请求,例如 GET /health,并检查响应中是否包含预期的文本,例如 200 OK。检查真实应用的监控器比只检查端口是否开放的监控器有用得多。设置检查间隔和超时,使故障服务器能够被较快移除,但不会因为一次响应慢就被误移除。
成员状态
成员可以处于 up、down、disabled 或 forced offline 状态。disabled 让现有连接完成,但不再发送新连接,这在维护前很有用。forced offline 会立即停止所有流量,包括现有连接。应有意识地选择状态,因为它会改变用户的体验。
为维护而下线服务器
禁用该成员,等待其连接排空,进行更改,然后重新启用成员,并确认监控器将其标记为 up。逐台进行可以保证服务持续运行。
设备配置: 创建健康监控和池
监控器向每台服务器发送请求,只有当应答匹配时才标记为正常。池把服务器组合在一起,把监控器应用到每个成员,并选择负载均衡方式。监控失败的成员会自动从轮询中移除。
# tmsh: a health monitor and a pool with two web servers
tmsh create ltm monitor http web_mon defaults-from http send "GET /health HTTP/1.0\r\n\r\n" recv "200 OK"
tmsh create ltm pool web_pool members add { 10.10.10.11:80 10.10.10.12:80 } monitor web_mon load-balancing-mode round-robin
tmsh save sys config
# Check
tmsh show ltm pool web_pool members
tmsh list ltm monitor http web_mon
知识点 5: 虚拟服务器、SNAT 与配置文件
虚拟服务器是客户端连接的地址和端口,它是服务的前门。它具有目的地址和端口、协议、池、控制流量处理方式的配置文件,以及转换源地址的方式。
目的地址、协议与池
Web 服务的虚拟服务器可以是 TCP 协议的 203.0.113.10:443,并把流量发送到 web_pool。客户端只使用这个地址。池及其成员隐藏在它后面,因此团队可以在不改变用户所知地址的情况下更换服务器。
配置文件
配置文件控制流量的处理方式。TCP 配置文件调整连接参数,HTTP 配置文件读取请求,使 LTM 能根据 URL 或报头做决定,客户端 SSL 配置文件终结加密。只使用服务所需的配置文件,因为每个配置文件都会增加处理开销。
SNAT automap
如果没有源地址转换,服务器会看到客户端的地址并直接回复给它,绕过 BIG-IP,连接随即中断。SNAT automap 把源地址改写为内部 VLAN 上的自身 IP,使服务器通过 BIG-IP 回复。用 show ltm connection 检查连接,以确认流量路径。
测试虚拟服务器
应从真实客户端测试,而不仅仅是从 BIG-IP 测试。先检查虚拟服务器的状态,再查看池及其成员。如果虚拟服务器可用但用户仍遇到错误,问题通常出在配置文件、证书或服务器上的应用。
设备配置: 用虚拟服务器发布池
虚拟服务器是客户端连接的地址。它把流量发送到池,应用配置文件(TCP、HTTP 和客户端 SSL),并使用 SNAT automap 让服务器通过 BIG-IP 回复。用 show ltm connection 检查连接。
# tmsh: a virtual server that publishes the pool on 203.0.113.10:443
tmsh create ltm virtual vs_web destination 203.0.113.10:443 ip-protocol tcp pool web_pool profiles add { tcp http clientssl } source-address-translation { type automap }
tmsh save sys config
# Check
tmsh list ltm virtual vs_web
tmsh show ltm virtual vs_web
tmsh show ltm connection
知识点 6: 负载均衡方法与会话保持
负载均衡方法决定每个新连接交给哪个成员。会话保持决定客户端何时应该持续回到同一个成员,例如服务器在自己的内存中保存了用户的登录会话时。
轮询与比率
轮询按顺序依次把连接分配给每个成员。当所有服务器相同且请求相似时效果很好。比率方法让性能更强的服务器获得更大的份额。方法设置在池上,可以先用少量客户端测试更改,再应用到全部用户。
最少连接与最快响应
最少连接把新请求发送给活动连接数最少的成员,适合处理时间差异很大的请求。最快响应把请求发送给近期响应最快的成员。应选择与服务器工作相匹配的方法,而不是选项最多的那个。
会话保持
会话保持让客户端在一段时间内留在同一个成员上。Cookie 会话保持会在浏览器中插入一个标识成员的值,是 Web 应用的常用选择。基于源地址的会话保持使用客户端的 IP,较弱,因为同一地址背后的大量用户都会落到同一台服务器上。
会话保持何时会出问题
如果会话保持记录指向一个已经宕机的成员,在记录过期之前用户的会话可能会中断。应尽可能缩短会话保持的超时时间,并让应用能够从丢失的会话中恢复。
知识点 7: SSL 卸载与证书
TLS 的加密和解密会占用每台服务器的处理器时间。SSL 卸载把这部分工作转移到 BIG-IP 上。BIG-IP 持有证书,解密客户端流量,并通过内部网络以明文 HTTP 发送给服务器,内部流量由网络设计加以保护。
卸载的工作方式
客户端 SSL 配置文件保存证书和私钥。客户端的 TLS 会话在 BIG-IP 上结束,BIG-IP 读取请求后转发给端口 80 上的某个成员。服务器因此无需为公网域名持有证书,证书续期也更简单。
证书与密钥
私钥只保存在 BIG-IP 上,并保护能够导出私钥的管理访问。提前规划证书续期,因为过期的证书会让所有用户的服务中断。使用与虚拟服务器地址的公网域名相匹配的证书。
重新加密与何时使用
如果流量必须在内部网络中保持加密,BIG-IP 可以使用服务器端 SSL 配置文件与服务器建立新的 TLS 会话。这会增加处理开销,但能保护数据中心内部的流量。当内部网络不可信时选择此方案。
知识点 8: 高可用性与 sync-failover
两台 BIG-IP 可以作为主备(active-standby)一对运行。备用设备拥有相同的配置,并在活动设备故障时接管虚拟地址。如果故障切换设置正确,客户端通常只会感受到短暂的中断,而不是服务中断。
设备组与 config-sync
sync-failover 设备组列出共享配置的设备。config-sync 通过专用网络把变更从一台设备复制到其他设备。只在活动设备上做修改,之后检查同步状态,因为备用设备上的修改会被下一次同步覆盖。
故障切换的触发条件
备用设备在以下情况接管:活动设备失去心跳,被监控的流量组失败,或管理员强制故障切换。应在计划好的时间窗口中测试每个触发条件,确认哪些地址会迁移,以及会话是否保持。
在不中断服务的情况下测试故障切换
在较安静的时段执行计划好的故障切换,观察连接和流量组,如果结果不符合预期就切换回去。从未测试过的故障切换是风险,而不是保护。
设备配置: 配置主备 sync-failover
两台设备通过专用网络上的 config-sync 地址和镜像地址共享配置。设备组保持配置一致,当活动设备故障时,故障切换会把流量转移到备用设备。请在计划好的时间窗口中测试故障切换。
# tmsh: a sync-failover device group for an active-standby pair (run on the primary unit)
tmsh modify cm device bigip01.example.local configsync-ip 10.10.20.5 unicast-address { { ip 10.10.20.5 } } mirror-ip 10.10.20.5
tmsh create cm device-group failover-group type sync-failover devices add { bigip01.example.local bigip02.example.local } auto-sync enabled
tmsh run cm config-sync to-group failover-group
# Check
tmsh show cm sync-status
tmsh show sys failover
知识点 9: 故障排查与监控
出现问题时,应按数据路径的顺序逐段排查:客户端、虚拟服务器、配置文件、池、成员和服务器。每一段都有对应的命令或日志,可以显示请求是否已经到达该段。
从池成员开始
显示池成员,查看哪台服务器宕机,并阅读监控器的结果。被监控器标记为 down 的成员,通常意味着健康检查失败,而不是用户流量有误。在责怪负载均衡器之前,先检查服务器上的应用。
阅读日志
LTM 日志记录监控器状态变化、虚拟服务器状态变化以及配置错误。每次故障之后都应阅读。日志会记录每个事件的时间,有助于把用户的报告与某次变更或服务器宕机对应起来。
抓取流量
在 BIG-IP 或服务器上抓包,可以显示请求是否到达、服务器回复了什么,以及连接在哪里中断。只抓取所需的时间,并按主机和端口过滤,因为在繁忙的设备上全量抓包会拖慢设备。
保存并记录修复过程
修复之后,保存配置,并记录哪里出了问题、做了哪些更改,以及如何确认修复有效。这份记录能缩短下一次排查的时间,也能向团队证明这次变更已经过验证。
设备配置: 检查成员并排查故障服务器
当用户报告错误时,显示池成员,看哪台服务器宕机,然后阅读 LTM 日志中的监控结果。服务器侧的抓包可以显示请求是否到达服务器以及服务器如何回应。修复服务器或监控器后,在关闭工单之前再次检查。
# tmsh: check a pool member that is down, then look at the logs and capture the traffic
tmsh show ltm pool web_pool members
tmsh show ltm pool web_pool members detail
tmsh show sys hardware
tail -n 50 /var/log/ltm
tcpdump -ni 0.0:nnn -s0 host 10.10.10.11 and port 80
在实验室中练习
负载均衡器的技能来自动手实践,因此请搭建一个小型实验环境,包含三部分:客户端、中间的 BIG-IP,以及内部网络上的两台 Web 服务器。使用 BIG-IP 虚拟版或实验设备,并按顺序完成以下步骤。
1. 画出示意图,并为外部和内部网络编写地址规划。
2. 设置主机名、DNS 和 NTP,并创建具名的管理员账户。
3. 创建外部和内部 VLAN,为每个 VLAN 添加自身 IP,并添加默认路由。
4. 检查从客户端到外部自身 IP,以及从 BIG-IP 到每台 Web 服务器的连通性。
5. 创建 HTTP 健康监控器,以及包含两台 Web 服务器的池。
6. 在外部地址上创建带 SNAT automap 的虚拟服务器,并从客户端测试。
7. 停止一台 Web 服务器,观察监控器将其标记为宕机;然后重新启动,并确认它返回池中。
8. 保存配置,修改一处,然后恢复已保存的版本,以确认回滚可以正常工作。
下一步
掌握基础之后,针对真实应用练习监控器和池的设计,然后学习 SSL 配置文件和证书续期,最后测试高可用性。每次修改虚拟服务器和池都要做记录。大多数故障来自没有人记录的变更,而不是某一个错误的设置。
总结
BIG-IP LTM 在一个虚拟服务器地址之后,把客户端请求分发到一组健康的服务器池中。良好的配置从示意图和地址规划开始,然后配置主机名、VLAN、自身 IP 和默认路由,接着创建带有真实健康监控器的池、带有 SNAT 的虚拟服务器、适合工作负载的负载均衡方法,并可选择 SSL 卸载和主备一对。每次修改前都要保存配置,并按数据路径的顺序进行故障排查。