如何设置cachingnetworking共享的NFS服务器?

用户数据存储在两个相当大(> 1 PB)的OpenStack Swift存储集群中。 让他们成为A组B组

另外,还有几个PoP需要与这些数据交互。 这些PoP中的服务器实际上是无盘的,这意味着没有用户数据存储在它们上面或者下载到它们。 PoP可以分为普通的世界地区 (如北美南非中欧等)。

有些PoP距离任何集群的Swift端点相当远,引入了不希望有的延迟。 为了稍微缓解这个问题,我想在每个区域设置一个caching网关服务器,这将caching到最近的集群的r / w请求。

目前,任何PoP中的客户端都通过永久安装的swift虚拟文件系统来访问用户数据,该虚拟文件系统是将Swift Object Storage作为块设备(或多或less)安装的FUSE模块。 然而,svfs在一开始和未来都不是那么稳定,客户端应该通过NFS访问caching服务器。

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

+------------------+ +------------------+ 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| +------------------+ +------------------+ 

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

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

如果可能的话,应该整合读取和写入操作,并且如果可能的话,FUSE请求中的块大小应该至less为128k,以便在caching需要写入群集时最大化吞吐量和最小化延迟。

附录1 :我已经在几台服务器上将群集挂载模块从svfs切换到了S3QL。 S3QL的caching提高了一点性能。 我会尽力获得一些性能数据的完整性。