Como configurar um servidor NFS que armazena em cache um compartilhamento de rede?

14

Os dados do usuário são armazenados em dois clusters de armazenamento OpenStack Swift bastante grandes (> 1 PB). Sejam Cluster A e Cluster B .

Além disso, existem vários PoPs que precisam interagir com esses dados. Os servidores nesses PoPs são efetivamente sem disco, o que significa que nenhum dado do usuário é armazenado ou baixado para eles. Os PoPs podem ser agrupados em regiões gerais do mundo (por exemplo , América do Norte , África do Sul , Europa Central e outros).

Alguns PoPs estão bem distantes dos pontos de extremidade Swift de qualquer um dos clusters, introduzindo uma latência indesejável. Para mitigar um pouco isso, desejo configurar um servidor de gateway de cache em cada uma das regiões, que armazenará em cache as solicitações de r / w no cluster mais próximo.

Atualmente, os clientes em qualquer um dos PoPs acessam os dados do usuário por um sistema de arquivos virtual rápido montado permanentemente , que é um módulo FUSE que monta o Swift Object Storage como um dispositivo de bloco (mais ou menos). No entanto, o svfs não é tão estável em primeiro lugar e, no futuro, os clientes devem acessar os servidores de cache via NFS.

Este é um diagrama de um ramo da arquitetura desejada:

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

Eu estou familiarizado com o básico da configuração de NFS e svfs.

A pergunta é : como posso configurar o servidor de armazenamento em cache para usar todos os recursos disponíveis (uma partição de cache designada, RAM) para armazenar em cache o mais agressivamente e o máximo de dados possível antes de gravar no ponto de montagem svfs? Basicamente, tudo se resume a: Como posso armazenar em cache um diretório no linux?

Se possível, as leituras e gravações devem ser consolidadas e os tamanhos dos blocos nas solicitações do FUSE devem ter pelo menos 128k, se possível, para maximizar a taxa de transferência e minimizar a latência se o cache precisar gravar no cluster.

Adendo 1 : Troquei o módulo de montagem de cluster de svfs para S3QL em alguns servidores. O cache do S3QL melhorou um pouco o desempenho. Vou tentar obter alguns dados de desempenho para garantir a integridade.

mınxomaτ
fonte
você pode tentar ativar fs-cache nos clientes NFS: cyberciti.biz/faq/...
kofemann
Consulte serverfault.com/a/441443/345699 . Possivelmente isso vai ajudar na sua busca
Steven K7FAQ

Respostas:

1

Se os mecanismos inerentes do linux (como o cachefsaka cachefilesd) não funcionarem E você tiver orçamento, poderá analisar WAFS (serviços de arquivos de área ampla). Esses são dispositivos projetados para o cache agressivo do NFS (e CIFS), para tentar ocultar as latências geralmente envolvidas nos links da WAN.

cristão
fonte
1

Eu realmente não sou especialista nesta área (mas com certeza é interessante!).

O que eu tenho procurado ultimamente é principalmente o dm-cache para LVM, com SSDs para a parte do cache. Aqui está um texto de exemplo do readhat que tem uma boa visão geral, mas não está vinculado ao RH: https://www.redhat.com/en/blog/improving-read-performance-dm-cache

Fredrik Lundhag
fonte