用户数据存储在两个相当大的(>1PB) OpenStack Swift存储集群中。让他们成为A组和B组。
此外,还有一些持久性有机污染物需要与这些数据进行互动。这些PoPs中的服务器实际上是无盘的,这意味着没有用户数据被存储或下载到它们上。持久性有机污染物可分为一般的世界区域(例如北美洲、南非、中欧等)。
有些PoPs离任何集群的Swift端点都有很远的距离,这带来了一个不受欢迎的延迟。为了在一定程度上缓解这种情况,我希望在每个区域中设置一个缓存网关服务器,该服务器将r/w请求缓存到最近的集群。
目前,任何PoPs中的客户端都可以通过永久安装的快速虚拟文件系统访问用户数据,该文件系统是将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|
+------------------+ +------------------+我熟悉建立NFS的基础和svfs。
问题是:在写入svfs挂载点之前,如何设置缓存服务器以使用所有可用资源(指定的缓存分区,RAM)来尽可能积极地缓存数据?基本上可以归结为:如何在linux中缓存目录?
如果可能的话,应该合并读和写,如果可能的话,FUSE请求中的块大小应该至少为128 k,以便在缓存需要写入集群时最大限度地提高吞吐量和最小化延迟。
增编1:我已经将集群挂载模块从svfs切换到了一些服务器上的S3QL。S3QL的缓存提高了一些性能。为了完整起见,我将尝试获取一些性能数据。
发布于 2018-01-06 05:51:38
如果固有的linux机制(如cachefs,又名cachefilesd)不能工作,而且您有预算,您可以查看WAFS (广域文件服务)。这些设备是为NFS (和CIFS)的主动缓存而设计的,目的是试图隐藏广域网链接中通常涉及的延迟。
发布于 2018-09-06 19:59:47
我真的不是这方面的专家(但这确实很有趣!)
我最近看到的主要是用于LVM的dm缓存,其中SSD用于缓存部分。下面是readhat的一个示例文本,它有一个很好的概述,但它与RH:https://www.redhat.com/en/blog/improving-read-performance-dm-cache无关。
https://serverfault.com/questions/844927
复制相似问题