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

13

Os dados do usuário são armazenados em dois clusters de armazenamento OpenStack Swift razoavelmente grandes (> 1 PB). Deixe-os ser o Cluster A e o 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 neles 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 et al.) .

Alguns PoPs são muito distantes dos pontos finais do Swift de qualquer um dos clusters, introduzindo uma latência indesejável. Para atenuar isso, quero configurar um servidor de gateway de armazenamento em cache em cada uma das regiões, o que armazenará em cache as solicitações de r / w para o cluster mais próximo.

Atualmente, os clientes em qualquer um dos PoPs acessam os dados do usuário por um swift virtual file system permanentemente montado, que é um módulo do 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|
                                    +------------------+          +------------------+

Estou familiarizado com o Noções básicas de configuração de NFS e svfs.

A questão é : como configurar o servidor de cache para usar todos os recursos disponíveis (uma partição de cache designada, RAM) para armazenar em cache de forma tão agressiva quanto possível os dados antes de gravar na montagem svfs ponto? Basicamente 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 o rendimento e minimizar a latência, se o cache precisar gravar no cluster.

Adendo 1 : mudei 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 completar.

    
por mınxomaτ 17.04.2017 / 19:17

2 respostas

0

Se os mecanismos inerentes do linux (como cachefs aka cachefilesd ) não funcionam E você tem orçamento, você pode procurar em WAFS (serviços de arquivo de área ampla). Estes são dispositivos projetados para armazenamento em cache agressivo do NFS (e CIFS), para tentar ocultar as latências normalmente envolvidas nos links WAN.

    
por 06.01.2018 / 06:51
0

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

O que eu tenho visto ultimamente é principalmente o dm-cache para LVM, com SSDs para a parte de cache dele. Aqui está um texto de exemplo do readhat que tem uma boa visão geral, mas não está ligado ao RH: link

    
por 06.09.2018 / 21:59