温馨提示×

centos vsftp如何进行负载均衡

小樊
45
2025-11-21 18:39:15
栏目: 云计算

CentOS 上实现 vsftpd 负载均衡的可落地方案

架构选型与总体思路

  • CentOS 环境中,vsftpd 本身不提供负载均衡能力,通常通过前置 四层负载均衡器LVS 集群来分发控制连接(端口 21)与数据连接(主动模式端口 20、被动模式数据端口区间)。可选方案包括:
    • 方案A:HAProxy(TCP 转发),简单稳定,适合中小规模与快速上线。
    • 方案B:Nginx Stream 模块(TCP 转发),需确保编译时包含 –with-stream
    • 方案C:LVS(IPVS)+ Keepalived,适合更高并发与高可用场景,支持 NAT/DR 等模式。

方案一 HAProxy TCP 转发

  • 部署与配置要点:
    • 安装:sudo yum install haproxy -y
    • 配置 /etc/haproxy/haproxy.cfg(示例为轮询):
      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
      
    • 启动:sudo systemctl start haproxy && sudo systemctl enable haproxy
    • 防火墙放行:sudo firewall-cmd --permanent --add-service=ftp && sudo firewall-cmd --reload
    • 说明:HAProxy 对 FTP 的控制通道做 TCP 转发,适用于大多数场景。

方案二 Nginx Stream 四层转发

  • 部署与配置要点:
    • 安装:sudo yum install nginx -y
    • 确认模块:nginx -V 需包含 –with-stream;若未包含,需重新编译加入该模块后再部署。
    • 配置 /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/ftp_stream.conf:
      stream {
          upstream ftp_servers {
              server 192.168.1.101:21;
              server 192.168.1.102:21;
          }
          server {
              listen 21;
              proxy_pass ftp_servers;
          }
      }
      
    • 启动:sudo systemctl start nginx && sudo systemctl enable nginx
    • 说明:Nginx Stream 在四层工作,适合做 FTP 的透明转发与简单负载均衡。

方案三 LVS IPVS + Keepalived(高可用与高性能)

  • 部署与配置要点(以 NAT 模式为例,便于理解):
    • 开启转发:echo 1 > /proc/sys/net/ipv4/ip_forward
    • 为 FTP 控制与数据端口打标记(示例数据端口范围 50000–50010):
      iptables -t mangle -A PREROUTING -p tcp --dport 20:21   -j MARK --set-mark 99
      iptables -t mangle -A PREROUTING -p tcp --dport 50000:50010 -j MARK --set-mark 99
      
    • 配置 IPVS 规则(使用标记 99,调度算法 rr,会话保持 400 秒):
      ipvsadm -A -f 99 -s rr -p 400
      ipvsadm -a -f 99 -r 192.168.2.49 -m -w 2
      ipvsadm -a -f 99 -r 192.168.2.59 -m -w 2
      
    • 后端 realserver 设置默认网关指向 LVS 调度器(NAT 回程要求)。
    • 在 vsftpd 服务端开启被动模式并限定端口范围(示例与上面一致):
      pasv_enable=YES
      pasv_min_port=50000
      pasv_max_port=50010
      pasv_address=<VIP 或 公网出口地址>
      
    • 高可用:使用 Keepalived 管理 VIP 与 IPVS 规则,实现主备自动切换。

vsftpd 与系统关键配置

  • 基础配置建议(/etc/vsftpd/vsftpd.conf,两台后端保持一致):
    listen=YES
    listen_ipv6=NO
    anonymous_enable=NO
    local_enable=YES
    write_enable=YES
    chroot_local_user=YES
    allow_writeable_chroot=YES
    xferlog_enable=YES
    connect_from_port_20=YES
    
  • 被动模式端口与地址:
    • 设置数据端口区间(如 50000–50010),并在负载均衡器为被动模式指定对外 VIP(pasv_address),确保数据连接回到客户端。
  • 安全与合规:
    • SELinux:setsebool -P ftp_home_dir on;必要时调整目录上下文。
    • 防火墙:放行 21/tcp(以及 990/tcp 若启用 FTPS),或放行自定义被动端口区间。
    • FTPS(可选):启用 ssl_enable、force_local_data_ssl、force_local_logins_ssl,并配置证书路径。

验证与运维要点

  • 功能验证:
    • 连接测试:ftp <负载均衡器IP>;必要时在客户端切换被动/主动模式验证传输。
    • 日志排查:tail -f /var/log/vsftpd/vsftpd.log 与 /var/log/haproxy.log(或 Nginx 日志),观察登录、传输与调度情况。
  • 会话粘滞与一致性:
    • FTP 控制通道建立后,数据通道由客户端直连后端数据端口。为减少跨后端导致的会话中断,建议开启 IPVS 会话保持(如示例中的 -p 400),或在业务侧尽量使用“同一连接内完成上传/下载”。
  • 高可用与扩展:
    • 生产环境建议前置 Keepalived VIP,避免单点;后端横向扩容时同步更新负载均衡器后端池与健康检查。

0