CentOS FTP服务器负载均衡实现指南
一、方案总览与选择
二、方案一 HAProxy四层负载均衡(推荐起步)
sudo yum install haproxy -y && sudo systemctl enable --now haproxyglobal
log /dev/log local0
log /dev/log local1 notice
daemon
maxconn 4096
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 --reload三、方案二 LVS DR + Keepalived(高性能与高可用)
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf && sudo sysctl -psudo yum install ipvsadm keepalived -yvrrp_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/24 }
}
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 connect_port 21 }
}
real_server 192.168.1.102 21 {
weight 1
TCP_CHECK { connect_timeout 10 connect_port 21 }
}
}
sudo systemctl enable --now keepalivedSNS_VIP=192.168.1.100
ip addr add $SNS_VIP/32 dev lo:0
route add -host $SNS_VIP 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
四、FTP被动模式与防火墙关键配置
pasv_enable=YES
pasv_min_port=2121
pasv_max_port=2130
pasv_address=192.168.1.100 # 对外暴露的 VIP(LVS 或 HAProxy 前端地址)
sudo systemctl restart vsftpdsudo firewall-cmd --permanent --add-port=21/tcp
sudo firewall-cmd --permanent --add-port=2121-2130/tcp
sudo firewall-cmd --reload
sudo setsebool -P ftp_home_dir on
sudo setsebool -P allow_ftpd_full_access on
五、安全、高可用与验证
ssl_enable=YES、force_local_data_ssl=YES、force_local_logins_ssl=YES,并配置证书;防火墙放行 990/tcp(FTPS 控制通道)。HAProxy/Nginx 侧可按需配置 TLS 终止或透传。ftp <负载均衡器IP> 或 lftp <负载均衡器IP>;上传/下载大文件验证吞吐与稳定性;在负载均衡器与后端查看日志:tail -f /var/log/vsftpd/vsftpd.log、tail -f /var/log/haproxy.log。