我需要build立一个基本上具有非常大容量的SFTP服务器。 我需要给我们的一个合作伙伴的SFTPlogin细节到一个服务器,他们将上传数百万个文件,总计几百太字节。 然后我会select性的,很less阅读这些文件。 这是唯一的实际要求,任何技术select都是抢手的。
最简单的方法是让某些EC2实例运行SFTP服务器,使得上传的任何内容直接发送到S3,或者某种进程在上传时发现新文件,将它们复制到S3,并从磁盘上删除它们。
这是最好的方法吗? 有没有其他的方式来获得本质上具有“无限和不断增长的磁盘空间”的服务器?
谢谢你的帮助! 丹尼尔
我在Stack Overflow上回答了同样的问题 。
s3fs确实是一个合理的解决scheme,在我的情况下,尽pipe存在理论上的或潜在的问题,但我还是将它与proftpd结合在一起,并取得了优异的成绩。
当时我写了答案,我只是为我的一个咨询客户设置了这个…但是从那以后,我也开始喝我自己的kool-aid,并在我的日常工作中用于生产。 我们公司每天都在我的sftp服务器上交换上传和下载文件的数据,sftp服务器将所有内容直接存储在S3上。 作为奖励,我的报表导出系统 – 将excel电子表格直接写入S3 – 可以通过将报表直接放到ftp服务器的存储桶中,并使用适当的元数据来显示uid,gid和每个文件的模式。 (s3fs使用x-amz-meta-uid,-gid和-mode标题来模拟文件系统权限)。 当客户端login到服务器时,报告文件就在那里。
我认为理想的解决scheme可能会成为S3网关服务的一部分,但是我仍然没有devise一个,因为这个解决scheme工作得很好,当然还有一些注意事项:
并非所有s3fs的默认值都是理智的。 您可能需要指定这些选项:
-o enable_noobj_cache # s3fs has a huge performance hit for large directories without this enabled -o stat_cache_expire=30 # the ideal time will vary according to your usage -o enable_content_md5 # it's beyond me why this safety check is disabled by default
最好使用美国标准以外的地区,因为这是唯一不能提供新对象的一次写后一致性的地区。 (或者,如果您需要使用美国标准,则可以使用us-east-1地区几乎没有logging的主机名your-bucket.s3-external-1.amazonaws.com
来防止您的请求被地理路由,这可以提高一致性。)
我在桶上启用了对象版本控制,这是s3fs完全不知道的。 这样做的好处是,即使一个文件应该被“stomped”,我总是可以去桶版本恢复“覆盖”的文件。 S3中的对象版本devise非常出色,S3版本的客户端不会被禁用或混淆,因为如果您不进行版本控制的REST调用,S3返回的响应与客户端兼容没有版本的概念。
还要注意, 将数据传输到 S3是免费的数据传输费用。 您只支付每个请求的价格。 将数据从S3传送到区域内的EC2也没有数据传输费用。 只有当您将S3从互联网转移到Cloudfront或转移到您支付转账费用的其他AWS区域时。 如果您想使用价格较低的减less冗余存储, -o use_rrs
支持与-o use_rrs
。
作为一个有趣的开销,当你看到256TB的空闲空间(和0使用的时候,你总会感到温暖的模糊感觉,因为S3是一个对象存储,而不是文件系统)。
$ df -h Filesystem Size Used Avail Use% Mounted on /dev/xvda1 7.9G 1.4G 6.2G 18% / s3fs 256T 0 256T 0% /srv/s3fs/example-bucket
当然,你可以在任何地方安装水桶。 我只是碰巧在/ srv / s3fs中。
查看AWS Marketplace上的SFTP网关 。
我们遇到s3fs的可靠性问题,所以我们专门为此开发了一个定制的解决scheme。 我们已经在生产中使用了它几年没有问题,最近已经发布到AWS Marketplace。
正如@Michael已经回答的那样 ,只要使用s3fs文件系统(或类似的)将一个桶装载到一台Linux服务器(Amazon EC2)上,并使用服务器内置的SFTP服务器来访问该存储桶。
这里是基本的说明:
s3fs
access-key-id:secret-access-key
的forms添加到/etc/passwd-s3fs
将一个存储桶安装条目添加到fstab
:
<bucket> /mnt/<bucket> fuse.s3fs rw,nosuid,nodev,allow_other 0 0
有关详细信息,请参阅我的指南设置对Amazon S3的SFTP访问 。