我们的系统主要使用 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 系统。
- 检查文件服务器上的原始磁盘性能。通常,NFS 性能不会高于原始磁盘性能的 50% 左右。
- 您的 NFS 服务器网络性能应高于客户端的总和。例如,如果 10 个客户端使用 100Bt 以太网,则您的服务器上至少应有 1Gb 接口。
- 优化服务器上的预读和缓存设置。如果不知道硬件配置,我无法帮助您。
- 优化您的网络:比较 TCP 上的 NFS 和 UDP 上的 NFS。如果适用,请尝试使用巨型帧。
- 在 NFS 服务器上运行足够的服务器进程。理想情况下,服务器数量应与活动连接数量相同,但具体情况可能有所不同。
答案3
你说你正在使用 Apache 的内存缓存。Apache 也有基于磁盘的缓存,可以在这里使用。请参阅 Apache 的基于磁盘的缓存部分缓存指南。这需要将一些本地磁盘空间用于图像缓存,并时不时运行实用程序来清理缓存。
Solaris 有一个缓存文件系统,可以用作 NFS 顶层,但是您标记了 linux,所以我想这对您来说不是一个选择。