我正在构建一个应用程序,该应用程序需要通过 WAN 跨几个站点分发标准文件服务器。基本上,每个站点都需要编写大量不同大小的 misc 文件(有些在 100 s MB 范围内,但大多数很小),并且编写应用程序时不会出现冲突问题。我想建立一个符合以下条件的系统:
- 每个站点都可以将文件存储在共享的“命名空间”中。也就是说,所有文件都将显示在同一个文件系统中。
- 除非必要,否则每个站点都不会通过 WAN 发送数据。即,WAN 的每一侧都有本地存储,它们将被“合并”到同一个逻辑文件系统中。
- Linux 和免费 ($$$) 是一个加号
基本上,像中央 NFS 共享这样的东西可以满足大多数要求,但是它不允许本地写入的数据留在本地。来自 WAN 远程端的所有数据将一直在本地复制。
我研究了 Lustre,并用它进行了一些成功的测试,但是,它似乎在分布式存储中相当均匀地分布文件。我已经翻阅了文档,但没有发现任何会自动“更喜欢”本地存储而不是远程存储的东西。即使是具有最低延迟存储的东西也可以。它会在大部分时间工作,这将满足此应用程序的要求。
对下面提出的一些问题的一些答案:
- 服务器节点:2 或 3 个启动。每台服务器将有数十个同时连接的读/写客户端。
- WAN 拓扑是全网状且可靠的。(大公司,成本不像繁文缛节那样有限)
- 客户端故障转移:我实际上没有考虑过让客户端故障转移(主要是因为我们当前的应用程序并不仅仅在一个站点上执行此操作)。我认为实际的答案是,每个地理位置分散的站点上的服务器都应该是它们所服务的客户端的单点故障。不过,如果您在这里考虑一些具体的事情,我认为这将与讨论密切相关。
- Roll-my-own:我考虑过 rsync/unison,但是我需要相当多的奇特逻辑才能使这项工作的“动态”部分无缝工作。即,文件似乎是本地的,但仅按需检索。
- MS-DFS:这当然是我应该研究的。我的主要问题可能是不确定 Windows 上的 NFS 服务器配置/可靠性/性能,因为许多连接的客户端都是 NFS 客户端。
对 Linux 的要求感到羞耻。这正是 Windows DFS 所做的。从 2003 R2 开始,它也在块级的基础上进行。
一些问题:
你考虑有多少个“服务器”节点参与这个事情?
WAN 连接拓扑是什么样的——中心辐射型、全网状?它有多可靠?
如果本地服务器发生故障,您是否希望客户端故障转移到地理上的非本地服务器?
Windows DFS-R 肯定会满足您的需求,尽管许可成本可能很高。
您说冲突不是问题,并且您不需要分布式锁管理器,因此您可以使用 rsync 或Unison等用户级工具来执行此操作,然后将生成的带有 NFS 的文件语料库导出到本地客户端。这很丑陋,您必须处理将某种系统组合在一起来处理生成复制拓扑并实际运行用户空间工具,但随着许可成本的增加,它肯定会很便宜。
你考虑过AFS吗?
据我了解,最近的大部分开发都落后于OpenAFS项目。
我不能假装对该项目足够熟悉以知道“首选位置”功能是否可用,但否则听起来很合适。
你看过Lustre中的OST 池吗?
它不会是自动的,但使用 OST 池,您可以将目录/文件分配给特定的 OST/OSS - 基本上是基于策略的存储分配,而不是跨 OST 的默认循环/条带化。
因此,您可以为每个站点设置一个目录,并将该目录分配给该站点的本地 OST,这会将所有 I/O 定向到本地 OST。它仍然是一个全局命名空间。
在通过 WAN 连接(本地缓存服务器和类似的东西)改进 Lustre 方面有很多工作要做,但 AFAIK 仍在大力开发中。
也许 NFS 但在应用程序服务器上使用Cachefs将完成您的部分目标。据我了解,所有写入的内容仍将转到中央服务器,但至少读取最终可能会在本地缓存。根据您的使用模式,这可能会导致读取延迟很多。
此外,mabye UnionFS 值得研究。有了这个,我认为每个位置都是一个 NFS 导出,然后您可以在每个位置使用 UnionFS 以使该位置和该位置的所有其他 NFS 挂载显示为一个文件系统。我没有这方面的经验。
您可以查看 DRBD 来复制磁盘。http://www.drbd.org/。这是一个刚刚进入内核的 linux 高可用性解决方案。
但是,这有一些限制:
如果您想保持简单,请查看 rsync,它解决了很多问题并且可以编写脚本。
检查chironfs。
也许它可以在文件系统的基础上做你想做的事。
Btsync 是我使用过的另一种解决方案。它使用 BitTorrent 协议传输文件,因此您拥有的服务器越多,同步新文件的速度就越快。
与基于 rsync 的解决方案不同,它会检测您何时重命名文件/文件夹,并在所有节点上重命名它们,而不是删除/复制。
然后,您的 btsync 客户端可以在本地网络上共享文件夹。
我发现的唯一缺点(与 MS DFS 相比)是它不会检测到本地文件副本。相反,它将把它解释为一个上传到所有对等点的新文件。
到目前为止,btsync 似乎是最好的同步解决方案,它可以安装在 Windows、Linux、Android 和 ARM 设备(例如 NAS)上