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:
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:
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.
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:
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Compute Engine API.
-
In the Google Cloud console, activate Cloud Shell.
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.
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.
Una volta completate le attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la pagina Pulizia.
Scarica i file di configurazione del tutorial
In Cloud Shell, clona il repository GitHub:
cd ~/ git clone https://github.com/GoogleCloudPlatform/knfsd-cache-utils.git
Imposta il tag Git su una versione valida (in questo caso
v0.9.0
):cd ~/knfsd-cache-utils git checkout tags/v0.9.0
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:
- Crea risorse Compute Engine senza indirizzi IP esterni.
- Crea la connettività a internet per le VM private per configurare il software.
- Utilizza Identity-Aware Proxy (IAP) per l'inoltro TCP per la connessione alle risorse.
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.
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
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.
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
Dopo l'avvio della VM, apri un tunnel SSH:
gcloud compute ssh build@$BUILD_MACHINE_NAME \ --zone=$BUILD_MACHINE_ZONE \ --project=$GOOGLE_CLOUD_PROJECT
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.
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.
Dopo il riavvio della VM, riapri un tunnel SSH:
gcloud compute ssh $BUILD_MACHINE_NAME \ --zone=$BUILD_MACHINE_ZONE \ --project=$GOOGLE_CLOUD_PROJECT
Dopo aver stabilito il tunnel SSH e aver scelto come target la riga di comando sull'istanza
nfs-proxy-build
, passa aRoot
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.
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.
In Cloud Shell, imposta le seguenti variabili:
export IMAGE_NAME=knfsd-image export IMAGE_DESCRIPTION="first knfsd image from tutorial" export IMAGE_LOCATION=us
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
Dopo aver creato l'immagine disco, elimina l'istanza:
gcloud compute instances delete $BUILD_MACHINE_NAME \ --zone=$BUILD_MACHINE_ZONE
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
.
In Cloud Shell, vai agli script
nfs-server
scaricati directory:cd ~/knfsd-cache-utils/tutorial
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.
In Cloud Shell, imposta la variabile seguente:
export PROXY_NAME=nfs-proxy
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
eactimeo
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 scriptproxy-startup.sh
. Lo script include alcune preimpostazioni e non include molte opzioni che potresti utilizzare integrare nella pipeline. Per casi d'uso più avanzati, consultaknfsd-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.
Nella console Google Cloud, vai alla pagina Istanze VM.
Per connetterti a
nfs-client
, fai clic su SSH nella colonna Connetti.Nella finestra SSH di
nfs-client
, installa gli strumenti NFS necessari sullanfs-client
:sudo apt-get install nfs-common -y
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.
Nella finestra SSH di
nfs-client
aperta nella sezione precedente, copia il filetest
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.
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.
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Passaggi successivi
- Scopri di più su best practice per la gestione delle immagini.
- Scopri di più sulle lavoro svolto con la community di sviluppatori Linux sulla riesportazione NFS.
- Scopri di più sulla gestione e sulla configurazione complessive NFS su Ubuntu.
- Scopri di più sulla scalabilità di un deployment KNFSD utilizzando gruppi di istanze gestite
di Google Cloud nel
knfsd-cache-utils
Repository GitHub. - Per altre architetture di riferimento, diagrammi e best practice, esplora il Centro architetture cloud.