我有以下基于 NFS 的存储设置:
计算节点是 Linux。NFS 服务器是 Solaris。
一个不太重要的用户在计算节点的子集上运行了一堆读取密集型作业。结果,整个计算节点组变得非常慢(ls
阻塞 30 秒)。我能够追踪到专用 NFS 服务器正在达到 san 读取吞吐量的极限。
如何实现限制 NFS 带宽到节点、进程或用户的服务质量 (QoS)?
答案1
我不确定 NFS 能否“强化”以抵御来自集群的 DDOS 攻击。如果您确实需要这样做,那么使用其他方式访问持久存储会更容易。
根据您的设置,我建议在集群引擎级别执行“QoS”。
配置资源“io_heavy”限制为“10”,并让用户为 IO 密集型作业请求“1”。这样,不会同时运行超过 10 个 I/O 密集型作业。您的 NFS 不会崩溃,集群的其余部分将保持空闲以用于 CPU 密集型任务。
您还应该向节点添加暂存盘。这些暂存盘可以保存实际上不需要转至 NFS 的临时数据。它还有助于提供此处常用的“参考数据”。
我假设您的 Solaris NFS 服务器使用 ZFS。在服务器中装入尽可能多的 RAM。将 SSD 添加到服务器以用作 ZFS 缓存磁盘。这两种方法都可以减少 SAN 上的流量。
答案2
QOS 通常用于优先处理某些类型的网络流。您不能隔离和限制网络交换机上的用户端口吗?或者将他/她放在单独的 VLAN 中?或者将端口的数据速率限制为 100MBps?
除此之外,我不知道用户名或 MAC 地址对 NFS 带宽有任何限制。也许您的 NFS 服务器有选项可以确保以更分布式的方式处理文件请求?
跳出固有思维:将读取密集型文件移近用户,然后运行备份/rsync 过程将更新的数据写回 NAS?
这些到底是什么样的阅读密集型工作?