我要建大型文件服务器,并且需要堆栈溢出社区咨询文件系统选择(Linux版)。
文件服务器将服务1-2GB大小的静态文件的Nginx通过(主要是每个请求不同)下,在恒定中等写入磁盘(RAID5 SATA / 7200磁盘大规模)。 写入读比为约1:5-10,对于每秒写入每1个字节,5-10被读取。 最重要的我是读性能,我可以写入速度较慢生活。
什么Linux的文件系统将是这个任务的最佳解决方案? 为什么:)谢谢!
我要建大型文件服务器,并且需要堆栈溢出社区咨询文件系统选择(Linux版)。
文件服务器将服务1-2GB大小的静态文件的Nginx通过(主要是每个请求不同)下,在恒定中等写入磁盘(RAID5 SATA / 7200磁盘大规模)。 写入读比为约1:5-10,对于每秒写入每1个字节,5-10被读取。 最重要的我是读性能,我可以写入速度较慢生活。
什么Linux的文件系统将是这个任务的最佳解决方案? 为什么:)谢谢!
为用户提供服务重内容最好的结果,有调别的东西。 请看看Nginx的核心开发者的评论如下:
关闭sendfile的 ,这是由于没有能力控制预读(从磁盘读取,因此块)工作在linux下这样的工作量坏。
SENDFILE关闭;
使用大输出缓冲器
output_buffers 1个512K
尝试使用AIO,以确保更好的磁盘并发性(和linux下的注意,它需要的directio为好),即是这样的
AIO上; DIRECTIO 512;
其它建议:
检查文件系统交换,不使用
文件系统 - EXT4,XFS。 好让data_writeback和noatime挂载选项
我实现了每个“真正的”磁盘(主轴)“随机读取”性能80MB /秒。 这里是我的发现。
因此,首先决定你需要多少流量向下推至用户,有多少存储你每台服务器需要。
您可以跳过下面给出既然你已经有了一个RAID5安装盘安装建议。
让我们用3个* 2 TB磁盘专用1Gbps的带宽服务器的一个例子。 保持第一盘致力于OS和TMP。 对于其他2个磁盘您可以创建一个软件RAID(对于我来说,它的工作比板载硬件RAID更好)。 否则,你需要在独立磁盘平分你的文件。 想法是保留两个磁盘共享的读/写负载平分。 软件RAID-0是最好的选择。
Nginx的CONF有实现的使用nginx的性能较高水平两个方面。
使用的directio
AIO上;
DIRECTIO 512; output_buffers 1个8米;
“这个选项会要求你有公羊良好的金额”大约需要RAM的12-16GB。
用户级IO
output_buffers 1个2M;
“确保您已设置预读以4-6MB软件RAID安装” blockdev看看-setra 4096的/ dev / md0的(或独立磁盘安装)
此设置将优化使用系统文件缓存,并需要更少的内存。 大约需要RAM的8GB。
常见的注意事项:
你可能还喜欢使用带宽节流,以便能够在可用带宽连接的100S。 每个下载的连接将使用活动的公羊4MB。
limit_rate_after 2m;
limit_rate 100k;
上述两种溶液的比例将容易到1 k 3磁盘服务器上同时+用户。 假设你有1Gbps的带宽,每个连接在1Mb的/ ps的进行节流还有就是要优化磁盘需要额外的设置写入,而不会影响读取得多。
使所有上传到主操作系统磁盘上的挂载说/ tmpuploads。 这将确保没有间歇的干扰而沉重的读取,但事情。 然后使用从移动/ tmpuploads文件用的oflag =直接“DD”命令。 就像是
dd if=/tmpuploads/<myfile> of=/raidmount/uploads/<myfile> oflag=direct bs=8196k
非常大的文件往往不是非常依赖于您所使用的文件系统,现代文件系统(即不胖!)做存储的大型连续块分配它们,从而减少寻道延迟的一个很好的工作。 在哪里你会看到它们之间的差异是小文件的性能,在外面的空间的情况下,并发等分裂性...存储大文件是比较容易的问题,我怀疑你会看到可测量的差异。
然而,总是:如果你真的关心,标杆。 大约有文件系统的性能没有简单的答案。