文件服务器将通过Nginx提供1-2GB大小的静态文件(大多数不同于每个请求),在不断适度写入磁盘(大量RAID5 SATA / 7200磁盘)下.写入读取比约为1:5-10,对于每秒写入的每1字节,读取5-10.
对我来说最重要的是读取性能,我可以忍受较慢的写入.
解决方法
以下是我的发现.
因此,首先要确定向用户推送需要多少流量以及每台服务器需要多少存储空间.
由于您已经安装了RAID5,因此可以跳过下面给出的磁盘设置建议.
Lets take an example of a dedicated 1Gbps bandwidth server with 3 * 2TB disks.
Keep first disk dedicated to OS and tmp. For other 2 disks you may create a software raid (For me,it worked better than on-board hardware raid). Else,you need to divide your files equally on independent disks. Idea is to keep both disk share read/write load equally. Software raid-0 is best option.
Nginx Conf
使用Nginx有两种方法可以实现高水平的性能.
>使用directio
aio on;
directio 512;
output_buffers 1 8m;
“这个选项需要你有大量的公羊”
需要大约12-16GB的内存.
> userland io
output_buffers 1 2m;
“确保已将预读设置为4-6MB以进行软件raid安装”
blockdev –setra 4096 / dev / md0(或独立磁盘安装)
此设置将最佳地使用系统文件缓存,并且需要更少的内存.
需要大约8GB的内存.
常见说明:
>保持“sendfile off;”
you may also like to use bandwidth throttle to enable 100s of connections over available bandwidth. Each download connection will use 4MB of active ram.
limit_rate_after 2m; limit_rate 100k;
以上两种解决方案都可以轻松扩展到3个磁盘服务器上的1k并发用户.
假设您有1Gbps带宽,并且每个连接都以1Mb / ps的速率进行限制
需要额外的设置来优化磁盘写入而不会影响读取.
将所有上传到mount上的主os磁盘上说/ tmpuploads.这将确保在重读时不会出现间歇性干扰.然后使用带有oflag = direct的“dd”命令从/ tmpuploads移动文件.就像是
dd if=/tmpuploads/<myfile> of=/raidmount/uploads/<myfile> oflag=direct bs=8196k