我们有一个分布式应用程序,它使用大量内容(所有类型的文件)。有几台服务器需要访问这些内容。目前,内容冗余地存储在每台服务器上。但这变得越来越糟糕。
我们希望将内容存储在具有大容量硬盘的单个存储实例上。然后,我们希望从每台服务器挂载此存储实例的文件系统。
我考虑过使用 NFS,但安全方案似乎不太合适。现在我正在考虑 Samba,但我不确定它是否是正确的选择。所有服务器都是 Linux,而 Samba 的主要用途是 Windows/Linux 环境。Samba 让我感兴趣的是用户级安全性。
除了安全性之外,另一个主要要求是性能。我们的服务器需要快速访问内容。即在 LAN 上尽可能快。
Samba 是个好选择吗?还有其他选择吗?WebDAV 怎么样?
编辑:我需要做什么:我们有不同数量的服务器需要访问越来越多的文件。我们预计文件数量将达到几 TB。我们将这些文件称为“内容”。所有服务器都必须使用相同版本的内容。服务器需要并发只读访问内容。内容更新相对较少。每周一次到每月一次,但可能会变得更加频繁。目前可以同步每台服务器上的内容,但在不久的将来,这将变得很麻烦。更新必须非常迅速。我们认为只在一台服务器(存储服务器)上更新/同步内容并让所有其他服务器将内容安装为远程文件系统会很方便。
一切顺利
简
答案1
Samba 几乎肯定会满足您的要求,并且性能相当不错。它应该具有必要的安全控制来处理您想到的任何用例(您的问题缺乏细节)。
很难提供其他建议,因为你没有很好地描述你需要做什么,以及你的限制是什么。WebDAV 可能没用;它什么都不是喜欢POSIX 文件系统,如果您认为需要极快的性能,那么您可能需要一些能够像完整文件系统一样运行的东西(任意搜索,诸如此类),这在 WebDAV 上会很痛苦。
您还没有谈到对单个文件的并发访问,这对您可能的解决方案空间有很大影响。如果一次只有一个客户端访问给定文件,尤其是如果只有一个客户端将曾经更新给定的文件,那么不一定放弃定期同步解决方案——在适当的条件下,它们可以做得很好。
最后,如果它大部分(或全部)是只读的,那么请考虑将数据访问设置为更高级别。不要认为你有拥有文件,为什么不考虑有用的特定于应用程序的抽象呢?一个常见的例子是不起眼的 SQL 数据库——一些聪明的笨蛋想出了一个更专业的存储引擎和必要的措辞来智能地访问它,而不是将数据存储在平面文件中并使用自定义代码对其进行处理。它不像文件系统那样灵活,但(在它狭窄的领域中)它是一个该死的视觉效果会更快。也许只要发挥一点想象力,您就可以为您的数据提出类似的抽象,这可以省去很多麻烦?
答案2
NFS - 您的存储实例是 NFS 服务器。您想要从存储实例挂载 NFS 文件系统的服务器称为 NFS 客户端。您的 NFS 存储实例确实必须知道 NFS 客户端(即您的服务器)的 IP 地址,但您已经知道这些地址。对于这些地址,您可以一次允许整个子网,并且您至少会知道您的服务器位于哪个子网上。请注意,NetApp 等公司正是销售这种产品,而且它们的效果非常好。
Samba - 我的经验与您想要的使用方式略有不同(即,用户在安装共享时提供用户名/密码组合),因此我无法对您提议的用途发表评论。
两者都应该可以正常工作,并且两者都应该能够毫无问题地使 1Gb 以太网接口饱和。我怀疑这将是您从存储实例中获取数据量的上限。当然,您可以使用多个以太网接口来解决这个问题,然后您可能会受到从您购买的磁盘中移动数据的速度的限制。
我认为在开始之前你需要知道的一个关键数字是,你不同数量的服务器中的每一台每秒需要读取多少数据?然后你需要知道你将拥有的最大服务器数量是多少。你提议的集中式解决方案每秒能提供那么多数据吗?现在你已经通过让每台服务器独立并拥有数据副本解决了这个问题。
答案3
关于您对性能和速度的特定要求,SSH 非常适合。SSH 使用 sftp 协议来交换文件,并使用原生 Linux 用户权限控制。您可以使用具有大存储容量的计算机系统(可能具有硬件级或软件级 RAID 或加密,EXT4 文件系统非常完美,因为它运行速度非常快)作为专用附加存储 (DAS)。在其上设置 SSH 服务器,并像在当前拥有的每台计算机系统上一样定义数据的不同用户访问级别。然后访问此服务器上的内容就像访问本地数据一样简单。在每台计算机上设置密钥环对于确保服务器上的身份验证安全至关重要。
答案4
整合服务器可以让生活更轻松 - 但如何确保可用性 - 重复网卡? Raid?有时复制可能是一件好事。
既然我们讨论的是服务器与服务器之间的通信,那么用户级安全性是否是一项如此重要的要求?NFS 中的用户身份验证当然很弱 - 但如果在网络中较低级别使用 NFS + 身份验证(如 IPSEC)呢?或者在 VPN 之上的 iSCSI 之上的共享文件系统?
根据访问模式,如果本地存储的可用性不是问题,最快的解决方案可能是像 AFS 这样的解决方案 - 您可以有效地获得一个非常大的本地缓存,这还具有在服务器宕机时可用的额外优势。