Come configurare un server NFS che memorizza nella cache una condivisione di rete?


14

I dati dell'utente sono memorizzati su due cluster di archiviazione OpenStack Swift abbastanza grandi (> 1 PB). Siano Cluster A e Gruppo B .

Inoltre, ci sono diversi PoP che devono interagire con quei dati. I server in questi PoP sono effettivamente senza disco, il che significa che nessun dato dell'utente viene memorizzato su di essi o mai scaricato su di essi. I PoP possono essere raggruppati in regioni del mondo generale (ad es. Nord America , Sudafrica , Europa centrale e altri).

Alcuni PoP sono abbastanza lontani dagli endpoint Swift di qualsiasi cluster, introducendo una latenza indesiderata. Per mitigare un po 'questo, voglio impostare un server gateway di memorizzazione nella cache in ciascuna delle regioni, che memorizzerà nella cache le richieste di r / w per il cluster più vicino.

Attualmente, i client di qualsiasi PoP accedono ai dati dell'utente tramite un file system virtuale rapido montato in modo permanente , che è un modulo FUSE che monta Swift Object Storage come dispositivo a blocchi (più o meno). Tuttavia, svfs non è poi così stabile in primo luogo e in futuro i client dovrebbero accedere ai server cache tramite NFS.

Questo è un diagramma di un ramo dell'architettura desiderata:

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

Conosco le basi della configurazione di NFS e svfs.

La domanda è : come posso impostare il server di memorizzazione nella cache per utilizzare tutte le risorse disponibili (una partizione cache designata, RAM) per memorizzare nella cache il più aggressivamente possibile e quanti più dati possibile prima di scrivere sul mount point svfs? Fondamentalmente si riduce a: Come posso memorizzare nella cache una directory in Linux?

Se possibile, le letture e le scritture dovrebbero essere consolidate e le dimensioni dei blocchi nelle richieste FUSE dovrebbero essere almeno 128k, se possibile, per massimizzare il throughput e minimizzare la latenza se la cache deve scrivere nel cluster.

Addendum 1 : Ho cambiato il modulo di montaggio del cluster da svfs a S3QL su alcuni server. La memorizzazione nella cache di S3QL ha migliorato un po 'le prestazioni. Cercherò di ottenere alcuni dati sulle prestazioni per completezza.


puoi provare ad abilitare fs-cache sui client nfs: cyberciti.biz/faq/…
kofemann

Si prega di consultare serverfault.com/a/441443/345699 . Forse questo ti aiuterà nella tua ricerca
Steven K7FAQ,

Risposte:


1

Se i meccanismi intrinseci di Linux (come cachefsaka cachefilesd) non funzionano E disponi di un budget, puoi esaminare WAFS (servizi di file di area ampia). Si tratta di dispositivi progettati per la memorizzazione nella cache aggressiva di NFS (e CIFS), per cercare di nascondere le latenze normalmente coinvolte nei collegamenti WAN.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.