最好的文件系统使用nginx服务1GB文件,在中等写入,阅读性能明智?

我要构build大文件服务器,并且需要堆栈溢出社区对文件系统select(linux)的build议。

文件服务器将通过Nginx在恒定的适度写入磁盘(RAID5 SATA / 7200磁盘大容量)的情况下提供1-2GB大小的静态文件(大部分与每个请求不同)。 写入读取比率约为1:5-10,每写入1个字节每秒,读取5-10个。 对我来说最重要的是读取性能,我可以忍受较慢的写入。

什么Linux文件系统将是这个任务的最佳解决scheme? 为什么:)谢谢!

Solutions Collecting From Web of "最好的文件系统使用nginx服务1GB文件,在中等写入,阅读性能明智?"

每“真实”磁盘(主轴)达到80MB / s的“随机读取”性能。 这是我的发现。

因此,首先要确定需要向用户推送多少流量以及每台服务器需要多少存储空间。

您可以跳过下面给出的磁盘设置建议,因为您已经有RAID5设置。

让我们举一个带有3 * 2TB磁盘的专用1Gbps带宽服务器的例子。 保持第一个磁盘专用于操作系统和tmp。 对于其他2个磁盘,你可以创建一个软件RAID(对我来说,它比板载硬件RAID更好)。 否则,您需要将您的文件平分在独立的磁盘上。 想法是保持两个磁盘共享读/写负载平等。 软件raid-0是最好的选择。

Nginx Conf有两种方法可以使用nginx来实现高性能。

  1. 使用directio

    aio;
    方向512; output_buffers 1 8m;

    “这个选项将需要你有大量的RAM”需要大约12-16GB的RAM。

  2. 用户区io

    output_buffers 1 2m;

    “确保你已经把软件RAID安装的预读设置为4-6MB”blockdev –setra 4096 / dev / md0(或独立的磁盘安装)

    此设置将优化使用系统文件缓存,并需要更少的内存。 大约需要8GB的内存。

常见说明:

  • 保持“sendfile关闭”

您也可以使用带宽限制来启用可用带宽上的100多个连接。 每个下载连接将使用4MB的活动RAM。

limit_rate_after 2m; limit_rate 100k; 

上述两种解决方案都可以轻松扩展到3盘服务器上的1k +同时用户。 假设您拥有1Gbps的带宽,并且每个连接都以1Mb / ps的速度进行节流,还需要额外的设置来优化磁盘写入,而不会影响读取。

使所有上传到主要的操作系统磁盘挂载说/ tmpuploads。 这将确保没有间歇性的干扰,而繁重的阅读正在进行。 然后使用“dd”命令将文件从/ tmpuploads移动到withlag = direct。 就像是

 dd if=/tmpuploads/<myfile> of=/raidmount/uploads/<myfile> oflag=direct bs=8196k 

为了提供最好的结果与服务重量内容,还有别的调整。 请看下面的Nginx核心开发者的评论 :

  1. 关闭sendfile ,它在Linux下的这种工作负载上工作不好,因为没有能力控制readahead(从而阻塞从磁盘读取)。

    发送文件关闭;

  2. 使用大输出缓冲区

    output_buffers 1 512k

  3. 尝试使用aio来确保更好的磁盘并发性(并注意在Linux下它也需要directio),即类似的东西

    aio; 方向512;

其他建议:

  1. 检查文件系统交换没有使用

  2. 文件系统 – ext4,xfs。 很好启用data_writeback和noatime挂载选项

非常大的文件往往不是非常依赖于你使用的文件系统,现代文件系统(即不是FAT!)在分配大量连续的存储块方面做得非常好,从而最大限度地减少了查找延迟。 如果你倾向于看到它们之间的差异是小文件性能,在空间不足的情况下的分裂阻力,并发性等等。存储大文件是一个相对容易的问题,我怀疑你会看到可衡量的差异。

但一如既往:如果你真的关心,基准。 没有关于文件系统性能的简单答案。