我正在构建一个应用程序,该应用程序需要通过 WAN 跨几个站点分发标准文件服务器。基本上,每个站点都需要编写大量不同大小的 misc 文件(有些在 100 s MB 范围内,但大多数很小),并且编写应用程序时不会出现冲突问题。我想建立一个符合以下条件的系统:
- 每个站点都可以将文件存储在共享的“命名空间”中。也就是说,所有文件都将显示在同一个文件系统中。
- 除非必要,否则每个站点都不会通过 WAN 发送数据。即,WAN 的每一侧都有本地存储,它们将被“合并”到同一个逻辑文件系统中。
- Linux 和免费 ($$$) 是一个加号
基本上,像中央 NFS 共享这样的东西可以满足大多数要求,但是它不允许本地写入的数据留在本地。来自 WAN 远程端的所有数据将一直在本地复制。
我研究了 Lustre,并用它进行了一些成功的测试,但是,它似乎在分布式存储中相当均匀地分布文件。我已经翻阅了文档,但没有发现任何会自动“更喜欢”本地存储而不是远程存储的东西。即使是具有最低延迟存储的东西也可以。它会在大部分时间工作,这将满足此应用程序的要求。
对下面提出的一些问题的一些答案:
- 服务器节点:2 或 3 个启动。每台服务器将有数十个同时连接的读/写客户端。
- WAN 拓扑是全网状且可靠的。(大公司,成本不像繁文缛节那样有限)
- 客户端故障转移:我实际上没有考虑过让客户端故障转移(主要是因为我们当前的应用程序并不仅仅在一个站点上执行此操作)。我认为实际的答案是,每个地理位置分散的站点上的服务器都应该是它们所服务的客户端的单点故障。不过,如果您在这里考虑一些具体的事情,我认为这将与讨论密切相关。
- Roll-my-own:我考虑过 rsync/unison,但是我需要相当多的奇特逻辑才能使这项工作的“动态”部分无缝工作。即,文件似乎是本地的,但仅按需检索。
- MS-DFS:这当然是我应该研究的。我的主要问题可能是不确定 Windows 上的 NFS 服务器配置/可靠性/性能,因为许多连接的客户端都是 NFS 客户端。