我们设置了一些负载平衡的 Web 服务器。我们希望拥有某种所有 Web 服务器都可以访问的网络共享存储。它将用作存储用户上传的文件的地方。所有服务器都运行 Linux。
我们应该使用 NFS、CIFS、SMB、fuse+sftp 还是 fuse+ftp?网络文件共享协议的选择太多了,很难选择。我们基本上只想在多台机器上永久安装这个共享。安全功能不太令人担忧,因为除了安装它的服务器之外,其他任何地方都无法通过网络访问它。我们只希望它能够可靠、快速地工作。
我们应该使用哪一个?
答案1
我投票支持 NFS。
NFSv4.1 添加了并行 NFS pNFS 功能,这使得并行数据访问成为可能。我想知道什么样的客户端在使用存储,如果只有类 Unix,那么我会根据性能数据选择 NFS。
答案2
简短的答案是使用 NFS。根据这个枪战就我的经验来说,它更快。
但是,您还有更多选择!您应该考虑使用像 GFS 这样的集群文件系统,这是一个多台计算机可以同时访问的文件系统。基本上,您通过 iSCSI 共享一个块设备,这是一个 GFS 文件系统。所有客户端(iSCSI 术语中的启动器)都可以读取和写入它。Redhat 有一个白皮书. 您还可以使用 oracle 的 cluster FS光驱去管理同样的事情。
Redhat 论文很好地列出了集群 FS 与 NFS 的优缺点。基本上,如果您想要很大的扩展空间,GFS 可能值得一试。此外,GFS 示例使用光纤通道 SAN 作为示例,但它也可以是 RAID、DAS 或 iSCSI SAN。
最后,确保检查巨型帧,如果数据完整性至关重要,则在将 iSCSI 与巨型帧一起使用时请使用 CRC32 校验和。
答案3
我们有一个2台服务器负载平衡网络集群。我们尝试了以下方法在服务器之间同步内容:
- 每台服务器上的本地驱动器都与同步每 10 分钟
- 一个中央CIFS(桑巴)共享到两个服务器
- 一个中央NFS共享到两个服务器
- 正在运行的共享 SAN 驱动器OCFS2安装了两个服务器
这同步解决方案是最简单的,但更改需要 10 分钟才能显示出来,而且 RSYNC 给服务器带来了太多负载,我们不得不使用自定义脚本来限制它,每秒暂停一次。我们还被限制只能写入源驱动器。
性能最快的共享驱动器是OCFS2集群驱动器,直到它变得疯狂并导致集群崩溃。我们无法保持 OCFS2 的稳定性。一旦多台服务器访问相同的文件,负载就会急剧上升,服务器开始重新启动。这可能是我们训练失败。
其次是NFS。它非常稳定,容错性强。这是我们当前的设置。
中小型企业 (CIFS)存在一些锁定问题。特别是,SMB 服务器上的文件更改无法被 Web 服务器看到。在 SMB 服务器发生故障转移时,SMB 也容易挂起
我们的结论OCFS2 潜力最大,但在投入生产之前需要进行大量分析。如果您想要简单而可靠的解决方案,我建议您使用带有 Heartbeat 的 NFS 服务器集群进行故障转移。
答案4
在可靠性和安全性方面,可能是 CIFS(又名 Samba),但 NFS“似乎”更轻量级,并且通过仔细配置,可以不将您宝贵的数据完全暴露给网络上的所有其他机器 ;-)
无意冒犯 FUSE 的东西,但它似乎仍然……很新奇,如果你明白我的意思的话。我不知道我是否信任它,但这可能只是因为我是个老顽固,但当涉及到有价值的企业数据时,老顽固主义有时是有道理的。
如果您想在多台机器上永久安装一个共享,并且可以忍受一些奇怪的事情(主要是 UID/GID 问题),那么请使用 NFS。我使用它已经很多年了。