V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
blisdom
V2EX  ›  程序员

巨型文件 FTP 连续增量同步方法讨论

  •  
  •   blisdom · 2016-08-29 23:19:49 +08:00 · 4376 次点击
    这是一个创建于 2768 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求场景如下: A 是数据源,不断轮换生产体积巨大的文件(每个几个 G 以上),然后 FTP 传到接口机 B , B 立即同时将文件转送到服务器 C 进行处理(单向增量连续上传),服务器 C 只能部署 FTP 协议和开放 FTP 端口,无 RSYNC 。采用什么方法和技术能够高效率地解决转发的问题,确保 B 不会存在瓶颈。这个场景有个特点就是文件巨大并且希望在 A 上传 B 文件还未完的同时 B 就能开始往 C 同步。本人研究过的方法有 RSYNC+INOTIFY/LFTP(Mirror)/WPUT/Duplicity 等.

    以下分别说说各种方法的问题:

    1. Rsync :如果 C 端允许部署应该是比较科学合理的手段,可惜很多场景下不允许。
    2. Lftp :B 确实可以在 A 上传文件的往 C 同步,可是每执行 mirror 一次,都是重头开始上传过未完得文件,无法续传。一旦 B=》 C 的速率较快提前传完,那么下一次执行时就会又重新上传过,出现流量冗余,故无法采纳。
    3. Wput :和 Wget 类似的工具,支持续传到 C (这点比 Lftp mirror 好),而且速度教快, B=》 C 的速率较快提前传完, B 上的 wput 会不断再追 A 来的文件,直到缓冲区溢出中断,无法等待文件增长一段长度再追,故也难以接纳。
    4. Duplicity :在找办法的过程中发现又许多朋友说这个好,但试了下这个只是针对备份,不是同步源文件。直接忽略了。 希望有大牛分享下思路。谢谢
    11 条回复    2016-09-01 13:57:06 +08:00
    manhere
        1
    manhere  
       2016-08-29 23:23:46 +08:00 via iPhone
    btsync ,可是你的 C 限定了 FTP
    blisdom
        2
    blisdom  
    OP
       2016-08-29 23:39:42 +08:00
    https://github.com/joedicastro/lftp-mirror 刚刚发现这个,可惜看上去还是无法解决问题本质上还是用 lftp 。不过作者在文档末尾对这类问题总结得挺好
    blisdom
        3
    blisdom  
    OP
       2016-08-29 23:40:16 +08:00
    @manhere 谢谢,环境限制只能用 FTP
    also24
        4
    also24  
       2016-08-29 23:47:08 +08:00
    所以其实就是想办法把 C 的 21 端口映射到 B 上?
    also24
        5
    also24  
       2016-08-29 23:49:32 +08:00
    不太清楚我有没有理解错,看描述感觉……

    B 上开 iptables 把本机的 21 端口上的流量全部转发到 C 上似乎就可以?
    ooonme
        6
    ooonme  
       2016-08-30 14:37:05 +08:00 via iPhone
    linux 没学好啊…管道不就是干这个的,另外告诉你个命令 nc ,只要开支持 socket 都 ok ,运维级就 ok


    生产级别考虑 flume
    ooonme
        7
    ooonme  
       2016-08-30 14:38:04 +08:00 via iPhone
    你上面那些都是应用层协议, ftp 是不支持断点的
    JoeyChan
        8
    JoeyChan  
       2016-08-30 15:48:02 +08:00
    B 一定要保留传输的文件吗?如果不需要的话,可在 B 上采用 haproxy 中转直接转发 C 的 FTP ,指定 FTP 的被动传输端口范围即可。
    blisdom
        9
    blisdom  
    OP
       2016-08-30 21:24:21 +08:00
    thx all above , B 需要缓存一段时间的传输文件。所以没有采用端口转发,昨晚研究了下用 socat 做端口转发,同时分流出文件,但目前还试验未有成功,期待有更好的办法。
    blisdom
        10
    blisdom  
    OP
       2016-08-31 08:53:03 +08:00 via iPhone
    @ooonme nc 只能端口转发无法实现缓冲;两端是 ftp,flume 貌似 sink 出来的不再是和原文件一样的吧
    firefox12
        11
    firefox12  
       2016-09-01 13:57:06 +08:00
    这种东西 ftp 直接做就可以, ftp 可以续传的。 我没看到任何瓶颈可能存在的地方,如果是 1000M 网络,那么每秒接近 112M 的速度, 你需要把硬盘换成 ssd , 10 分钟可以穿 60G 你觉得可能的瓶颈在那里?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1015 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 19:31 · PVG 03:31 · LAX 12:31 · JFK 15:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.