需求场景如下: A 是数据源,不断轮换生产体积巨大的文件(每个几个 G 以上),然后 FTP 传到接口机 B , B 立即同时将文件转送到服务器 C 进行处理(单向增量连续上传),服务器 C 只能部署 FTP 协议和开放 FTP 端口,无 RSYNC 。采用什么方法和技术能够高效率地解决转发的问题,确保 B 不会存在瓶颈。这个场景有个特点就是文件巨大并且希望在 A 上传 B 文件还未完的同时 B 就能开始往 C 同步。本人研究过的方法有 RSYNC+INOTIFY/LFTP(Mirror)/WPUT/Duplicity 等.
以下分别说说各种方法的问题:
![]() | 1 manhere 2016-08-29 23:23:46 +08:00 via iPhone btsync ,可是你的 C 限定了 FTP |
2 blisdom OP https://github.com/joedicastro/lftp-mirror 刚刚发现这个,可惜看上去还是无法解决问题本质上还是用 lftp 。不过作者在文档末尾对这类问题总结得挺好 |
![]() | 4 also24 2016-08-29 23:47:08 +08:00 所以其实就是想办法把 C 的 21 端口映射到 B 上? |
![]() | 5 also24 2016-08-29 23:49:32 +08:00 不太清楚我有没有理解错,看描述感觉…… B 上开 iptables 把本机的 21 端口上的流量全部转发到 C 上似乎就可以? |
![]() | 6 ooonme 2016-08-30 14:37:05 +08:00 via iPhone linux 没学好啊…管道不就是干这个的,另外告诉你个命令 nc ,只要开支持 socket 都 ok ,运维级就 ok 生产级别考虑 flme |
![]() | 7 ooonme 2016-08-30 14:38:04 +08:00 via iPhone 你上面那些都是应用层协议, ftp 是不支持断点的 |
8 JoeyChan 2016-08-30 15:48:02 +08:00 B 一定要保留传输的文件吗?如果不需要的话,可在 B 上采用 haproxy 中转直接转发 C 的 FTP ,指定 FTP 的被动传输端口范围即可。 |
9 blisdom OP thx all above , B 需要缓存一段时间的传输文件。所以没有采用端口转发,昨晚研究了下用 socat 做端口转发,同时分流出文件,但目前还试验未有成功,期待有更好的办法。 |
10 blisdom OP @ooonme nc 只能端口转发无法实现缓冲;两端是 ftp,flume 貌似 sink 出来的不再是和原文件一样的吧 |
11 firefox12 2016-09-01 13:57:06 +08:00 这种东西 ftp 直接做就可以, ftp 可以续传的。 我没看到任何瓶颈可能存在的地方,如果是 1000M 网络,那么每秒接近 112M 的速度, 你需要把硬盘换成 ssd , 10 分钟可以穿 60G 你觉得可能的瓶颈在那里? |