FTP服务器负载均衡的实现方案
一、总体思路与关键点
二、常见实现方案对比
| 方案 | 适用场景 | 关键配置点 | 优点 | 局限 |
|---|---|---|---|---|
| HAProxy(TCP) | 通用、易维护 | mode tcp;frontend 监听21;backend 配置 server 列表;可选 source 粘滞 | 配置简洁、健康检查、支持多种算法 | 需额外处理 PASV 数据端口转发 |
| Nginx Stream | 已使用 Nginx 体系 | stream { upstream ftp { server … }; server { listen 21; proxy_pass ftp; } } | 与 Nginx 生态一致、支持 TCP/UDP | 需正确放行 PASV 端口范围 |
| LVS + Keepalived(DR/NAT) | 高并发、内核级转发 | 配置 virtual_server 21/TCP;lb_algo rr;lb_kind DR/NAT;real_server 健康检查 | 性能高、可横向扩展 | 部署与网络要求更高,需处理 PASV |
| DNS轮询 | 简单容错 | 同一域名返回多个A记录 | 实现简单、成本低 | 无法健康检查与智能调度,粘滞性差 |
| 硬件/商业LB | 企业级、合规要求 | 支持 FTP/FTPS、会话保持、健康检查 | 功能完备、稳定 | 成本较高、运维依赖厂商 |
三、配置示例
HAProxy 示例(TCP转发,控制通道)
global
log /dev/log local0
log /dev/log local1 notice
daemon
defaults
log global
mode tcp
option tcplog
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend ftp_front
bind *:21
default_backend ftp_back
backend ftp_back
balance roundrobin
server ftp1 192.168.1.101:21 check
server ftp2 192.168.1.102:21 check
要点:后端为 FTP 控制通道;如需会话粘滞可添加 stick-table type ip size 200k expire 30m; stick on src;。PASV 数据端口需在后端 FTP 服务统一配置端口范围,并在防火墙放行。
Nginx Stream 示例(TCP转发)
stream {
upstream ftp {
server 192.168.1.101:21;
server 192.168.1.102:21;
}
server {
listen 21;
proxy_pass ftp;
}
}
要点:使用 Nginx 的 Stream 模块处理四层 TCP;PASV 端口范围与防火墙策略同样需要在后端与 LB 上配合。
LVS + Keepalived 示例(DR 模式)
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication { auth_type PASS; auth_pass 42 }
virtual_ipaddress { 192.168.1.100 }
}
virtual_server 192.168.1.100 21 {
delay_loop 6
lb_algo rr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP
real_server 192.168.1.101 21 {
weight 1
TCP_CHECK { connect_timeout 10; connect_port 21 }
}
real_server 192.168.1.102 21 {
weight 1
TCP_CHECK { connect_timeout 10; connect_port 21 }
}
}
要点:DR 模式需正确配置回环接口与ARP抑制;PASV 端口范围需在后端统一并放行。
四、被动模式与防火墙要点
五、高可用、存储与运维实践