对读写比高的系统,使用nfs优化图像服务

我们的系统主要使用NFS来复制和提供来自多个节点的图像

新图像并不经常添加。 因此写入是罕见的。 几乎所有的请求都将被读取请求。

我如何优化我的系统以获得最大读取性能(仅限nfs)。 任何快速可靠的testing来validation系统是否performance更好?

有更好的方法来快速提供图像吗? 可以在nfs mount上使用squid / caching机制来加速吗?

我们已经在使用apache的内存caching模块。

服务器和客户端使用 – nfs v3,全部运行RHEL 4。

服务器的h / wconfiguration:RAM:3GB,四核英特尔(R)Xeon(TM)@ 3 Ghz。

cat / proc / net / rpc / nfsd“在服务器上给出:

rc 0 3584710 221921733 fh 1506 0 0 0 0 io 4274869225 1474485090 th 8 581669 39835.922 7449.989 1396.547 0.000 879.767 604.030 436.573 320.797 0.000 1362.017 ra 16 3454951 13954 4091 8186 3920 6990 6421 3003 5574 2727 2467399 net 225510008 0 225488411 41217 rpc 225506272 0 0 0 0 proc2 18 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 proc3 22 57 144259928 359775 11723001 58910204 0 5977165 2145920 546253 3829 0 0 509776 3718 15256 165 21497 79725 10067 59 0 867450 proc4 2 0 0

考虑使用rsync将内容推送到所有图像服务节点,而不是使用NFS。 写入可以发生在一个中心点,然后在必要时(即添加图像时)或cron作业被rsynced。

这样可以提高整体性能,并且允许使用通常的文件系统caching,而不必在NFS之上实现某些function。

你没有提到你的NFS服务器是什么,也没有提到nfs客户端。 我假设这两个都是某种最新的Linux系统。

  1. 检查文件服务器上的原始磁盘性能。 通常,NFS性能不能比原始磁盘性能的50%更好。
  2. 您的NFS服务器networking性能应该超过客户端的总和。 例如,有10个100Bt以太网的客户端,服务器上至less有1Gb接口。
  3. 优化服务器上​​的预读和caching设置。 如果不知道硬件configuration,我无法帮到你。
  4. 优化您的networking:比较基于TCP的NFS和基于UDP的NFS。 如果适用,请尝试巨型帧。
  5. 在NFS服务器上运行足够的服务器进程。 理想情况下,您应该有活动连接的服务器数量,但YMMV。

你说你正在使用Apache的内存caching。 Apache也有基于磁盘的caching,可以在这里使用。 请参阅Apache 高速caching指南中的基于磁盘的caching部分。 这需要将一些本地磁盘空间用于映像caching,并且每隔一段时间运行一次实用程序来清理caching。

Solaris有一个可以用作NFS顶层的caching文件系统,但是你标记了linux,所以我不认为这是你的select。

您没有提到您是否在考虑硬件问题,但是一种可能的caching解决scheme是NetApp FlexCache产品。 他们当然不便宜,但他们正是为了解决这个问题。

禁用NFS读取器的文件系统上的访问时间(atime)。

基本上,默认情况下,您的硬盘正在执行写入操作,以更新每个正在读取的文件的访问时间。 禁用它可以提高读取性能。

有关atime的更多信息可以在这里和这里find。

听起来像是SSD的完美应用程序。 这会减less你的读取延迟。