需求场景如下: 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
生产级别考虑 flume |
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 你觉得可能的瓶颈在那里?
|