在 Ubuntu 上搭建 FTP 服务器的负载均衡,需要先明确一个关键问题:
FTP 是“有状态 + 双端口”协议(21 控制端口 + 20 或随机数据端口),不能像 HTTP 那样简单用 Nginx/LVS 直接反代。
下面按可行方案从易到难说明。
HAProxy 可以代理 FTP,但必须走“透传模式”
frontend ftp_front
bind *:21
mode tcp
default_backend ftp_back
backend ftp_back
mode tcp
balance roundrobin
server ftp1 192.168.1.11:21 check
server ftp2 192.168.1.12:21 check
⚠ 限制:
✅ 适合:只读下载、简单分发
Linux 原生负载均衡,对 FTP 非常友好
# 示例:LVS NAT
ipvsadm -A -t 192.168.1.100:21 -s rr
ipvsadm -a -t 192.168.1.100:21 -r 192.168.1.11:21 -m
ipvsadm -a -t 192.168.1.100:21 -r 192.168.1.12:21 -m
✅ 优点:
❌ 缺点:
架构:
Client
↓
Load Balancer (LVS / HAProxy)
↓
vsftpd (多台 Ubuntu)
↓
NFS / Ceph / GlusterFS
listen=YES
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
所有 FTP Server:
✅ 企业最常用方案
ProFTPD 支持:
<IfModule mod_radius.c>
...
</IfModule>
适合:
ftp IN A 192.168.1.11
ftp IN A 192.168.1.12
❌ 问题:
| 场景 | 推荐方案 |
|---|---|
| 简单分发 | HAProxy TCP |
| 高性能 | LVS |
| 企业级 | vsftpd + 共享存储 |
| 多租户 | ProFTPD + DB |
你可以告诉我:
我可以直接给你 完整配置示例。