![在生产 Web 服务器上使用 NFS 是否合理?](https://linux22.com/image/756229/%E5%9C%A8%E7%94%9F%E4%BA%A7%20Web%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E4%BD%BF%E7%94%A8%20NFS%20%E6%98%AF%E5%90%A6%E5%90%88%E7%90%86%EF%BC%9F.png)
假设连接是通过 LAN 1Gbe 或 10Gbe 连接,NFS 是否可以在生产服务器上合理地用作将计算服务器连接到存储服务器的手段?
显然,如果启用了同步模式,NFS 的写入速度会特别慢,而且网络开销会很大。除此之外,据我所知,它似乎相当轻量且能够扩展,但我个人对此没有什么经验。我错了吗?
问题是我现在有一台服务器,它既充当存储又充当 Web 服务器,但将来我可能需要将两者分开,而且考虑到一些请求在初始化文件传输之前需要通过 Web 应用程序层进行身份验证,这个软件有点棘手。网络文件系统挂载是最简单的选择,我只是……不知道这是否是一个好选择。
我还计划尝试利用 NFS 的本地缓存,这应该可以显著提高性能,但我不确定这是否足够。
至于替代方案,据我所知只有 iSCSI 是真正的竞争对手,并且大多数人似乎都推荐 NFS,而不是其他鲜为人知的方案。
答案1
NFS 很好,除非满足一些其他特定条件,即:
- 所涉及的系统都能够本机使用 NFS。Windows 不计算在内,它有点儿可以工作,但它有很多怪癖,在跨平台环境中处理 NFS 时通常很难使用(如果它只是Windows,使用 SMB3,它消除了 NFS 的大多数其他问题)。请注意,在客户端,这意味着内核级支持,因为用户级实现要么必须处理使用 FUSE 之类的东西所固有的效率问题,要么必须直接链接到需要访问共享的应用程序中。
- 您已正确验证了 NFS 客户端如何处理 NFS 服务器重启。这包括操作系统本身(应该在大多数情况下都没问题),以及将访问共享的软件。特别是,在某些客户端平台上,当使用共享的软件长时间保持文件打开时,需要特别小心,因为并非所有 NFS 客户端实现都能通过明确重新安装和重新验证锁和文件句柄来妥善处理服务器重启(这会导致客户端软件出现各种问题)。请注意,您应该在升级或重新配置堆栈的任何部分时重新检查这一点。
- 您愿意设置正确的用户/组 ID 映射。这很重要,因为如果没有它,您要么需要在系统之间镜像 UID/GID 映射(可行,但我对为面向互联网的系统设置针对内部网络的 SSO 持谨慎态度),要么最终会面临潜在的严重安全隐患(即,您在一个系统上看到的权限与您在其他系统上看到的权限不匹配)。
- 您正在通过安全的网络链接进行操作,或者愿意为共享正确设置身份验证。如果没有身份验证,链接上的任何人都可以访问它(恶意客户端可以轻松绕过基本的 UNIX 自主访问控制)。
假设您满足所有这些条件,并且您的网络速度相当快,那么您应该没问题。此外,如果您可以运行巨型帧,那就这样做吧,它们对任何网络文件系统或网络块存储都有很大帮助。
答案2
NFS 绝对没问题,并且比 iSCSI 更受欢迎,因为 NFS 更易于管理、共享和备份。
答案3
多年来,我们一直使用 NFS 将 SAN 连接到 VMware ESXi 服务器,并在其上运行数百台虚拟机。一点问题都没有。
瓶颈在于存储系统而不是网络协议。
当然,网络连接速度应该足够快,也就是 10Gb 以太网或光纤。我们甚至不再需要单独的存储网络。
答案4
iSCSI 可能更快一点……
https://www.hyper-v.io/whos-got-bigger-balls-testing-nfs-vs-iscsi-performance-part-3-test-results/
...但是 NFS 与任何其他网络重定向器(SMB3、AFS/AFP 等)一样允许并发多访问,这对于 iSCSI 或其他块协议来说很棘手。
https://forums.starwindsoftware.com/viewtopic.php?f=5&t=1392