用nginx通过NFS提供静态文件?

我有一个在nginx服务器上每秒获得约7k个请求的网站。 这个服务器既能处理重写到Apache服务器,也能直接处理静态文件,图像等。 那里有大约5k个请求的静态文件是最大的部分。

随着体系结构升级,我想使用一个中央文件服务器,通过NFS导出包含这些静态文件的目录。 这些文件将没有写入权限,所以目录可以在nginx机器上以只读方式挂载。 我主要关心的是:

NFS足够快吗? NFS可以处理多less个请求是有限制的吗? 这样做有什么“必须”的select吗?

奖励:除了NFS以外,还有其他的select吗?

谢谢!

通过设置一个中央NFS服务器,可以在devise中引入单点故障。 这本身应该是一个交易断路器。 如果不是这样的话,NFS可以足够快的完成这样的负载。 关键因素将有足够的内存来caching文件,低延迟互连(Gig-E或更好)和调优(比以前更less)。

您还应该强烈考虑使用rsync或类似的工具在每个Web服务器上保留静态文件更新的本地副本。 另一个select可能是一个SAN或冗余的NFS服务器解决scheme(这两者将比rsync想法复杂和昂贵得多)。

速度取决于许多因素:

  • 你的服务器如何连接到NFS目标? 一个双端口SAS磁盘可以使用6Gbit / s的传输速度。 请记住,如果你打算使用1Gig以太网(你可以减去20%的TCP开销)。
  • NFS服务器将获得什么样的caching? 您是否正在使用具有大量caching的企业级arrays控制器? 读取caching是此设置中的关键
  • 有多less服务器将同时访问同一个文件? NFSlocking可能会非常糟糕

通过NFS打开文件的限制是主机操作系统的限制。 FreeBSD有很多不同的调优选项来支持大量的打开文件,但这取决于服务器的RAM数量。

中央文件服务器的替代scheme是在您的Web服务器之间使用同步/复制(如Chris S所build议的)。 rsync或DRBD可能是一个很好的和有成本效益的select。

我会build议反对NFS,除非你把一些caching在那里。 nginxcaching总比什么都好,但是Varnish更好。

有了这个说法,如果你的负载将变成比静态更dynamic的内容,从本地磁盘提供应用程序文件将变得更加重要。

如果你把NFS放进去,确保你有冗余。

我使用cachefilesd (和最近的linux内核,使用cachefs)将NFS文件caching到本地HD。 这样,nfs中的每个读取操作都会将文件复制到/ var / cache / fs目录,然后将从那里读取下一个读取内容,如果内容仍然有效,内核将检查nfs。

这样你可以有一个中央的NFS,但不会丢失本地文件的性能

当空闲大小/ inode达到configuration级别时,Cachefilesd将负责清理旧文件,以便可以从NFS中提供非常见数据,并从HD中提供常见请求

当然,也可以使用清漆caching更常见的请求,然后保存nginx / NFS服务器。

这里是一个小的cachefilesd howto