如何设置缓存网络共享的 NFS 服务器?

mın*_*maτ 14 nfs network-share disk-cache openstack

用户数据存储在两个相当大(>1 PB)的 OpenStack Swift 存储集群上。让它们成为Cluster ACluster B

此外,还有几个PoP需要与该数据进行交互。这些 PoP 中的服务器实际上是无盘的,这意味着没有用户数据存储在它们上面,也没有下载到它们。PoP 可以分为一般的世界区域(例如北美南非中欧等)。

一些 PoP 与任何集群的 Swift 端点相距很远,从而引入了不受欢迎的延迟。为了在一定程度上缓解这种情况,我想在每个区域中设置一个缓存网关服务器,它将缓存 r/w 请求到最近的集群。

目前,任何 PoP 中的客户端都通过永久安装的swift 虚拟文件系统访问用户数据,这是一个 FUSE 模块,将 Swift 对象存储安装为块设备(或多或少)。然而,svfs 并不是那么稳定,在未来,客户端应该通过 NFS 访问缓存服务器。

这是所需架构的一个分支的图:

+------------------+                +------------------+    NFS   +------------------+
|    Cluster A     |     SVFS       |  Region 1 Cache  +---------->  R1 PoP a Client |
|                  +---------------->                  |          |                  |
|Persistent Storage|                |Ephemeral  Storage+----+     |Generates R/W Load|
+-----------------++                +------------------+    |     +------------------+
                  |                                         |
                  |                 +------------------+    | NFS +------------------+
                  |      SVFS       |  Region 2 Cache  |    +----->  R1 PoP b Client |
                  +----------------->                  |          |                  |
                                    |Ephemeral  Storage|          |Generates R/W Load|
                                    +------------------+          +------------------+
Run Code Online (Sandbox Code Playgroud)

我熟悉设置 NFS和 svfs的基础知识

问题是:如何设置缓存服务器以使用所有可用资源(指定的缓存分区、RAM)在写入 svfs 挂载点之前尽可能积极地缓存尽可能多的数据?基本上归结为:如何在 linux 中缓存目录?

如果可能,应合并读取和写入,并且 FUSE 请求中的块大小应至少为 128k,以便在缓存需要写入集群时最大限度地提高吞吐量并最大限度地减少延迟。

附录 1:我已经在一些服务器上将集群装载模块从 svfs 切换到 S3QL。S3QL 的缓存稍微提高了性能。为了完整性,我将尝试获取一些性能数据。

Chr*_*ian 1

如果固有的 Linux 机制(如cachefsaka cachefilesd)不起作用并且您有预算,您可以考虑WAFS(广域文件服务)。这些设备专为 NFS(和 CIFS)的主动缓存而设计,以尝试隐藏 WAN 链接中通常涉及的延迟。


归档时间:

查看次数:

2187 次

最近记录:

6 年,9 月 前