- 首页 >
- 问答 >
-
云计算 >
- 如何在Ubuntu上配置FTP服务器集群
如何在Ubuntu上配置FTP服务器集群
小樊
44
2025-12-13 07:31:31
架构与方案选型
- 采用 vsftpd 作为各节点的 FTP 服务,配合 HAProxy 做四层(L4)负载均衡,对外暴露 21/TCP 控制端口,后端节点同时开放 21/TCP 与被动模式端口段(如 40000–50000/TCP)。若需加密传输,启用 FTPS(990/TCP)。此方案简单、稳定,适合大多数 Ubuntu 场景。
- 数据一致性建议采用共享存储(如 NFS、CephFS、对象存储挂载)或定期 rsync/lftp mirror 同步,确保多节点看到同一份文件;FTP 协议本身为无状态,会话粘滞对控制通道影响不大,但数据写入必须落在共享位置以避免“各写各的”。
步骤一 安装并配置 vsftpd 节点
- 安装与基础配置
- 安装:sudo apt update && sudo apt install -y vsftpd
- 备份:sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
- 建议的基础配置(/etc/vsftpd.conf):
- 监听与控制: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=40000,pasv_max_port=50000
- 并发控制(可选):max_clients=200,max_per_ip=10
- 日志:xferlog_enable=YES,xferlog_std_format=YES,log_ftp_protocol=YES
- 重启生效:sudo systemctl restart vsftpd && sudo systemctl enable vsftpd
- 启用 FTPS(可选但推荐)
- 生成证书(自签或 Let’s Encrypt):
- sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048
-keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
- 配置启用 TLS:
- ssl_enable=YES
- rsa_cert_file=/etc/ssl/private/vsftpd.pem
- rsa_private_key_file=/etc/ssl/private/vsftpd.pem
- force_local_data_ssl=YES
- force_local_logins_ssl=YES
- ssl_tlsv1=YES;ssl_sslv2=NO;ssl_sslv3=NO
- 重启生效:sudo systemctl restart vsftpd
- 防火墙放行(UFW)
- 控制与数据端口:sudo ufw allow 21/tcp
- 被动端口段:sudo ufw allow 40000:50000/tcp
- FTPS(若启用):sudo ufw allow 990/tcp
- 应用:sudo ufw enable && sudo ufw reload
- 验证单节点
- 使用 FileZilla 或命令行 ftp/openssl s_client 测试登录、上传/下载与被动模式连通性。
步骤二 部署 HAProxy 负载均衡
- 安装:sudo apt update && sudo apt install -y haproxy
- 配置(/etc/haproxy/haproxy.cfg,示例为 FTP 与 FTPS 共存)
- 全局与默认
- global
- 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
- FTP 控制通道(21/TCP,明文)
- 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
- server ftp3 192.168.1.103:21 check
- FTPS 控制通道(990/TCP,TLS)
- frontend ftps_front
- bind *:990
- default_backend ftps_back
- backend ftps_back
- balance roundrobin
- server ftp1 192.168.1.101:990 check
- server ftp2 192.168.1.102:990 check
- server ftp3 192.168.1.103:990 check
- 启用与验证
- 检查语法:sudo haproxy -c -f /etc/haproxy/haproxy.cfg
- 启动:sudo systemctl restart haproxy && sudo systemctl enable haproxy
- 注意:HAProxy 仅转发控制通道;被动数据连接由后端 vsftpd 直接对客户端开放,因此需确保客户端能直连各节点的被动端口段(云上需放通安全组/ACL)。
步骤三 数据一致性与共享存储
- 共享存储方案
- 使用 NFS/CephFS 将用户根目录或数据目录挂载到所有 FTP 节点相同路径(如 /data/ftp),保证多节点文件视图一致;注意权限与属主一致性(如统一 UID/GID)。
- 文件同步方案
- 如无共享存储,可用 lftp mirror 或 rsync 做定时/持续双向或主从同步;示例(定时镜像):
- lftp -u ftpuser,password -e “mirror -R /data/ftp /backup/ftp; quit” sftp://backup-node
- 或 rsync -avz --delete /data/ftp/ backup-node:/data/ftp/
- 选择依据:写入频繁、强一致选共享存储;写入较少、容忍时延选定时/持续同步。
步骤四 高可用与运维要点
- 高可用
- 负载均衡器本身可再做一个 主备(如 Keepalived VIP)避免单点;云上可直接使用带健康检查与自动故障转移的负载均衡服务。
- 日志与监控
- vsftpd 日志:/var/log/vsftpd.log、/var/log/xferlog;HAProxy 日志:/var/log/haproxy.log(由 syslog 写入)。建议接入 Prometheus + Grafana 或同类系统监控连接数、带宽、错误率与后端健康状态。
- 客户端与被动模式
- 客户端需启用被动模式(PASV),并允许访问后端节点的 40000–50000/TCP;若使用 FTPS,客户端需信任对应证书(自签时导入 CA/证书)。
- 常见问题排查
- 无法登录:检查服务状态、证书路径、UFW/安全组、被动端口段是否放通。
- 能登录但列目录/传输失败:多为被动端口未放行或数据通道被拦截;检查云安全组/iptables、客户端 PASV 设置。
- 上传失败/权限错误:检查共享存储挂载、目录属主与权限(如 755/775、属主一致)。