上一篇
f5七层负载均衡配置
- 行业动态
- 2025-05-03
- 3
配置虚拟服务器,定义池成员,编写iRules,设置健康检查与SSL卸载,实现F5七
F5七层负载均衡配置详解
创建虚拟服务器(Virtual Server)
虚拟服务器是七层负载均衡的核心配置,负责接收客户端请求并将流量分发到后端服务器池,以下是关键配置参数:
参数 | 说明 |
---|---|
Name | 虚拟服务器的名称(自定义,建议与业务相关) |
Type | 选择 Standard (标准模式)或 FastL4 (四层加速模式,仅支持四层负载) |
IP Address | 绑定的公网IP或域名(如 0.0.0 表示所有IP) |
Port | 监听的端口(如HTTP为80,HTTPS为443) |
Protocol | 协议类型(如 HTTP 、HTTPS 、TCP 等) |
Persistence | 会话保持方式(如 cookie 、source_addr 、ssl 等) |
Health Monitors | 关联的健康检查(如 http 、tcp 、https 等) |
iRules | 可选的流量处理规则(如URL重写、Cookie插入等) |
示例配置:
# 创建一个HTTP虚拟服务器,监听80端口 ltm virtual /Common/vs_http { destination /Common/pool_backend ipAddress 192.168.1.100 port 80 protocol http persistence profile /Common/cookie_persistence health monitor /Common/http_monitor }
配置iRules(流量处理规则)
iRules是基于TCL语言的脚本,用于实现复杂的流量控制逻辑(如URL重写、Header插入、会话保持等)。
常见场景及示例:
基于Cookie的会话保持
# 检查请求Cookie,若不存在则插入新Cookie if { [HTTP::cookie "SESSIONID"] ne "" } { # 存在Cookie,直接转发 } else { HTTP::respond 302 redirect "/login" # 重定向到登录页 }
URL路径重写
# 将 `/oldpath` 重写为 `/newpath` when HTTP_REQUEST { if { [HTTP::path] starts_with "/oldpath" } { HTTP::uri_rewrite "/newpath[string range [HTTP::path] 7 end]" } }
健康检查(Health Monitor)
七层健康检查通过发送应用层请求(如HTTP GET)验证后端服务器状态。
参数 | 说明 |
---|---|
Type | 检查类型(如 http 、https 、tcp ) |
Interval | 检查间隔(如 5s ) |
Timeout | 超时时间(如 3s ) |
Receive String | 预期返回内容(如 nginx ) |
Send String | 发送的请求内容(如 GET / HTTP/1.1 ) |
示例配置:
# 创建一个HTTP健康检查,检测后端服务器状态 ltm monitor /Common/http_monitor { interval 5s timeout 3s type http send "GET / HTTP/1.1r Host:localhostr r " receive "200 OK" }
SSL配置(HTTPS场景)
若需处理HTTPS流量,需配置SSL证书和加密策略。
关键步骤:
- 上传证书:通过F5 Web界面或命令行上传证书文件(
.crt
)和私钥(.key
)。 - 创建SSL Profiles:定义加密套件、协议版本等。
# 创建SSL配置文件,强制使用TLS 1.2+ ltm profile /Common/ssl_profile { defaults from /Common/http_profile ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256" protocol_version TLSv1.2 }
- 绑定虚拟服务器:将SSL Profile关联到HTTPS虚拟服务器。
后端服务器池(Pool)
服务器池定义后端真实服务器的列表,支持权重、动态端口等功能。
参数 | 说明 |
---|---|
Members | 后端服务器IP和端口(如 168.1.10:80 ) |
Load Balancing Method | 分发算法(如 round_robin 、least_connections ) |
Monitor | 关联的健康检查(如 /Common/http_monitor ) |
示例配置:
# 创建一个后端服务器池,包含两台服务器 ltm pool /Common/pool_backend { loadBalancingMethod round_robin monitor /Common/http_monitor members add { { address 192.168.1.10 self_port 80 } { address 192.168.1.11 self_port 80 } } }
常见问题与排查
问题:iRules不生效
- 原因:iRules未绑定到虚拟服务器,或语法错误。
- 解决:检查虚拟服务器的
iRules
字段是否关联了正确的规则,并通过F5控制台测试iRules语法。
问题:健康检查失败
- 原因:后端服务器未启动、网络不通或健康检查参数错误。
- 解决:手动访问后端服务器地址,验证服务是否正常;检查健康检查的
Receive String
是否与实际响应匹配。
相关问题与解答
问题1:iRules如何实现基于URL的请求转发?
解答:
通过 HTTP::path
或正则表达式匹配URL路径,结合 HTTP::redirect
或 pool
切换实现。
when HTTP_REQUEST { if { [HTTP::path] starts_with "/api" } { # 将/api开头的请求转发到API服务器池 pool = /Common/pool_api } else { pool = /Common/pool_web } }
问题2:如何优化健康检查性能?
解答:
- 减少检查频率:适当增加
Interval
(如从5s
调整为10s
)。 - 启用被动检查:通过
pw_enabled
参数开启被动健康检查,利用后端服务器的响应状态更新健康状态。 - 精简检查内容:仅检测关键路径(如 `/health