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.
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ù apprezzate al momento e, da giugno 2005, viene utilizzata costantemente da almeno la metà dei primi dieci e da più di 60 dei 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. Innanzitutto, Google Cloud ha collaborato con DDN per portare il software DDN EXAScaler Lustre di livello enterprise supportato su Google Cloud Marketplace. In secondo luogo, i nostri ingegneri di Google Cloud hanno sviluppato e reso open source un insieme di script per configurare e implementare facilmente un cluster di archiviazione Lustre su Google Compute Engine utilizzando 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 ti interessa avere un'esperienza Lustre aziendale e consolidata, con l'assistenza di esperti Lustre per il tuo cluster Lustre, oltre a funzionalità come una GUI di gestione e monitoraggio o le ottimizzazioni Lustre, ti consigliamo di esaminare l'offerta di Marketplace DDN EXAScaler.
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 I/O semplici sul 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:
Fai clic su Crea progetto.
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, dovrai abilitare la fatturazione in Developers Console per poter utilizzare le risorse Google Cloud.
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 dei prezzi della piattaforma Google Cloud è disponibile qui.
I nuovi utenti della piattaforma Google Cloud possono beneficiare di una prova senza costi di 300$.
Google Cloud Shell
Sebbene Google Cloud possa 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
Nella console Google Cloud, fai clic sull'icona di Cloud Shell nella barra degli strumenti in alto a destra:
Quindi, fai clic su Avvia Cloud Shell:
L'operazione dovrebbe richiedere solo pochi istanti:
Questa macchina virtuale contiene tutti gli strumenti di sviluppo di cui avrai bisogno. 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 del 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 di Lustre
Scarica gli script di Lustre Deployment Manager
Nella sessione Cloud Shell, esegui il seguente comando per clonare (scaricare) il repository Git contenente i file di deployment-manager di Lustre per la piattaforma 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 il file YAML del deployment Lustre
Deployment Manager utilizza un file YAML per fornire la configurazione del deployment. Questo file YAML descrive in dettaglio la configurazione del deployment, ad esempio la versione di Lustre di cui eseguire il deployment e i tipi di istanze di macchina di cui eseguire il deployment. Il file è configurato per impostazione predefinita per il deployment in un nuovo progetto senza aumenti di quota, ma puoi modificare il tipo di macchina o la capacità in base alle tue esigenze per questo codelab. Questo codelab è scritto per utilizzare questi valori predefiniti, quindi se apporti modifiche, devi applicarle 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 Cloud Shell, apri il file YAML di configurazione del deployment Lustre-cluster.yaml
. Per visualizzare i contenuti del file, puoi utilizzare l'editor di riga di comando che preferisci (vi, nano, emacs e così via) o l'editor di codice di Cloud Console:
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 di seguito contrassegnati da 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
- zone* - La 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 è false, 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: la subnet VPC esistente in 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 di E2fsprogs da implementare. Utilizza "latest" per implementare il ramo più recente da https://downloads.whamcloud.com/public/e2fsprogs/ o X.XX.X.wcX per implementare qualsiasi altra versione
Configurazione MDS/MGS
- mds_ip_address: 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: il 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* - Dimensioni del disco MDT in GB
Configurazione OSS
- oss_node_count* - Numero di nodi Object Storage Server (OSS) 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: il 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.
Al termine del deployment, visualizzerai 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
Per visualizzare il deployment nella console della piattaforma Google Cloud:
- Nella console della piattaforma Cloud, apri il menu Prodotti e servizi nell'angolo in alto a sinistra della console (tre linee 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 seguendo i passaggi descritti in "Pulizia del deployment" e riavvialo seguendo i passaggi descritti in "Configura il file YAML del deployment di 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.
Nella pagina Istanze VM, esamina le cinque istanze di macchine virtuali create dal gestore del deployment. 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.
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 attendere 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 il file system è pronto per essere utilizzato.
Accedere al cluster Lustre
Nella sessione Cloud Shell, fai clic sul pulsante SSH accanto all'istanza lustre-mds1 nella console Google Cloud. In alternativa, esegui il seguente comando 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. Si tratta dell'istanza Lustre Metadata Server (MDS), che funge anche da 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 i seguenti 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 il cui nome è "lustre", visualizzato 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. Panoramica degli strumenti CLI di Lustre
Se non hai dimestichezza con Lustre e i suoi strumenti, di seguito sono riportati alcuni comandi importanti.
Lo strumento di gestione dei cluster a basso livello di Lustre è "lctl". Possiamo utilizzare lctl per configurare e gestire il cluster Lustre e per visualizzare i servizi del cluster Lustre. Per visualizzare i servizi e le istanze nel 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 informazioni sugli altri servizi, consulta il manuale di Lustre.
Lo strumento di configurazione del file system di Lustre è "lfs". Possiamo utilizzare lfs per gestire lo striping dei file sui nostri server Lustre Object Storage (OSS) e sui rispettivi Object Storage Target (OST), nonché per eseguire operazioni comuni del file system come find, df e la gestione delle quote.
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 su quante più unità OSS possibili spesso offra le migliori prestazioni parallelizzando l'I/O, lo striping di un file di piccole dimensioni potrebbe comportare prestazioni inferiori rispetto a quelle che si otterrebbero scrivendo il file in una singola istanza.
Per verificare, impostiamo due directory, una con un conteggio di strisce pari a un OSS e una con un conteggio di strisce pari a "-1", a indicare che i file scritti in quella directory devono essere suddivisi su quanti più OSS possibile. Le directory possono contenere configurazioni di striping che vengono ereditate dai file creati al loro interno, ma le sottodirectory e i singoli file all'interno di quella directory possono essere configurati per essere suddivisi in modo diverso, se lo si desidera. Per creare queste due directory, esegui i seguenti comandi nella 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 delle strisce di un file o di una directory utilizzando lfs getstripe:
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 suddiviso su più OSS.
7. Testare l'I/O di Lustre
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 il seguente 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 il seguente comando:
sudo dd if=/dev/zero of=stripe_all/test bs=1M count=5000
Tieni presente che abbiamo modificato "of=stripe_one/test" in "of=stripe_all/test". In questo modo, la scrittura singola stream distribuirà le scritture su tutti i nostri server di archiviazione oggetti e completerà la scrittura in media in 5,5 secondi, circa 4 volte più velocemente con quattro OSS.
Queste prestazioni continuano ad aumentare man mano che aggiungi server di archiviazione oggetti e puoi aggiungere OSS con il file system online e iniziare a suddividere i dati per aumentare la capacità e le prestazioni online. Le possibilità sono infinite con Lustre sulla piattaforma Google Cloud 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 integrarlo con il tuo cluster di calcolo basato su cloud.
Ripulire il deployment
Uscire dal nodo Lustre:
exit
Puoi ripulire facilmente il deployment al termine eseguendo il seguente 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. Attendi.
Elimina il progetto
Per la pulizia, eliminiamo semplicemente il 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 il team di Google Cloud oggi stesso tramite il sito web di Google Cloud dedicato al calcolo ad alte prestazioni.
Scopri di più
Feedback
Invia un feedback su questo codelab utilizzando questo link. La compilazione del feedback richiede meno di 5 minuti. Grazie.