Esegui il deployment di un file system parallelo Lustre su Google Cloud

1. Panoramica

Ti diamo il benvenuto nel Codelab di Google per l'esecuzione di un cluster di file system parallelo Lustre sulla piattaforma Google Cloud.

d51beef5f729cbe9.png

I dati sono fondamentali per la pratica del calcolo ad alte prestazioni e l'accesso a grandi quantità di dati a velocità estremamente elevate e a basse latenze è sempre stata una sfida chiave nell'esecuzione di carichi di lavoro HPC. Questo requisito di archiviazione ad alte prestazioni non è cambiato nel cloud e, di fatto, la possibilità di utilizzare grandi quantità di spazio di archiviazione in modo rapido e semplice è diventata fondamentale.

I centri HPC soddisfano da tempo questa esigenza on-premise utilizzando tecnologie come il file system parallelo Lustre. Lustre è una delle soluzioni di archiviazione open source ad alte prestazioni più popolari oggi e dal giugno 2005 è stato costantemente utilizzato da almeno la metà dei primi dieci e da più di 60 dei primi 100 supercomputer più veloci al mondo. Lustre è in grado di scalare fino a centinaia di PB di capacità e di offrire le massime prestazioni possibili per i job HPC, con sistemi che offrono TB/s di throughput in un unico spazio dei nomi.

Per soddisfare la domanda di spazio di archiviazione, Google Cloud ha adottato due approcci. In primo luogo, Google Cloud ha collaborato con DDN per portare il suo software supportato di livello enterprise DDN EXAScaler Lustre su Google Cloud Marketplace. Secondo, i tecnici di Google Cloud hanno sviluppato e reso open source una serie di script per configurare ed eseguire facilmente il deployment di un cluster di archiviazione Lustre su Google Compute Engine mediante Google Cloud Deployment Manager.

Lustre sulla piattaforma Google Cloud è ugualmente in grado di offrire le massime prestazioni dell'infrastruttura su cui è in esecuzione. Le sue prestazioni su Google Cloud sono così buone che nel 2019 si è classificato all'ottavo posto nel benchmark del sistema di archiviazione IO-500 con il nostro partner DDN, rappresentando il file system basato su cloud con il ranking più alto in IO-500. Oggi ti guideremo nella procedura di deployment degli script di Deployment Manager open source per Lustre. Se vuoi avere un'esperienza Lustre più protetta e aziendale, con l'assistenza di un esperto Lustre per il tuo cluster Lustre, nonché funzionalità come una GUI di gestione e monitoraggio o le ottimizzazioni Lustre, ti consigliamo di esaminare l'offerta di DDN EXAScaler Marketplace.

Obiettivi didattici

  • Come utilizzare il servizio Deployment Manager di Google Cloud
  • Come configurare ed eseguire il deployment di un file system Lustre su Google Cloud.
  • Come configurare lo striping e testare l'I/O semplice nel file system Lustre.

Prerequisiti

  • Account Google Cloud e un progetto con fatturazione
  • Esperienza Linux di base

2. Configurazione

Configurazione dell'ambiente a tuo ritmo

Crea un progetto

Se non hai ancora un Account Google (Gmail o G Suite), devi crearne uno. Accedi alla console della piattaforma Google Cloud (console.cloud.google.com) e apri la pagina Gestisci risorse:

359c06e07e6d699f.png

Fai clic su Crea progetto.

25c23d651abb837b.png

Inserisci un nome per il progetto. Ricorda l'ID progetto (evidenziato in rosso nello screenshot sopra). L'ID progetto deve essere un nome univoco per tutti i progetti Google Cloud. Se il nome del progetto non è univoco, Google Cloud genererà un ID progetto casuale in base al nome del progetto.

Successivamente, per utilizzare le risorse Google Cloud, dovrai abilitare la fatturazione in Developers Console.

L'esecuzione di questo codelab non dovrebbe costarti più di qualche dollaro, ma potrebbe essere più cara se decidi di utilizzare più risorse o se le lasci in esecuzione (vedi la sezione "Conclusione" alla fine di questo documento). Il Calcolatore prezzi di Google Cloud è disponibile qui.

I nuovi utenti della piattaforma Google Cloud hanno diritto a una prova senza costi di$300.

Google Cloud Shell

Anche se Google Cloud può essere utilizzato da remoto dal tuo laptop, in questo codelab utilizzeremo Google Cloud Shell, un ambiente a riga di comando in esecuzione nel cloud.

Avvia Google Cloud Shell

Dalla console di Google Cloud, fai clic sull'icona di Cloud Shell nella barra degli strumenti in alto a destra:

dbad104cef962719.png

Quindi, fai clic su Avvia Cloud Shell:

4e50db320508ac88.png

Dovrebbe richiedere solo qualche istante per eseguire il provisioning e connettersi all'ambiente:

20b0aa80492144d.png

Questa macchina virtuale viene caricata con tutti gli strumenti di sviluppo necessari. Offre una home directory permanente da 5 GB e viene eseguita su Google Cloud, migliorando notevolmente le prestazioni della rete e semplificando l'autenticazione. Gran parte, se non tutto, del lavoro in questo laboratorio può essere svolto semplicemente con un browser web o un Chromebook Google.

Una volta eseguita la connessione a Cloud Shell, dovresti vedere che il tuo account è già autenticato e il progetto è già impostato sul tuo PROJECT_ID:

$ gcloud auth list

Output del comando:

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
$ gcloud config list project

Output comando:

[core]
project = <PROJECT_ID>

Se l'ID progetto non è impostato correttamente, puoi impostarlo con questo comando:

$ gcloud config set project <PROJECT_ID>

Output del comando:

Updated property [core/project].

3. Prepara e rivedi la configurazione del deployment Lustre

Scarica gli script di Lustre Deployment Manager

Nella sessione di Cloud Shell, esegui questo comando per clonare (scaricare) il repository Git che contiene i file deployment-manager della piattaforma Lustre per Google Cloud:

git clone https://github.com/GoogleCloudPlatform/deploymentmanager-samples.git

Passa alla directory di configurazione del deployment Lustre eseguendo il seguente comando:

cd deploymentmanager-samples/community/lustre/

Configura YAML deployment Lustre

Deployment Manager utilizza un file YAML per fornire la configurazione del deployment. Questo file YAML mostra in dettaglio la configurazione del deployment, ad esempio la versione Lustre di cui eseguire il deployment e i tipi di istanze della macchina di cui eseguire il deployment. Per impostazione predefinita, il file è configurato per il deployment in un nuovo progetto senza aumenti di quota, ma puoi modificare il tipo di macchina o la capacità come preferisci per questo codelab. Questo codelab è scritto per utilizzare queste impostazioni predefinite, quindi se apporti modifiche devi portarle in tutto il codelab per evitare errori. In produzione, consigliamo almeno un'istanza con 32 vCPU per il nodo MDS e almeno un'istanza con 8 o 16 vCPU per i nodi OSS, a seconda della capacità e del tipo di archiviazione.

Per esaminare o modificare il file YAML nella sessione di Cloud Shell, apri il file YAML di configurazione del deployment Lustre-cluster.yaml. Puoi utilizzare il tuo editor a riga di comando preferito (vi, nano, emacs e così via) o l'editor di codice di Cloud Console per visualizzare i contenuti del file:

11efd5af658f1842.png

I contenuti del file saranno simili al seguente:

# [START cluster_yaml]
imports:
- path: lustre.jinja

resources:
- name: lustre
  type: lustre.jinja
  properties:
    ## Cluster Configuration
    cluster_name            : lustre
    zone                    : us-central1-f
    cidr                    : 10.20.0.0/16
    external_ips            : True
    ### Use these fields to deploy Lustre in an existing VPC, Subnet, and/or Shared VPC
    #vpc_net                 : < VPC Network Name >
    #vpc_subnet              : < VPC Subnet Name >
    #shared_vpc_host_proj    : < Shared VPC Host Project name >

    ## Filesystem Configuration
    fs_name                 : lustre
    ### Review https://downloads.whamcloud.com/public/ to determine version naming
    lustre_version          : latest-release
    e2fs_version            : latest

    ## Lustre MDS/MGS Node Configuration
    #mds_node_count          : 1
    mds_ip_address          : 10.20.0.2
    mds_machine_type        : n1-standard-8
    ### MDS/MGS Boot disk
    mds_boot_disk_type      : pd-standard
    mds_boot_disk_size_gb   : 10
    ### Lustre MetaData Target disk
    mdt_disk_type           : pd-ssd
    mdt_disk_size_gb        : 1000

    ## Lustre OSS Configuration
    oss_node_count          : 4
    oss_ip_range_start      : 10.20.0.5
    oss_machine_type        : n1-standard-4
    ### OSS Boot disk
    oss_boot_disk_type      : pd-standard
    oss_boot_disk_size_gb   : 10
    ### Lustre Object Storage Target disk
    ost_disk_type           : pd-standard
    ost_disk_size_gb        : 5000
#  [END cluster_yaml]

All'interno di questo file YAML sono presenti diversi campi. I campi indicati di seguito con un asterisco (*) sono obbligatori. Questi campi includono:

Configurazione del cluster

  • cluster_name* - Nome del cluster Lustre, anteposto a tutte le risorse di cui è stato eseguito il deployment
  • zona* - Zona in cui eseguire il deployment del cluster
  • cidr* - Intervallo IP in formato CIDR
  • external_ips* - Vero/Falso, i nodi Lustre hanno indirizzi IP esterni. Se il valore è false, significa che Cloud NAT è configurato come gateway NAT
  • vpc_net: definisci questo campo e il campo vpc_subnet per eseguire il deployment del cluster Lustre in un VPC esistente
  • vpc_subnet - Subnet VPC esistente su cui eseguire il deployment del cluster Lustre
  • shared_vpc_host_proj: definisci questo campo, nonché i campi vpc_net e vpc_subnet, per eseguire il deployment del cluster in un VPC condiviso

Configurazione del file system

  • fs_name: nome del file system Lustre
  • lustre_version: la versione di Lustre da eseguire, utilizza "latest-release" per eseguire il deployment del ramo più recente da https://downloads.whamcloud.com/public/lustre/ o lustre-X.X.X per eseguire il deployment di altre versioni
  • e2fs_version - La versione E2fsprogs di cui eseguire il deployment. Usa "il più recente" per eseguire il deployment del ramo più recente da https://downloads.whamcloud.com/public/e2fsprogs/ o X.XX.X.wcX per eseguire il deployment di qualsiasi altra versione

Configurazione MDS/MGS

  • mds_ip_address: l'indirizzo IP interno da specificare per il nodo MDS/MGS
  • mds_machine_type: il tipo di macchina da utilizzare per il nodo MDS/MGS (vedi https://cloud.google.com/compute/docs/machine-types)
  • mds_boot_disk_type: tipo di disco da utilizzare per il disco di avvio MDS/MGS (pd-standard, pd-ssd)
  • mds_boot_disk_size_gb: dimensioni del disco di avvio MDS in GB
  • mdt_disk_type* - Tipo di disco da utilizzare per il disco Metadata Target (MDT) (pd-standard, pd-ssd, local-ssd)
  • mdt_disk_size_gb*: dimensione del disco MDT in GB

Configurazione OSS

  • oss_node_count* - Numero di nodi OSS (Object Storage Server) da creare
  • oss_ip_range_start - Inizio dell'intervallo IP per i nodi OSS. Se non specificato, utilizza l'assegnazione IP automatica
  • oss_machine_type: il tipo di macchina da utilizzare per i nodi OSS
  • oss_boot_disk_type: tipo di disco da utilizzare per il disco di avvio OSS (pd-standard, pd-ssd)
  • oss_boot_disk_size_gb: dimensioni del disco di avvio MDS in GB
  • ost_disk_type* - Tipo di disco da utilizzare per il disco Object Storage Target (OST) (pd-standard, pd-ssd, local-ssd)
  • ost_disk_size_gb*: dimensioni del disco OST in GB

4. Eseguire il deployment e la verifica della configurazione

Esegui il deployment della configurazione

Nella sessione Cloud Shell, esegui il seguente comando dalla cartella Lustre-gcp:

gcloud deployment-manager deployments create lustre --config lustre.yaml

Questo comando crea un deployment denominato Lustre. Il completamento dell'operazione può richiedere fino a 10-20 minuti, quindi abbi pazienza.

Una volta completato il deployment, vedrai un output simile al seguente:

Create operation operation-1572410719018-5961966591cad-e25384f6-d4c905f8 completed successfully.
NAME                                TYPE                   STATE      ERRORS  INTENT
lustre-all-internal-firewall-rule  compute.v1.firewall    COMPLETED  []
lustre-lustre-network              compute.v1.network     COMPLETED  []
lustre-lustre-subnet               compute.v1.subnetwork  COMPLETED  []
lustre-mds1                        compute.v1.instance    COMPLETED  []
lustre-oss1                        compute.v1.instance    COMPLETED  []
lustre-oss2                        compute.v1.instance    COMPLETED  []
lustre-oss3                        compute.v1.instance    COMPLETED  []
lustre-oss4                        compute.v1.instance    COMPLETED  []
lustre-ssh-firewall-rule           compute.v1.firewall    COMPLETED  []

Verifica il deployment

5f2a0557d3f2476f.png

Segui questi passaggi per visualizzare il deployment nella console di Google Cloud Platform:

  • Nella console di Cloud Platform, apri il menu Prodotti e servizi nell'angolo in alto a sinistra della console (tre righe orizzontali).
  • Fai clic su Deployment Manager.
  • Fai clic su Lustre per visualizzare i dettagli del deployment.
  • Fai clic su Panoramica - Lustre. Il riquadro Proprietà di deployment mostra la configurazione complessiva del deployment.
  • Fai clic su "Visualizza" nella proprietà Config. Il riquadro Configurazione mostra i contenuti del file YAML di configurazione del deployment modificato in precedenza. Verifica che i contenuti siano corretti prima di procedere. Se devi modificare la configurazione di un deployment, eliminalo in base ai passaggi descritti in "Pulisci il deployment" e riavvialo seguendo i passaggi descritti in "Configurare YAML deployment Lustre".
  • (Facoltativo) Nella sezione Lustre-cluster, fai clic su ciascuna delle risorse create dal modello Lustre.jinja ed esamina i dettagli.

Dopo aver verificato la configurazione del deployment, confermiamo che le istanze del cluster siano avviate. Nella console della piattaforma Cloud, nel menu Prodotti e servizi, fai clic su Compute Engine > Istanze VM.

aec8498e04a3c334.png

Nella pagina Istanze VM, esamina le cinque istanze di macchine virtuali create da Deployment Manager. Sono inclusi lustre-mds1, lustre-oss1, lustre-oss2, lustre-oss3 e lustre-oss4.

5. Accedere al cluster Lustre

Monitora l'installazione

Nella pagina Istanze VM, fai clic su lustre-mds1 per aprire la pagina Dettagli istanza.

ba0bea7acdbb9527.png

Fai clic su Porta seriale 1 (console) per aprire la pagina di output della console seriale. Utilizzeremo questo output seriale per monitorare il processo di installazione dell'istanza MDS e attenderemo il completamento dello script di avvio. Fai clic sul pulsante "Aggiorna" nella parte superiore della pagina per aggiornare l'output seriale. Il nodo si riavvierà una volta per avviarsi nel kernel Lustre e mostrerà messaggi simili a quelli riportati di seguito:

Startup finished in 838ms (kernel) + 6.964s (initrd) + 49.302s (userspace) = 57.105s.
Lustre: lustre-MDT0000: Connection restored to 374e2d80-0b31-0cd7-b2bf-de35b8119534 (at 0@lo)

Ciò significa che Lustre è installato sul cluster Lustre e che il file system è pronto per essere utilizzato.

Accedere al cluster Lustre

Nella sessione di Cloud Shell, fai clic sul pulsante SSH accanto all'istanza lustre-mds1 nella console Google Cloud. In alternativa, esegui il comando seguente in Cloud Shell, sostituendo <ZONE> con la zona del nodo lustre-mds1:

gcloud compute ssh lustre-mds1 --zone=<ZONE>

Questo comando consente di accedere alla macchina virtuale lustre-mds1. Questa è l'istanza Lustre Metadata Server (MDS), che agisce anche come istanza Lustre Management Server (MGS). Questa istanza gestisce tutte le richieste di autenticazione e metadati per il file system.

Montiamo il file system sulla nostra istanza lustre-mds1 per poterlo testare in un secondo momento. Esegui questi comandi:

sudo mkdir /mnt/lustre
sudo mount -t lustre lustre-mds1:/lustre /mnt/lustre
cd /mnt/lustre

Questi tre comandi eseguono tre operazioni. Il primo comando crea una directory locale che utilizzeremo come punto di montaggio in "/mnt/lustre". Il secondo comando esegue il comando "mount" per montare il file system di tipo "lustre", che si trova sul server lustre-mds1, e dove il nome del file system è "lustre", visto come "/lustre". Il comando mount monta il file system Lustre nella directory locale "/mnt/lustre". Infine, il terzo comando passa alla directory /mnt/lustre, in cui è montato Lustre.

Ora hai montato il file system Lustre in /mnt/lustre. Vediamo cosa possiamo fare con questo file system.

6. Tour degli strumenti dell'interfaccia a riga di comando Lustre

Se non hai dimestichezza con Lustre e i suoi strumenti, di seguito sono riportati alcuni comandi importanti.

Lo strumento di gestione dei cluster di basso livello di Lustre è "lctl". Possiamo utilizzare lctl per configurare e gestire il cluster Lustre e per visualizzare i relativi servizi. Per visualizzare i servizi e le istanze nel nostro nuovo cluster Lustre, esegui:

sudo lctl dl

Vedrai un output simile a quello riportato di seguito, a seconda delle modifiche apportate al file di configurazione YAML di Lustre:

  0 UP osd-ldiskfs lustre-MDT0000-osd lustre-MDT0000-osd_UUID 11
  1 UP mgs MGS MGS 12
  2 UP mgc MGC10.128.15.2@tcp 374e2d80-0b31-0cd7-b2bf-de35b8119534 4
  3 UP mds MDS MDS_uuid 2
  4 UP lod lustre-MDT0000-mdtlov lustre-MDT0000-mdtlov_UUID 3
  5 UP mdt lustre-MDT0000 lustre-MDT0000_UUID 12
  6 UP mdd lustre-MDD0000 lustre-MDD0000_UUID 3
  7 UP qmt lustre-QMT0000 lustre-QMT0000_UUID 3
  8 UP lwp lustre-MDT0000-lwp-MDT0000 lustre-MDT0000-lwp-MDT0000_UUID 4
  9 UP osp lustre-OST0000-osc-MDT0000 lustre-MDT0000-mdtlov_UUID 4
 10 UP osp lustre-OST0002-osc-MDT0000 lustre-MDT0000-mdtlov_UUID 4
 11 UP osp lustre-OST0001-osc-MDT0000 lustre-MDT0000-mdtlov_UUID 4
 12 UP osp lustre-OST0003-osc-MDT0000 lustre-MDT0000-mdtlov_UUID 4

Possiamo vedere il nostro Lustre Management Server (MGS) come elemento 1, il nostro Lustre Metadata Server (MDS) come elemento 3, il nostro Lustre Metadata Target (MDT) come elemento 5 e i nostri quattro Lustre Object Storage Server (OSS) come elementi da 8 a 12. Per capire quali sono gli altri servizi, consulta il manuale di Lustre.

Lo strumento di configurazione del file system di Lustre è "lfs". Possiamo utilizzare gli lfs per gestire lo striping dei file sui nostri server di archiviazione di oggetti Lustre (OSS) e le rispettive destinazioni di archiviazione degli oggetti (OST), nonché per eseguire operazioni comuni di file system come la gestione di Find, df e quota.

Lo striping ci consente di configurare la modalità di distribuzione di un file nel nostro cluster Lustre per offrire le migliori prestazioni possibili. Sebbene lo striping di un file di grandi dimensioni sul maggior numero possibile di OSS garantisca le prestazioni migliori mediante il caricamento in contemporanea dell’IO, lo striping di un file di piccole dimensioni potrebbe portare a prestazioni peggiori rispetto a quando il file viene scritto in una sola istanza.

Per verificare questo, configuriamo due directory, una con un conteggio di stripe di un OSS e una con un numero di stripe pari a "-1", a indicare che i file scritti in quella directory devono essere sottoposti a striping sul maggior numero possibile di OSS. Le directory possono contenere configurazioni di striping ereditate dai file creati al loro interno, ma le sottodirectory e i singoli file al loro interno possono essere configurati per essere sottoposti a striping in modo diverso, se necessario. Per creare queste due directory, esegui i comandi seguenti dalla directory "/mnt/lustre":

sudo mkdir stripe_one
sudo mkdir stripe_all
sudo lfs setstripe -c 1 stripe_one/
sudo lfs setstripe -c -1 stripe_all/

Puoi visualizzare le impostazioni stripe di un file o di una directory utilizzando getstripe lfs:

sudo lfs getstripe stripe_all/

Vedrai un output che mostra il conteggio delle strisce impostato su -1:

stripe_all/
stripe_count:  -1 stripe_size:   1048576 pattern:    raid0 stripe_offset: -1

Ora siamo pronti a testare i miglioramenti delle prestazioni ottenibili scrivendo un file di grandi dimensioni con striping su più software open source.

7. Testa Lustre I/O

Eseguiremo due semplici test di I/O Lustre per dimostrare i possibili vantaggi in termini di prestazioni e le funzionalità di scalabilità del file system Lustre. Innanzitutto, eseguiremo un semplice test utilizzando l'utilità "dd" per scrivere un file di 5 GB nella nostra directory "stripe_one". Esegui questo comando:

sudo dd if=/dev/zero of=stripe_one/test bs=1M count=5000

La procedura di scrittura di 5 GB di dati nel file system richiede in media circa 27 secondi, se la scrittura avviene su un singolo disco permanente (PD) su un singolo server di archiviazione oggetti (OSS).

Per testare lo striping su più OSS e, di conseguenza, su più PD, dobbiamo semplicemente modificare la directory di output in cui scriviamo. Esegui questo comando:

sudo dd if=/dev/zero of=stripe_all/test bs=1M count=5000

Nota che abbiamo cambiato "of=stripe_one/test" in "of=stripe_all/test". Ciò consentirà alla nostra singola scrittura di flusso di distribuire le sue scritture su tutti i nostri server di archiviazione di oggetti e di completare la scrittura in media 5, 5 secondi, circa 4 volte più rapidamente con quattro OSS.

Le prestazioni continuano ad aumentare man mano che aggiungi server di archiviazione di oggetti ed è possibile aggiungere OSS con il file system online e iniziare a eseguire lo striping dei dati per aumentare capacità e prestazioni online. Le possibilità sono infinite utilizzando Lustre su Google Cloud Platform e non vediamo l'ora di scoprire cosa puoi creare e quali problemi puoi risolvere.

8. Conclusione

Congratulazioni, hai creato un cluster Lustre sulla piattaforma Google Cloud. Puoi utilizzare questi script come punto di partenza per creare il tuo cluster Lustre e per integrarlo con il tuo cluster di computing basato su cloud.

Ripulire il deployment

Uscire dal nodo Lustre:

exit

Al termine, puoi eseguire facilmente la pulizia del deployment eseguendo questo comando da Google Cloud Shell, dopo aver eseguito la disconnessione dal cluster Lustre:

gcloud deployment-manager deployments delete lustre

Quando viene richiesto, digita Y per continuare. Questa operazione può richiedere del tempo, ti chiediamo di avere pazienza.

Elimina il progetto

Per fare la pulizia, basta eliminare il nostro progetto.

  • Nel menu di navigazione, seleziona IAM e amministrazione
  • Poi fai clic su Impostazioni nel sottomenu
  • Fai clic sull'icona del cestino con il testo "Elimina progetto"
  • Segui le istruzioni dei prompt.

Argomenti trattati

  • Come utilizzare il servizio Deployment Manager di Google Cloud.
  • Come configurare ed eseguire il deployment di un file system Lustre su Google Cloud.
  • Come configurare lo striping e testare I/O semplici sul file system Lustre.

Trovare assistenza

Stai creando qualcosa di interessante utilizzando gli script di Deployment Manager di Lustre? Domande? Chatta con noi nel gruppo di discussione Google Cloud Lustre. Per richiedere funzionalità, fornire feedback o segnalare bug, utilizza questo modulo oppure non esitare a modificare il codice e inviare una pull request. Vuoi parlare con un esperto di Google Cloud? Contatta oggi stesso il team di Google Cloud tramite il sito web dedicato al computing ad alte prestazioni di Google Cloud.

Scopri di più

Feedback

Invia un feedback su questo codelab utilizzando questo link. La compilazione del feedback richiede meno di 5 minuti. Grazie.