温馨提示×

如何在Linux FTP Server上实现负载均衡

小樊
41
2025-12-11 02:57:18
栏目: 云计算

Linux FTP Server 负载均衡实践指南

一、方案总览与适用场景

  • 四层转发型:使用 HAProxyNginx Stream 模块TCP 21 端口做连接转发,简单、通用、维护成本低,适合大多数 FTP/FTPS 场景。
  • 内核级 LVS + Keepalived:基于 IPVS 的四层负载均衡,支持 DR/TUN/NAT 模式,性能更高,适合大并发与高可用生产环境。
  • DNS 轮询:配置多条 A 记录做简单分发,部署快速但不具备健康检查与智能调度,适合低要求或配合其他方案使用。

二、四层转发型方案 HAProxy 与 Nginx Stream

  • HAProxy 示例(推荐)

    • 安装:sudo apt-get update && sudo apt-get install haproxy
    • 配置 /etc/haproxy/haproxy.cfg(示例为 FTP,FTPS 同样走 21 端口转发控制通道):
      global
        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
        server ftp3 192.168.1.103:21 check
      
    • 启动:sudo systemctl start haproxy && sudo systemctl enable haproxy
    • 说明:HAProxy 对 主动/被动 FTP 的控制通道(21 端口)做 TCP 转发即可,数据通道由客户端与后端直连;FTPS 为 SSL/TLS 加密的控制通道,同样在 21 端口完成握手与转发。
  • Nginx Stream 示例(支持 SSL/TLS 终止或透传)

    • 安装:sudo apt-get update && sudo apt-get install nginx(确保包含 Stream 模块,部分发行版为 nginx-extras
    • 配置 /etc/nginx/nginx.conf(在顶层加入 stream,示例为透传):
      stream {
        upstream ftp_servers {
          server 192.168.1.101:21;
          server 192.168.1.102:21;
          server 192.168.1.103:21;
        }
        server {
          listen 21;
          proxy_pass ftp_servers;
          # 如需在负载均衡器终止 TLS,可添加证书并启用 ssl 指令
          # ssl_certificate     /path/to/cert.crt;
          # ssl_certificate_key /path/to/key.key;
          # ssl_protocols       TLSv1.2 TLSv1.3;
        }
      }
      
    • 启动:sudo systemctl start nginx && sudo systemctl enable nginx
    • 说明:Nginx Stream 工作在四层,适合 FTP/FTPS;若需 SSL 终止,在负载均衡器配置证书,后端可使用明文或继续 FTPS(注意证书一致性与信任链)。

三、内核级 LVS + Keepalived 方案

  • 架构要点
    • 使用 **LVS(IPVS)**做四层调度,配合 Keepalived 提供 VRRP VIP 与健康检查,实现高可用与高性能。
    • 常见模式:**DR(Direct Routing)**性能最佳,需在同一二层网段;NAT 配置简单但负载均衡器易成为瓶颈;TUN 适合跨机房。
  • Keepalived 示例(DR 模式,VIP:192.168.1.100)
    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
      nat_mask 255.255.255.0
      persistence_timeout 50
      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 }
      }
      real_server 192.168.1.103 21 {
        weight 1
        TCP_CHECK { connect_timeout 10; connect_port 21 }
      }
    }
    
    • 启动:sudo systemctl start keepalived && sudo systemctl enable keepalived
    • 说明:LVS/DR 场景中,后端服务器需配置 VIP 回环并关闭 ARP 响应(arp_ignore/arp_announce),数据通道由客户端与后端直连,控制通道由 LVS 转发。

四、被动模式与防火墙要点

  • 主动 vs 被动 FTP
    • 主动模式:客户端在 20 端口发起数据连接至服务器的 随机高位端口;负载均衡器需允许该返回路径或改为被动模式。
    • 被动模式(推荐):服务器在 控制通道返回 被动端口范围,客户端主动连回;负载均衡器需对被动端口范围放行并做端口转发或让客户端直连后端。
  • 端口与协议放行清单
    • 控制通道:TCP 21(FTP/FTPS)
    • 数据通道:
      • 主动模式:服务器源端口 20 → 客户端高位端口
      • 被动模式:服务器被动端口范围(如 50000–51000)→ 客户端任意高位端口
    • 若使用 FTPS,数据与控制均为 TLS 加密,但端口规则不变;仅加密在 21 端口完成握手与传输。

五、安全与运维实践

  • 证书与一致性:多台后端 FTP/FTPS 服务器应使用一致的 SSL/TLS 证书与协议/套件配置,避免客户端切换节点时报错。
  • 健康检查与摘除:为后端配置 TCP/应用层健康检查,异常节点自动摘除,恢复后自动回切。
  • 会话保持:根据业务选择 源地址哈希持久化超时,避免同一用户会话被频繁切换导致中断(如 FTP 登录状态、断点续传)。
  • 日志与监控:开启 连接/错误日志指标监控(连接数、队列、后端健康),结合告警策略保障稳定性。
  • 安全加固:限制管理口访问、启用 TLS 1.2+、禁用明文;必要时在边界防火墙做 速率限制DDoS 防护

0