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

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

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

新图像的添加频率不高。因此写入很少。几乎所有请求都是读取请求。

我如何优化我的系统以获得最大的读取性能(仅使用 nfs)。有没有快速可靠的测试来验证系统是否表现更好?

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

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

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

服务器硬件配置:RAM:3GB,四核 Intel(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

答案1

不使用 NFS,考虑使用 rsync 来推送内容到所有图像服务节点。写入可以在一个中心点进行,然后在必要时(即添加图像时)或使用 cron 作业进行同步。

这将提供更好的整体性能,并允许使用通常的文件系统缓存,而不必在 NFS 之上实现某些东西。

答案2

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

  1. 检查文件服务器上的原始磁盘性能。通常,NFS 性能不会高于原始磁盘性能的 50% 左右。
  2. 您的 NFS 服务器网络性能应高于客户端的总和。例如,如果 10 个客户端使用 100Bt 以太网,则您的服务器上至少应有 1Gb 接口。
  3. 优化服务器上​​的预读和缓存设置。如果不知道硬件配置,我无法帮助您。
  4. 优化您的网络:比较 TCP 上的 NFS 和 UDP 上的 NFS。如果适用,请尝试使用巨型帧。
  5. 在 NFS 服务器上运行足够的服务器进程。理想情况下,服务器数量应与活动连接数量相同,但具体情况可能有所不同。

答案3

你说你正在使用 Apache 的内存缓存。Apache 也有基于磁盘的缓存,可以在这里使用。请参阅 Apache 的基于磁盘的缓存部分缓存指南。这需要将一些本地磁盘空间用于图像缓存,并时不时运行实用程序来清理缓存。

Solaris 有一个缓存文件系统,可以用作 NFS 顶层,但是您标记了 linux,所以我想这对您来说不是一个选择。

答案4

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

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

有关 atime 的更多信息可以找到这里这里

相关内容