CentOS FTP Server 负载均衡实现指南
一、架构与关键点
二、方案一 HAProxy TCP 四层转发(简单通用)
sudo yum install haproxy -y && sudo systemctl enable --now haproxyglobal
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
sudo firewall-cmd --permanent --add-service=ftp && sudo firewall-cmd --reloadsudo firewall-cmd --permanent --add-port=10090-10100/tcp && sudo firewall-cmd --reload三、方案二 Nginx Stream 四层转发(轻量替代)
sudo yum install nginx -y && sudo systemctl enable --now nginxstream {
upstream ftp_servers {
server 192.168.1.101:21;
server 192.168.1.102:21;
}
server {
listen 21;
proxy_pass ftp_servers;
proxy_timeout 1h;
proxy_responses 1;
}
}
四、方案三 LVS + Keepalived(高性能与高可用)
ipvsadm -C
ipvsadm -A -t 192.168.1.100:21 -s rr
ipvsadm -a -t 192.168.1.100:21 -r 192.168.1.101:21 -g
ipvsadm -a -t 192.168.1.100:21 -r 192.168.1.102:21 -g
ifconfig lo:0 192.168.1.100 netmask 255.255.255.255 broadcast 192.168.1.100
route add -host 192.168.1.100 dev lo:0
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
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
protocol TCP
real_server 192.168.1.101 21 { weight 1; TCP_CHECK { connect_timeout 10; } }
real_server 192.168.1.102 21 { weight 1; TCP_CHECK { connect_timeout 10; } }
}
五、后端 FTP 与防火墙配置要点
listen=YES
listen_ipv6=NO
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES
pasv_enable=YES
pasv_min_port=10090
pasv_max_port=10100
pasv_address=192.168.1.100 # 对外 VIP(LVS/HAProxy 地址);若直连后端,填各自内网地址
sudo firewall-cmd --permanent --add-service=ftpsudo firewall-cmd --permanent --add-port=10090-10100/tcpsudo firewall-cmd --reloadsudo setsebool -P ftp_home_dir onssl_enable=YES、force_local_data_ssl=YES、force_local_logins_ssl=YES,证书路径正确;FTPS 在负载均衡器上优先选择 SSL Passthrough,避免中间人解密与证书绑定问题。ftp <VIP> 或 lftp <VIP>,上传/下载大文件验证吞吐与稳定性tail -f /var/log/vsftpd/vsftpd.log、tail -f /var/log/haproxy.log