我将构建大型文件服务器,并需要堆栈溢出社区对文件系统选择的建议(linux)。
文件服务器将通过Nginx提供1-2 2GB大小的静态文件(每次请求大多不同),同时保持对磁盘的适度写入(RAID5 SATA/7200磁盘大容量)。写入与读取的比率约为1: 5-10,每秒钟写入1个字节,读取5-10个字节。对我来说最重要的是读取性能,我可以忍受较慢的写入。
哪种Linux文件系统是完成此任务的最佳解决方案?为什么:)谢谢!
发布于 2012-06-29 13:48:35
要为大量服务内容提供最佳结果,还需要对其他内容进行调优。请看下面的Nginx core developer's comment:
sendfile关闭;
output_buffers 1 512k
aio on;指令512;
其他建议:
启用data_writeback和noatime装载选项
发布于 2012-08-28 15:36:05
我实现了每个“真实”磁盘(主轴) 80MB/s的“随机读取”性能。这是我的发现。
因此,首先确定需要向用户推送多少流量,以及每台服务器需要多少存储空间。
您可以跳过下面给出的磁盘设置建议,因为您已经有了RAID5设置。
以具有3* 2TB磁盘的专用1Gbps带宽服务器为例。让第一个磁盘专用于操作系统和临时管理程序。对于其他两个磁盘,您可以创建一个软件raid (对我来说,它比板载硬件raid更好)。否则,您需要在独立的磁盘上平均划分文件。我的想法是让两个磁盘平均分担读/写负载。软件raid-0是最佳选择。
Nginx Conf使用nginx有两种方法可以获得高水平的性能。
aio on;
指令512;output_buffers 18M;
“这个选项需要你有大量的内存”大约12-16 io的内存是needed.
output_buffers 1~ 2m;
“确保将软件raid挂载的预读时间设置为4-6MB”blockdev dev --setra 4096 /dev/md0 (或独立磁盘挂载)
此设置将以最佳方式使用系统文件缓存,并且需要的内存要少得多。大约需要8 8GB的内存。
常见备注:
您可能还想使用带宽节流来在可用带宽上启用100秒的连接。每个下载连接将使用4MB的活动ram。
limit_rate_after 2m;
limit_rate 100k;
上述两种解决方案都可以很容易地扩展到3个磁盘服务器上的1k+并发用户。假设您有1Gbps的带宽,并且每个连接都被限制在1Mb/ps,那么需要额外的设置来优化磁盘写入,而不会对读取造成太多影响。
将所有文件上传到挂载的主操作系统磁盘上,比如/tmpuploads。这将确保在进行繁重读取时不会出现间歇性干扰。然后在oflag=direct中使用"dd“命令从/tmpuploads中移动文件。就像这样
dd if=/tmpuploads/<myfile> of=/raidmount/uploads/<myfile> oflag=direct bs=8196k
发布于 2012-06-29 05:41:01
非常大的文件往往不太依赖于您使用的文件系统,即现代文件系统(即不是FAT!)很好地将它们分配到大的连续存储块中,从而最大限度地减少查找延迟。在小文件性能、空间不足情况下的碎片抵抗力、并发性等方面,你往往会看到它们之间的差异。存储大文件是一个相对容易的问题,我怀疑您是否会看到明显的差异。
但一如既往:如果你真的关心,基准测试。关于文件系统性能没有简单的答案。
https://stackoverflow.com/questions/11250798
复制相似问题