我有一个在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打开文件的限制是主机操作系统的限制。 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