Esegui il deployment di un proxy di memorizzazione nella cache NFS dello spazio del kernel in Compute Engine

Last reviewed 2023-10-03 UTC

Questo tutorial mostra come eseguire il deployment, configurare e testare un Proxy di memorizzazione nella cache di Network File System (NFS) kernel-space in Compute Engine. La l'architettura descritta in questo tutorial è progettata per uno scenario quali dati di sola lettura vengono sincronizzati a livello di byte da un file di origine NFS server (ad esempio un file server NFS on-premise) con Google Cloud, o sincronizzati on demand da una fonte attendibile principale a più repliche di sola lettura.

Questo tutorial presuppone la conoscenza di quanto segue:

  • Creazione di versioni personalizzate del sistema operativo Linux.
  • Installazione e configurazione del software con script di avvio in Compute Engine.
  • Configurazione e gestione di un file system NFS.

Questa architettura non supporta il blocco dei file. L'architettura è più adatta per le pipeline che usano nomi file univoci per monitorare le versioni dei file.

Architettura

L'architettura in questo tutorial ha un daemon NFS (KNFSD) nello spazio kernel che funge da proxy NFS e cache. Questa configurazione consente ai tuoi nodi di calcolo basati su cloud di accedere a uno spazio di archiviazione locale e veloce eseguendo la migrazione dei dati quando un client NFS lo richiede. I nodi client NFS scrivono i dati direttamente sul server dei file di origine NFS utilizzando la memorizzazione nella cache write-through. Il seguente diagramma mostra questa architettura:

Architettura che utilizza un proxy KNFSD in Google Cloud.

In questo tutorial, eseguirai il deployment e il test del sistema proxy KNFSD. Crea da te e configurare un singolo server NFS, un singolo proxy KNFSD e un singolo client NFS in Google Cloud.

Il sistema proxy KNFSD funziona montando un volume dal server NFS e esportando nuovamente quel volume. Il client NFS monta il volume esportato di nuovo dal proxy. Quando un client NFS richiede dati, il proxy KNFSD controlla le varie tabelle della cache per determinare se i dati si trovano localmente. Se i dati vengono già nella cache, il proxy KNFSD la pubblica immediatamente. Se i dati richiesto non si trova nella cache, il proxy esegue la migrazione dei dati, aggiorna la cache tabelle e poi fornisce i dati. Il proxy KNFSD memorizza nella cache sia i dati dei file che metadati a livello di byte, quindi solo i byte utilizzati vengono trasferiti come vengono richieste.

Il proxy KNFSD ha due livelli di cache: L1 e L2. L1 è la cache di blocco standard del sistema operativo che risiede nella RAM. Quando il volume di dati supera la RAM disponibile, la cache L2 viene implementata utilizzando FS-Cache, un modulo del kernel Linux che memorizza nella cache i dati localmente su disco. In questo deployment, utilizzare SSD locale come cache L2, sebbene sia possibile configurare il sistema in diversi modi.

Per implementare l'architettura in questo tutorial, usi strumenti NFS standard, compatibili con le versioni 2, 3 e 4 di NFS.

Deployment di KNFSD in un'architettura ibrida

In un'architettura ibrida, i client NFS in esecuzione su Google Cloud e richiedere i dati quando sono necessari. Queste richieste vengono inviate al proxy KNFSD, che fornisce i dati dalla propria cache locale, se presente. Se i dati non sono nella cache, gestisce la comunicazione con i server on-premise. Il sistema può montare uno o più server di origine NFS. Il proxy gestisce tutte le comunicazioni e la migrazione dei dati necessaria tramite VPN o Dedicated Interconnect per tornare ai server di origine NFS on-premise. Il seguente diagramma mostra Deployment di KNFSD in un'architettura ibrida:

Architettura ibrida che utilizza un deployment KNFSD.

La connettività ibrida non rientra nell'ambito di questo tutorial. Per informazioni su argomenti avanzati come considerazioni per il deployment in un'architettura ibrida, la scalabilità per prestazioni elevate e l'uso di metriche e dashboard per risoluzione dei problemi e ottimizzazione, vedi Argomenti avanzati sul flusso di lavoro.

Obiettivi

  • Eseguire il deployment e il test di un sistema proxy KNFSD.
  • Crea e configura i seguenti componenti in Google Cloud:
    • Un'immagine disco personalizzata
    • Un proxy KNFSD
    • Un server NFS
    • Un client NFS
  • Monta un proxy NFS su un client NFS.
  • Copia un file dal server NFS sul client NFS tramite il proxy NFS.

Costi

In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi basata sull'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud potrebbero essere idonei per una prova gratuita.

Per il tuo utilizzo, considera Costi del traffico in uscita dalla rete per i dati scritti da Google Cloud allo spazio di archiviazione on-premise della connettività ibrida.

Prima di iniziare

Per questa guida di riferimento è necessario un progetto Google Cloud. Puoi creare un nuovo o seleziona un progetto già creato:

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Make sure that billing is enabled for your Google Cloud project.

  3. Enable the Compute Engine API.

    Enable the API

  4. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

  5. Autentica il tuo accesso nel terminale Cloud Shell:

    gcloud auth application-default login
    

    La riga di comando ti guida nel completamento dei passaggi di autorizzazione.

  6. Imposta le variabili di ambiente:

    export GOOGLE_CLOUD_PROJECT=PROJECT_NAME
    gcloud config set project $GOOGLE_CLOUD_PROJECT
    

    Sostituisci PROJECT_NAME con il nome del progetto che che hai creato o selezionato in precedenza.

Al termine delle attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la sezione Pulizia.

Scarica i file di configurazione del tutorial

  1. In Cloud Shell, clona il repository GitHub:

    cd ~/
    git clone https://github.com/GoogleCloudPlatform/knfsd-cache-utils.git
    
  2. Imposta il tag Git su una versione valida (in questo caso v0.9.0):

    cd ~/knfsd-cache-utils
    git checkout tags/v0.9.0
    
  3. Passa alla directory image nel tuo repository di codice:

     cd ~/knfsd-cache-utils/image
    

Configurare la rete

Per semplificare il deployment, questo tutorial utilizza VPC in ogni rete. Per consentirti di utilizzare SSH per connetterti a varie risorse per la configurazione e di monitoraggio, questo tutorial esegue anche il deployment di indirizzi IP esterni.

Best practice e architetture di riferimento per la progettazione di VPC non rientrano nell'ambito di questo tutorial. Tuttavia, quando integri questi in un ambiente ibrido, ti consigliamo di seguire le best practice tra cui:

Per configurare la tua rete, segui questi passaggi:

  • In Cloud Shell, imposta le seguenti variabili:

    export BUILD_MACHINE_NETWORK=default
    export BUILD_MACHINE_SUBNET=default
    

Crea la macchina di build del proxy NFS

In questa sezione, creerai ed eseguirai l'accesso a una VM che funge da proxy NFS per creare una macchina. Esegui quindi uno script di installazione fornito per aggiornare il kernel e installare tutto il software necessario per il sistema proxy KNFSD. L'esecuzione dello script di installazione del software può richiedere alcuni minuti, solo una volta.

  1. In Cloud Shell, imposta le seguenti variabili:

    export BUILD_MACHINE_NAME=knfsd-build-machine
    export BUILD_MACHINE_ZONE=us-central1-a
    export IMAGE_FAMILY=knfsd-proxy
    export IMAGE_NAME=knfsd-proxy-image
    
  2. Avvia l'istanza VM:

    gcloud compute instances create $BUILD_MACHINE_NAME \
      --zone=$BUILD_MACHINE_ZONE \
      --machine-type=n1-standard-16 \
      --project=$GOOGLE_CLOUD_PROJECT \
      --image=ubuntu-2004-focal-v20220615 \
      --image-project=ubuntu-os-cloud \
      --network=$BUILD_MACHINE_NETWORK \
      --subnet=$BUILD_MACHINE_SUBNET \
      --boot-disk-size=20GB \
      --boot-disk-type=pd-ssd \
      --metadata=serial-port-enable=TRUE
    

    Potresti ricevere un messaggio di avviso che indica una discrepanza nelle dimensioni del disco. Puoi ignorare questo messaggio.

  3. Creare un file tar del software richiesto da installare, quindi copiarlo della macchina di compilazione:

    tar -czf resources.tgz -C resources .
    gcloud compute scp resources.tgz build@$BUILD_MACHINE_NAME: \
      --zone=$BUILD_MACHINE_ZONE \
      --project=$GOOGLE_CLOUD_PROJECT
    
  4. Dopo l'avvio della VM, apri un tunnel SSH:

    gcloud compute ssh build@$BUILD_MACHINE_NAME \
      --zone=$BUILD_MACHINE_ZONE \
      --project=$GOOGLE_CLOUD_PROJECT
    
  5. Una volta stabilito il tunnel SSH e la tua riga di comando avrà come target knfsd-build-machine, esegui lo script di installazione:

    tar -zxf resources.tgz
    sudo bash scripts/1_build_image.sh
    

    Lo script clona il repository del codice del kernel di Ubuntu, aggiorna il kernel e installa il software aggiuntivo. Poiché esiste un repository clone coinvolto, il completamento dello script può richiedere molto tempo.

  6. Al termine dello script di installazione e alla visualizzazione di una richiesta SUCCESS, riavvia la macchina di compilazione:

    sudo reboot
    

    Quando la macchina di build viene riavviata, vengono visualizzati i seguenti messaggi:

    WARNING: Failed to send all data from [stdin]
    ERROR: (gcloud.compute.ssh) [/usr/bin/ssh] exited with return code [255]
    

    Questi errori si verificano durante il ripristino di Cloud Shell dal proxy NFS di creare una macchina sul tuo computer host. Puoi ignorare questi errori.

  7. Dopo il riavvio della VM, riapri un tunnel SSH:

    gcloud compute ssh $BUILD_MACHINE_NAME \
      --zone=$BUILD_MACHINE_ZONE \
      --project=$GOOGLE_CLOUD_PROJECT
    
  8. Dopo aver stabilito il tunnel SSH e aver scelto come target la riga di comando sull'istanza nfs-proxy-build, passa a Root e controlla la versione del tuo sistema operativo:

    uname -r
    

    L'output è simile al seguente e indica che il software si aggiorna hanno avuto successo:

    linux <$BUILD_MACHINE_NAME> 5.13.*-gcp ...
    

    Se l'output non è simile all'esempio precedente, completa questa procedura per ricreare la macchina di compilazione del proxy NFS.

  9. Ripulisci il disco locale e arresta la macchina di compilazione:

    sudo bash /home/build/scripts/9_finalize.sh
    

    Verranno visualizzati i seguenti avvisi:

    userdel: user build is currently used by process 1431
    userdel: build mail spool (/var/mail/build) not found
    

    Questi avvisi vengono visualizzati durante il ripristino di Cloud Shell dal proxy NFS di creare una macchina sul tuo computer host. Puoi ignorare questi errori.

Crea l'immagine del disco personalizzata

In questa sezione, creerai una immagine personalizzata dall'istanza. L'immagine personalizzata è archiviata in più regioni Bucket Cloud Storage che si trova negli Stati Uniti.

  1. In Cloud Shell, imposta le seguenti variabili:

    export IMAGE_NAME=knfsd-image
    export IMAGE_DESCRIPTION="first knfsd image from tutorial"
    export IMAGE_LOCATION=us
    
  2. Crea l'immagine disco:

    gcloud compute images create $IMAGE_NAME \
      --project=$GOOGLE_CLOUD_PROJECT \
      --description="$IMAGE_DESCRIPTION" \
      --source-disk=$BUILD_MACHINE_NAME \
      --source-disk-zone=$BUILD_MACHINE_ZONE \
      --storage-location=$IMAGE_LOCATION
    
  3. Dopo aver creato l'immagine disco, elimina l'istanza:

    gcloud compute instances delete $BUILD_MACHINE_NAME \
      --zone=$BUILD_MACHINE_ZONE
    
  4. Quando ti viene chiesto di continuare, inserisci Y.

    Quando elimini l'istanza $BUILD_MACHINE_NAME, viene visualizzato un prompt che indica che i dischi collegati alla VM verranno eliminati. Perché salvato un'immagine personalizzata, non ti serve più questo disco temporaneo sicuro per eliminarlo.

Crea il server di origine NFS

Come detto in precedenza, questa architettura è progettata per connettere le risorse a un file server on-premise. Per semplificare la procedura in questo tutorial, crea una risorsa sostitutiva che viene eseguita nel tuo progetto Google Cloud per simulare questa connessione. Assegna alla risorsa di sostituzione il nome nfs-server. L'installazione e la configurazione del software sono contenute in un script di avvio. Per ulteriori informazioni, esamina lo script, ~/knfsd-cache-utils/tutorial/nfs-server/1_build_nfs-server.sh.

  1. In Cloud Shell, vai agli script nfs-server scaricati directory:

    cd ~/knfsd-cache-utils/tutorial
    
  2. Crea il tuo server NFS autonomo:

    gcloud compute \
      --project=$GOOGLE_CLOUD_PROJECT instances create nfs-server \
      --zone=$BUILD_MACHINE_ZONE \
      --machine-type=n1-highcpu-2 \
      --maintenance-policy=MIGRATE \
      --image-family=ubuntu-2004-lts \
      --image-project=ubuntu-os-cloud \
      --boot-disk-size=100GB \
      --boot-disk-type=pd-standard \
      --boot-disk-device-name=nfs-server \
      --metadata-from-file startup-script=nfs-server-startup.sh
    

    Il completamento di questo script può richiedere alcuni minuti. Potresti visualizzare un avviso che indica che le dimensioni del disco sono inferiori a 200 GB. Puoi ignorare questo avviso.

Crea il proxy NFS

In questa sezione, creerai il proxy NFS. All'avvio, il proxy configura lo spazio di archiviazione locale, prepara le opzioni di montaggio per il server NFS ed esporta i risultati memorizzati nella cache. Un script di avvio fornito orchestra gran parte di questo flusso di lavoro.

  1. In Cloud Shell, imposta la variabile seguente:

    export PROXY_NAME=nfs-proxy
    
  2. Crea la VM nfs-proxy:

    gcloud compute instances create $PROXY_NAME \
      --machine-type=n1-highmem-16 \
      --project=$GOOGLE_CLOUD_PROJECT \
      --maintenance-policy=MIGRATE \
      --zone=$BUILD_MACHINE_ZONE \
      --min-cpu-platform="Intel Skylake" \
      --image=$IMAGE_NAME \
      --image-project=$GOOGLE_CLOUD_PROJECT \
      --boot-disk-size=20GB \
      --boot-disk-type=pd-standard \
      --boot-disk-device-name=$PROXY_NAME \
      --local-ssd=interface=NVME \
      --local-ssd=interface=NVME \
      --local-ssd=interface=NVME \
      --local-ssd=interface=NVME \
      --metadata-from-file startup-script=proxy-startup.sh
    

    Potrebbe essere visualizzato un messaggio di avviso che indica che le dimensioni del disco sono inferiori a 200 GB. Puoi ignora questo avviso.

    Lo script di avvio configura i comandi mount NFS e consente di ottimizzare di un sistema operativo completo. Le impostazioni per la versione NFS, sincronizzazione o asincrona, nocto e actimeo sono alcune delle variabili che potresti voler ottimizzare tramite lo script di avvio. Per ulteriori informazioni su queste impostazioni, vedi ottimizzazione del file system NFS.

    Il comando in questo passaggio definisce il flag --metadata-from-file, che e inserisce lo script di avvio nel modello di immagine. In questo tutorial imparerai a usa un semplice script proxy-startup.sh. Lo script include alcune preimpostazioni e non include molte opzioni che potresti utilizzare integrare nella pipeline. Per casi d'uso più avanzati, consulta knfsd-cache-utils Repository GitHub.

Crea il client NFS

In questo passaggio, creerai un singolo client NFS (denominato nfs-client) da utilizzare per quella che probabilmente sarebbe una Gruppo di istanze gestite e su larga scala.

  • In Cloud Shell, crea il tuo client NFS:

    gcloud compute \
      --project=$GOOGLE_CLOUD_PROJECT instances create nfs-client \
      --zone=$BUILD_MACHINE_ZONE \
      --machine-type=n1-highcpu-8 \
      --network-tier=PREMIUM \
      --maintenance-policy=MIGRATE \
      --image-family=ubuntu-2004-lts \
      --image-project=ubuntu-os-cloud \
      --boot-disk-size=10GB \
      --boot-disk-type=pd-standard \
      --boot-disk-device-name=nfs-client
    

    Potrebbe essere visualizzato un messaggio di avviso che indica che le dimensioni del disco sono inferiori a 200 GB. Puoi ignora questo avviso.

Monta il proxy NFS sul client NFS

In questo passaggio, apri una sessione SSH separata sul client NFS e quindi monoli il proxy NFS. Utilizzerai la stessa shell per testare il sistema nella prossima sezione.

  1. Nella console Google Cloud, vai alla pagina Istanze VM.

    Vai a Istanze VM

  2. Per connetterti a nfs-client, fai clic su SSH nella colonna Connetti.

  3. Nella finestra SSH di nfs-client, installa gli strumenti NFS necessari sulla nfs-client:

    sudo apt-get install nfs-common -y
    
  4. Crea un punto di montaggio e monta il proxy NFS:

    sudo mkdir /data
    sudo mount -t nfs -o vers=3 nfs-proxy:/data /data
    

Testa il sistema

Tutte le risorse sono state create. In questa sezione viene eseguito un test copiando un file dal server NFS sul client NFS tramite il proxy NFS. La la prima volta che esegui questo test, i dati provengono dal server di origine. Può richiedere più di un minuto.

La seconda volta che esegui questo test, i dati vengono forniti da una cache negli SSD locali del proxy NFS. Questo trasferimento richiede molto meno è il tempo necessario per copiare i dati, per verificare che la memorizzazione nella cache acceleri i dati trasferimento.

  1. Nella finestra SSH di nfs-client aperta nella sezione precedente, copia il file test e visualizza l'output corrispondente:

    time dd if=/data/test.data of=/dev/null iflag=direct bs=1M status=progress
    

    L'output è simile al seguente, che contiene una riga che mostra dimensioni del file, tempi e velocità di trasferimento:

    10737418240 bytes (11 GB, 10 GiB) copied, 88.5224 s, 121 MB/s
    real    1m28.533s
    

    In questo trasferimento, il file viene fornito dal disco permanente dell'interfaccia NFS di rete, perciò è limitato dalla velocità del disco del server NFS.

  2. Esegui lo stesso comando una seconda volta:

    time dd if=/data/test.data of=/dev/null iflag=direct bs=1M status=progress
    

    L'output è simile al seguente, che contiene una riga che mostra dimensioni del file, tempi e velocità di trasferimento:

    10737418240 bytes (11 GB, 10 GiB) copied, 9.41952 s, 948 MB/s
    real    0m9.423s
    

    In questo trasferimento, il file viene fornito dalla cache nel proxy NFS, quindi completa più velocemente.

Hai completato il deployment e i test del proxy di memorizzazione nella cache KNFSD.

Argomenti avanzati sul flusso di lavoro

Questa sezione include informazioni sul deployment in un'architettura ibrida, la scalabilità per prestazioni elevate e l'uso di metriche e dashboard per risoluzione dei problemi e ottimizzazione.

Caratteristiche prestazionali e dimensionamento delle risorse

Come indicato in precedenza, questo tutorial utilizza un singolo proxy KNFSD. Pertanto, la scalabilità del sistema comporta la modifica delle singole risorse proxy ottimizzare CPU, RAM, networking, capacità di archiviazione o prestazioni. In questo hai eseguito il deployment di KNFSD su una singola VM di Compute Engine le seguenti opzioni:

  • 16 vCPU, 104 GB di RAM (n1-highmem-16).
    • Con 16 vCPU e un'architettura di Sandy Bridge o più recente, consente una velocità di rete massima di 32 Gbit/s.
  • disco permanente da 10 GB come disco di avvio.
  • 4 dischi SSD locali. Questa configurazione fornisce un file ad alta velocità da 1, 5 TB. di un sistema operativo completo.

Sebbene non rientri nell'ambito di questo tutorial, puoi scalare dell'architettura creando più proxy KNFSD in un gruppo di istanze gestite e utilizzando un Bilanciatore del carico TCP per gestire le connessioni tra i client NFS e i proxy NFS. Per maggiori informazioni, consulta il knfsd-cache-utils repository GitHub che contiene script Terraform, codice di esempio per il deployment e varie domande frequenti che riguardano il ridimensionamento dei carichi di lavoro.

Considerazioni per un deployment ibrido

In molti deployment, la larghezza di banda della connessione da on-premise il cloud è un fattore importante da considerare durante la configurazione del sistema. Ibrido e la connettività non rientra nell'ambito di questo tutorial. Per una panoramica delle vedi le opzioni documentazione sulla connettività ibrida. Per indicazioni sulle best practice e i pattern di progettazione, consulta la serie Creare architetture ibride e multi-cloud utilizzando Google Cloud.

Esplorazione delle metriche

Le dashboard possono essere utili per fornire feedback sulle metriche da utilizzare dell'ottimizzazione delle prestazioni e della risoluzione dei problemi generali. L'esplorazione delle metriche non rientra nell'ambito di questo tutorial, tuttavia, viene messa a disposizione una dashboard delle metriche quando esegui il deployment del sistema multi-nodo definito nel repository GitHub knfsd-cache-utils.

Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

Elimina il progetto

Il modo più semplice per eliminare la fatturazione è quello di eliminare il progetto nel tutorial.

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Passaggi successivi