LVS实现FTP的上传流量的负载均衡

工作中遇到上百台机器向一个集群环境(大约10台机器)上传文件的场景,想到了使用LVS来做ftp服务器的负载均衡。

但是NAT模式下请求、响应报文都要经过Director Server,在高负载的场景下Director Server的就会成为瓶颈。而虽然DR模式和TUN模式下响应报文是不经过Director Server的,但是对应大数据量的文件上传任务来说主要,瓶颈主要在于请求报文带来的大流量,怎么能将请求报文中的大流量分散到集群各节点?

想到使用FTP被动模式下的数据链路ip地址跳转功能,对于vsftp来说对应参数pasv_address。将该地址配置为LVS集群的real server的ip地址(ftp服务器的本机地址)。这样ftp客户端通过21端口经过LVS的Director Server连通控制链路后,会使用real server的ip地址连通数据链路。

因为数据链路不经过LVS的Director Server,而是直接通过数据链路链接各个集群的节点的FTP服务器,所以不论执行上传下载任务都可以实现负载均衡的目的。

注意点:因为vsftp对于数据链接和控制链路中报文中目的IP地址不一致的情况校验,会直接向FTP客户端返回RST消息终止数据链路的连接,对这种情况可以通过iptables修改数据链路中到达real server的报文中的目的IP为Director Server,以实现躲避校验的目的:

            iptables -t nat -A PREROUTING -p tcp -dport ${pasv_min_port}:${pasv_max_port} -j DNAT --to_destination ${VIP}

原文地址:http://blog.51cto.com/11091005/2115025

时间: 2024-10-05 01:59:36

LVS实现FTP的上传流量的负载均衡的相关文章

使用递归方法实现,向FTP服务器上传整个目录结构、从FTP服务器下载整个目录到本地的功能

我最近由于在做一个关于FTP文件上传和下载的功能时候,发现Apache FTP jar包没有提供对整个目录结构的上传和下载功能,只能非目录类型的文件进行上传和下载操作,后来我查阅很多网上的实现方法,再结合自己的理解.以及符合自己的需求,完成了我自己的apache FTP jar包补充类. 上面是背景,基本叙述完毕,下面开始介绍实现方法和代码. 一.环境搭建: 1.使用的FileZilla Server开源免费软件,安装过后建立的本地FTP服务器. 2.使用的apache上下载FTP工具包,引用到

FTP文件上传与下载

实现FTP文件上传与下载可以通过以下两种种方式实现,分别为:1.通过JDK自带的API实现:2.通过Apache提供的API是实现. 第一种方式 [java] view plaincopy package com.cloudpower.util; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import sun.n

2.使用iptables监控上传流量

我们可以通过在网关上添加iptables规则来监控某台主机的上传或下载流量,以下是具体步骤: 添加iptables规则: /sbin/iptables -I INPUT -s 10.0.5.110 创建数据库进行存储:只需一列, mysql> desc proxy; +-------+----------+------+-----+---------+-------+ | Field | Type     | Null | Key | Default | Extra | +-------+---

Quartz石英调度实现ftp文件上传

Quartz石英调度实现ftp文件上传 实现一个每月1号00点01分自动生成的文件,通过ftp传到另一台主机上 1.先创建一个job任务类FtpUploadFileJobTask import java.io.ByteArrayInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import org.apache.commons.net

****使用ftp软件上传下载php文件时换行符丢失bug

在使用ftp软件上传下载php源文件时,我们偶尔会发现在本地windows下notepad++编辑器写好的php文件,在使用ftp上传到linux服务器后,php文件的换行符全部丢失了,导致php文件无法正常运行. 这个时候,再次通过ftp软件把刚才上传的php文件下载到本地windows,用notepad++编辑器打开后,发现php源代码变成了一行,换行丢失. 发生这种情况的原因是什么呢?飘易就以一句话概括下:    由于linux下换行是\n,而windows下换行是\r\n,当ftp软件在

windows、linux通过ftp从ftp服务器上传和下载

最近需要用到文件的上传和下载,查看我们使用的系统,发现有一个进程为t_ftpd,怀疑其为一个ftp的守护进程,于是想要用ftp的方式实现. 在windows上使用bat脚本的方式实现: 首先写一个bat脚本: download.bat @echo off ftp -s:E:\Sylixos\SylixOS_Qt\build-TCWareWigget-Desktop_Qt_5_7_1_MinGW_32bit-Debug\debug\ftp\ftp.txt 这样就会调用ftp.txt文件 ftp.t

ftp文件上传,Java上传

package com.gx.ftp; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.UnsupportedEncodingException; import org.apache.commons.net.ftp.FTP;

shell-scripts,FTP自动化上传脚本,可循环,直到上传成功为止

脚本功能: 通过定时计划任务运行该脚本,定期上传指定文件. 之前写了这个脚本,有时候网络不稳定的时候,总是上传失败.写了循环去传,但是苦于不知道怎样去获取FTP返回的错误状态,后来度娘到可以把ftp的运行错误日志记录写到文件中,因这个点来源于分享.因此,现在把整个脚本给分享出来,提供给大家一个思路. 通过检测这个错误日记录,并返回的状态,去循环上传指定文件,并追加脚本运行日志记录,以便于跟踪脚本运行情况. #!/bin/bash #upload gonet log to ftp_server #

C#通过FTP账号上传、修改、删除文件 FTPClient

下面类文件中,主要做的工作是:从ftp服务器上下载文件把本地文件替换.添加.或删除功能,在替换本地文件时会先备份一下本地的文件,若整个操作都完成了就会发出commit命令,表示全部替换成功.若中间操作有失败的,则把本地文件回滚到替换前的样子. 描述: SynchroDataTest.cs(Winform页面类)中的addfiles数组代表要下载到本地的文件(有可能是添加或替换),delfiles数组是要把本地的这些文件删除的数组 string[] addfiles = new string[]