温馨提示×

如何在Ubuntu上配置FTP服务器集群

小樊
44
2025-12-13 07:31:31
栏目: 云计算

架构与方案选型

  • 采用 vsftpd 作为各节点的 FTP 服务,配合 HAProxy 做四层(L4)负载均衡,对外暴露 21/TCP 控制端口,后端节点同时开放 21/TCP 与被动模式端口段(如 40000–50000/TCP)。若需加密传输,启用 FTPS(990/TCP)。此方案简单、稳定,适合大多数 Ubuntu 场景。
  • 数据一致性建议采用共享存储(如 NFSCephFS、对象存储挂载)或定期 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 mirrorrsync 做定时/持续双向或主从同步;示例(定时镜像):
      • 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、属主一致)。

0