我有一个运行 Ubuntu 10.04 Server 的 NFS4 服务器,位于一个有 50 多个客户端的企业环境中。
总体而言,一切都运行良好,但有时,一些客户端开始每秒进行 +1000 次 NFS 操作,这通常是由于客户端软件故障或软件编写不佳造成的。
当发生这种情况时,客户端通常会开始在 dmesg 上收到大量类似这样的消息:
[443947.760016] nfs: server 192.1.1.111 not responding, still trying
[443952.696017] nfs: server 192.1.1.111 not responding, still trying
[443954.056079] nfs: server 192.1.1.111 OK
[443954.056311] nfs: server 192.1.1.111 OK
我的 NFS4 服务器启动了 96 个守护进程。它运行在 8 核多线程 CPU(总共 16 个线程)和 16GB RAM 内存上。也许 96 不是一个好的选择?
我开发了一些工具来绘制 NFS 客户端使用情况,这样我就可以检测问题并手动终止客户端。当然,我也可以自动完成这一操作。但是,我不想太过激进。大多数时候,这不是他们的错,我不想因为 gnome-settings-daemon 出了问题而搞砸了他们的 2 周模拟,从而让客户端发疯。
那么,在走这条不太好的道路之前,是否有任何好的做法或既定的机制可以防止 NFS 拒绝服务?