- 首页 >
- 问答 >
-
云计算 >
- 如何搭建Ubuntu FTP服务器集群
如何搭建Ubuntu FTP服务器集群
小樊
43
2025-12-21 05:15:50
架构与方案选型
- 采用多台 Ubuntu 22.04/20.04 服务器部署 vsftpd,前置 HAProxy 做四层(L4)负载均衡,后端节点对外统一提供 FTP/FTPS 服务。
- 数据面建议共享存储(如 NFS、对象存储或分布式文件系统)以统一用户根目录;若暂不共享,需在各节点间做目录同步(如 rsync/lftp)。
- 安全面建议启用 FTPS(990/tcp);被动模式需开放一段高位端口(如 40000–50000/tcp)以穿越防火墙/NAT。
- 高可用可在 HAProxy 前再加 Keepalived VIP 或云厂商 负载均衡器 实现故障切换与对外固定入口。
节点与前置准备
- 准备至少 2–3 台 Ubuntu 服务器(作为 FTP 节点)与 1 台 HAProxy 节点(可复用为管理/监控节点)。
- 固定各节点 IP,规划共享目录(如 /data/ftp),统一 UID/GID 与权限模型,避免跨节点权限错乱。
- 开放云安全组/本机防火墙端口:控制通道 21/tcp,FTPS 990/tcp,被动端口段(如 40000–50000/tcp)。示例(UFW):
- sudo ufw allow 21/tcp
- sudo ufw allow 990/tcp
- sudo ufw allow 40000:50000/tcp
- sudo ufw enable
- 建议为 FTP 服务创建专用系统用户(禁止登录 shell),并限制在其家目录(chroot)。
安装与配置 vsftpd
- 安装与基础安全配置(所有 FTP 节点执行):
- sudo apt update && sudo apt install -y vsftpd
- sudo systemctl enable --now vsftpd
- 备份配置:sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
- 编辑 /etc/vsftpd.conf(关键项示例,按需调整):
- 基础: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
- 日志:xferlog_enable=YES,xferlog_std_format=YES,log_ftp_protocol=YES
- 启用 FTPS(可选但强烈建议):
- 生成证书(PEM 合并证书与私钥):
- sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048
-keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
- vsftpd 配置追加/修改:
- ssl_enable=YES
- allow_anon_ssl=NO
- force_local_data_ssl=YES
- force_local_logins_ssl=YES
- rsa_cert_file=/etc/ssl/private/vsftpd.pem
- rsa_private_key_file=/etc/ssl/private/vsftpd.pem
- 创建 FTP 专用用户(示例):
- sudo adduser --system --home /data/ftp/ftpuser --shell /usr/sbin/nologin ftpuser
- sudo mkdir -p /data/ftp/ftpuser/files && sudo chown ftpuser:ftpuser /data/ftp/ftpuser/files
- 重启生效:sudo systemctl restart vsftpd
- 验证单节点:命令行 ftp 或 FileZilla 连接 21 端口,登录后尝试上传/下载。
负载均衡与高可用
- 安装 HAProxy(负载均衡节点执行):sudo apt install -y haproxy
- 配置 /etc/haproxy/haproxy.cfg(四层转发示例,FTPS 同样走 21 端口):
- 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
- 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
- 启用与验证:
- sudo systemctl enable --now haproxy
- 使用客户端连接 HAProxy_IP:21 测试登录与传输;FTPS 连接 990/tcp 同理。
- 高可用(可选):
- 在 HAProxy 节点前部署 Keepalived VIP,或直接使用云厂商 负载均衡器 作为入口,实现故障自动切换与对外固定地址。
数据一致性与运维监控
- 数据一致性:
- 共享存储优先:将 /data/ftp 挂载为 NFS 或对象存储挂载点,天然保证多节点一致性。
- 无共享方案:定期/实时用 rsync/lftp mirror 在节点间同步用户目录,注意锁与一致性窗口,避免并发写入冲突。
- 日志与排障:
- 查看 vsftpd 日志:sudo tail -f /var/log/vsftpd.log;FTPS 握手与传输在日志中可见(启用 xferlog 更便于审计)。
- 常见故障:被动端口未放行导致数据通道卡住;证书路径/权限错误导致 FTPS 握手失败;chroot 目录不可写导致上传失败;用户 shell 为 /usr/sbin/nologin 却被 PAM/ftp 策略拒绝(检查 /etc/shells 与 PAM 配置)。
- 监控与告警:
- 监控 HAProxy 后端健康(4xx/5xx、会话数、后端宕机),监控节点磁盘/带宽/CPU。
- 建议接入 Prometheus + Grafana 做可视化与阈值告警,结合日志采集(如 rsyslog/filebeat)完善可观测性。