Mirroring da Cloud Storage

Un mirror Cloud Storage fornisce un servizio di sincronizzazione automatizzato e basato sugli eventi che esegue continuamente il mirroring dei file da un bucket Cloud Storage a una directory Managed Lustre. Il mirroring è supportato in una sola direzione, da Cloud Storage a Managed Lustre.

I mirror di Cloud Storage sono disponibili solo su richiesta. Per indicare il tuo interesse, invia il modulo di richiesta di mirroring di Cloud Storage.

Per ricevere assistenza con i mirror di Cloud Storage attivi, contatta google-cloud-managed-lustre-support@google.com.

Mirror di Cloud Storage rispetto ai trasferimenti di dati on demand

Managed Lustre supporta due meccanismi per lo spostamento dei dati con Cloud Storage:

Funzionalità Mirror di Cloud Storage Trasferimenti di dati on demand
Direzione Da Cloud Storage a Managed Lustre Da Cloud Storage a Managed Lustre

Da Managed Lustre a Cloud Storage
Trigger Basata su eventi; si sincronizza automaticamente alla creazione, all'aggiornamento e all'eliminazione degli oggetti Manuale
Spazio dei nomi gerarchico Non supportata Supportato e consigliato per velocità di trasferimento accelerate
Bucket Rapid Storage Non supportata Non supportata

Per informazioni sui trasferimenti on demand, consulta Trasferisci dati da o verso Cloud Storage.

Come funziona un mirror di Cloud Storage

Un mirror di Cloud Storage esegue trasferimenti basati su eventi tra un'origine Cloud Storage e una directory Managed Lustre di destinazione. L'origine Cloud Storage può essere un bucket o un prefisso di oggetto specifico all'interno di un bucket. Il mirroring viene eseguito in due fasi: una sincronizzazione iniziale quando crei il mirror, seguita dalla replica continua delle modifiche successive.

Sincronizzazione iniziale

Quando crei un mirror di Cloud Storage, il servizio esegue una sincronizzazione iniziale per copiare tutti gli oggetti esistenti dal percorso Cloud Storage di origine alla directory Managed Lustre di destinazione.

Replica continua basata su eventi

Dopo la sincronizzazione iniziale, il servizio di mirroring rimane in ascolto delle notifiche del bucket e replica le modifiche.

La maggior parte degli oggetti può essere replicata nell'ordine di minuti. Quando un oggetto viene creato o modificato, l'intero file viene copiato.

  • La creazione di un nuovo oggetto in Cloud Storage crea automaticamente il file corrispondente in Managed Lustre.

  • La modifica di un oggetto esistente in Cloud Storage sovrascrive il file in Managed Lustre, ignorando eventuali modifiche locali apportate nel file system.

  • Le modifiche agli attributi dei metadati POSIX personalizzati sugli oggetti Cloud Storage, come UID, GID, modalità o mtime, vengono aggiornate nel file Managed Lustre corrispondente.

  • L'eliminazione di un oggetto in Cloud Storage elimina per impostazione predefinita il file sottoposto a mirroring in Managed Lustre. Puoi modificare questo comportamento utilizzando il flag --deleted-files-retained. Le directory principali vuote rimangono nel file system dopo l'eliminazione dell'ultimo file al loro interno.

  • Le modifiche apportate in Managed Lustre ai file sottoposti a mirroring non vengono copiate nel bucket di origine. Se l'oggetto di origine viene aggiornato in un secondo momento, il file Managed Lustre viene sovrascritto con i contenuti dell'oggetto di origine, ignorando eventuali modifiche locali.

  • L'eliminazione di un file sottoposto a mirroring in Managed Lustre non elimina l'oggetto corrispondente in Cloud Storage.

Velocità di trasferimento

Le seguenti velocità di trasferimento si applicano ai mirror di Cloud Storage i cui bucket e istanze si trovano nella stessa regione Google Cloud :

  • La sincronizzazione iniziale copia i dati esistenti fino a 100 GBps per i file di dimensioni superiori a 32 MB e fino a 10.000 oggetti al secondo per i file di piccole dimensioni.

  • La replica continua sincronizza automaticamente le modifiche in corso, con prestazioni di trasferimento che variano in base alle dimensioni dei file:

    • I file di grandi dimensioni (10 MB o più) vengono trasferiti con una velocità effettiva di picco fino a 3,5 GBps.
    • I file di piccole dimensioni (4 kB o meno) vengono trasferiti a una velocità massima di 4900 oggetti al secondo.

Se i dati vengono scritti in Cloud Storage più velocemente di quanto il mirror possa copiarli, gli eventi vengono messi in coda in un backlog, aumentando il tempo necessario per la visualizzazione delle modifiche in Managed Lustre. Il mirror si aggiorna automaticamente quando la frequenza delle modifiche diminuisce.

La velocità di trasferimento è limitata da:

  • Il throughput massimo di un'istanza, ovvero la capacità dell'istanza moltiplicata per il livello di prestazioni.

  • Larghezza di banda in uscita di Cloud Storage, limitata a 200 Gbps o 25 GBps per regione per progetto. Per ottenere una larghezza di banda in uscita più elevata, richiedi un aumento della quota.

  • Latenza di rete per i trasferimenti tra regioni. Per prestazioni ottimali, posiziona il bucket di origine e l'istanza nella stessa regione.

Prezzi

Un mirror di Cloud Storage comporta addebiti standard di Cloud Storage, che vengono fatturati al progetto che contiene il bucket di origine:

  • La sincronizzazione iniziale esegue operazioni di elenco di classe A e operazioni di lettura di classe B sul bucket di origine, mentre la replica continua esegue operazioni di lettura di classe B, che comportano costi operativi di Cloud Storage.
  • La replica dei dati da un bucket di origine in una regione diversa da quella dell'istanza Managed Lustre comporta costi di trasferimento dei dati tra regioni.

Prima di iniziare

La creazione di un mirror Cloud Storage richiede:

  • Un'istanza Managed Lustre nello stato ACTIVE.
  • Un bucket Cloud Storage esistente da utilizzare come origine del mirror. I bucket con spazio dei nomi gerarchico abilitato, i bucket Rapid Storage e i bucket con Pagamenti a carico del richiedente abilitato non sono supportati.

Autorizzazioni, ruoli e risorse richiesti

Per creare e gestire i mirror di Cloud Storage sono necessari i seguenti ruoli, risorse e autorizzazioni IAM.

Autorizzazioni utente

Per creare e gestire i mirror, il tuo account utente o di servizio deve disporre del ruolo Amministratore di Managed Lustre, roles/lustre.admin.

Se utilizzi un ruolo personalizzato, il ruolo richiede le seguenti autorizzazioni:

  • lustre.mirrors.create per creare un mirror.
  • lustre.mirrors.get per descrivere uno specchio.
  • lustre.mirrors.list per elencare i mirror.
  • lustre.mirrors.update per aggiornare un mirror.
  • lustre.mirrors.delete

Inizializzazione dell'agente di servizio Cloud Storage

L'agente di servizio Cloud Storage deve esistere nel tuo progetto in modo che possa pubblicare eventi di notifica del bucket:

gcloud storage service-agent --project=PROJECT_ID

Sostituisci PROJECT_ID con l'ID progetto Google Cloud .

Autorizzazioni dell'agente di servizio Managed Lustre

L'agente di servizio Managed Lustre gestito da Google richiede l'accesso al bucket Cloud Storage di origine. Per istruzioni su come trovare o inizializzare l'identità dell'agente di servizio, consulta Agente di servizio Managed Lustre.

L'agente di servizio richiede le seguenti autorizzazioni sul bucket Cloud Storage di origine:

  • storage.buckets.get
  • storage.buckets.update
  • storage.objects.get
  • storage.objects.list

Crea un ruolo personalizzato contenente queste autorizzazioni:

gcloud iam roles create lustreMirrorUser \
  --project=PROJECT_ID \
  --title="Lustre mirror user" \
  --permissions=storage.buckets.get,storage.buckets.update,storage.objects.get,storage.objects.list

Concedi il ruolo personalizzato all'agente di servizio Managed Lustre nel bucket di origine:

gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
  --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-lustre.iam.gserviceaccount.com" \
  --role="projects/PROJECT_ID/roles/lustreMirrorUser"

Sostituisci quanto segue:

  • PROJECT_ID: l'ID progetto Google Cloud .
  • BUCKET_NAME: il nome del bucket Cloud Storage di origine.
  • PROJECT_NUMBER: il tuo numero di progetto Google Cloud .

Crea un mirror di Cloud Storage

Puoi creare un mirror di Cloud Storage per ogni istanza di Managed Lustre.

Non è possibile creare un mirror di Cloud Storage mentre è in corso un'operazione di importazione o esportazione nell'istanza.

gcloud

Esegui il comando mirrors create:

gcloud lustre instances mirrors create MIRROR_NAME \
  --instance=INSTANCE_ID \
  --location=LOCATION \
  --direction=from-cloud-storage \
  --gcs-path-uri="gs://BUCKET_NAME/PREFIX/" \
  --lustre-path="/LUSTRE_DIRECTORY"

Dove:

  • MIRROR_NAME è il nome di questa risorsa di mirroring. Deve contenere da 1 a 63 caratteri, includere solo lettere minuscole, numeri e trattini, iniziare con una lettera e terminare con una lettera o un numero.
  • INSTANCE_ID è l'ID istanza Managed Lustre.
  • LOCATION è la zona dell'istanza. Ad esempio, us-central1-a.
  • --direction specifica la direzione del mirroring. Deve essere from-cloud-storage.
  • --gcs-path-uri è il bucket Cloud Storage di origine e il prefisso facoltativo dell'oggetto. Se specifichi un prefisso dell'oggetto, il percorso deve terminare con una barra: gs://<var>BUCKET_NAME</var>/<var>PREFIX</var>/.
  • --lustre-path è la directory di destinazione nel file system Managed Lustre. Deve essere un percorso assoluto che inizia con /, ad esempio /data o /data/subdir. Il valore predefinito è la directory root, /. Se la directory specificata non esiste, viene creata.

Sono disponibili i seguenti parametri facoltativi:

  • --deleted-files-retained o --no-deleted-files-retained: controlla se i file eliminati in Cloud Storage vengono conservati in Managed Lustre. Il valore predefinito è --no-deleted-files-retained.
  • --description=DESCRIPTION_TEXT: una descrizione facoltativa per il mirror.

REST

Invia una richiesta POST al metodo instances.mirrors.create:

POST https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID/mirrors?mirrorId=MIRROR_NAME
Authorization: Bearer YOUR_ACCESS_TOKEN
Content-Type: application/json

{
  "gcsPath": {
    "uri": "gs://BUCKET_NAME/PREFIX/"
  },
  "lustrePath": {
    "path": "/LUSTRE_DIRECTORY"
  },
  "direction": "FROM_CLOUD_STORAGE"
}

Dove:

  • PROJECT_ID è l'ID progetto Google Cloud .
  • LOCATION è la zona della tua istanza Managed Lustre. Ad esempio, us-central1-a.
  • INSTANCE_ID è l'ID istanza.
  • MIRROR_NAME è il nome di questa risorsa di mirroring. Deve contenere da 1 a 63 caratteri, includere solo lettere minuscole, numeri e trattini, iniziare con una lettera e terminare con una lettera o un numero.
  • gcsPath contiene un campo uri con il bucket Cloud Storage di origine e il prefisso dell'oggetto facoltativo. Se specifichi un prefisso dell'oggetto, il percorso deve terminare con una barra: gs://<var>BUCKET_NAME</var>/<var>PREFIX</var>/.
  • lustrePath è la directory di destinazione nel file system Managed Lustre. Deve essere un percorso assoluto che inizia con /, ad esempio /data o /data/subdir. Il valore predefinito è la directory root, /. Se la directory specificata non esiste, viene creata.
  • direction specifica la direzione del mirroring. Deve essere FROM_CLOUD_STORAGE.

Il corpo della richiesta supporta anche i seguenti campi facoltativi:

  • deletedFilesRetained: impostalo su true per conservare i file in Managed Lustre dopo l'eliminazione dei file corrispondenti da Cloud Storage. Il valore predefinito è false.
  • description: una descrizione facoltativa per il mirror.

Attributi dei file

Quando un file viene copiato da un bucket Cloud Storage a un'istanza Managed Lustre, gli attributi del file nell'istanza Managed Lustre vengono impostati in uno dei due modi seguenti:

  • Se l'oggetto Cloud Storage ha metadati personalizzati come descritto per l'esportazione dei dati, allora:
    • UID, GID, modalità e mtime del file vengono impostati in base ai metadati personalizzati dell'oggetto.
    • L'attributo atime del file è impostato sullo stesso valore di mtime.
  • Se l'oggetto Cloud Storage non dispone dei metadati personalizzati:
    • L'UID e il GID del file sono impostati su 0 (root).
    • La modalità del file è impostata su rwxr-xr-x (755).
    • atime e mtime del file sono impostati sull'ora di creazione dell'oggetto Cloud Storage.

In entrambi i casi:

  • Il valore ctime di un file viene impostato sull'ora in cui il file è stato scritto nell'istanza.
  • atime, ctime e mtime di una directory sono impostati sull'ora in cui la directory è stata creata nell'istanza.

Gestisci i mirror di Cloud Storage

Puoi elencare, descrivere, aggiornare ed eliminare i mirror di Cloud Storage utilizzando lo strumento Google Cloud CLI o l'API REST. Per modificare il percorso di origine o di destinazione di un mirror esistente, devi eliminare il mirror esistente e crearne uno nuovo.

Elenca un mirror

Per visualizzare un mirror configurato su un'istanza:

gcloud

gcloud lustre instances mirrors list \
  --instance=INSTANCE_ID \
  --location=LOCATION

REST

Invia una richiesta GET al metodo instances.mirrors.list:

GET https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID/mirrors
Authorization: Bearer YOUR_ACCESS_TOKEN

Descrivi uno specchio

Per visualizzare la configurazione e lo stato di attività di un mirror:

gcloud

gcloud lustre instances mirrors describe MIRROR_NAME \
  --instance=INSTANCE_ID \
  --location=LOCATION

REST

Invia una richiesta GET al metodo instances.mirrors.get:

GET https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID/mirrors/MIRROR_NAME
Authorization: Bearer YOUR_ACCESS_TOKEN

Stati di mirroring

Il campo state restituito dai comandi list e describe indica la fase del ciclo di vita in cui si trova il mirror:

Stato Descrizione
CREATING La risorsa mirror è in fase di creazione.
INITIAL_SYNC La sincronizzazione iniziale copia gli oggetti esistenti da Cloud Storage.
ACTIVE Il mirror sincronizza le modifiche man mano che si verificano.
DELETING Il mirror è in fase di eliminazione.

Aggiorna un mirror

Puoi aggiornare la descrizione, le etichette e l'opzione per conservare i file eliminati di un mirror.

I percorsi di Cloud Storage e Managed Lustre non possono essere modificati. Per indirizzare un mirror a un percorso diverso, eliminalo e creane uno nuovo.

L'aggiornamento di un mirror non comporta la nuova esecuzione della sincronizzazione iniziale.

gcloud

gcloud lustre instances mirrors update MIRROR_NAME \
  --instance=INSTANCE_ID \
  --location=LOCATION \
  --description="DESCRIPTION_TEXT"

REST

Invia una richiesta PATCH al metodo instances.mirrors.patch con un parametro di query updateMask:

PATCH https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID/mirrors/MIRROR_NAME?updateMask=description
Authorization: Bearer YOUR_ACCESS_TOKEN
Content-Type: application/json

{
  "description": "DESCRIPTION_TEXT"
}

Elimina un mirror

Per eliminare un mirror:

gcloud

gcloud lustre instances mirrors delete MIRROR_NAME \
  --instance=INSTANCE_ID \
  --location=LOCATION

REST

Invia una richiesta DELETE al metodo instances.mirrors.delete:

DELETE https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID/mirrors/MIRROR_NAME
Authorization: Bearer YOUR_ACCESS_TOKEN

L'eliminazione di un mirror interrompe la sincronizzazione futura tra Cloud Storage e Managed Lustre. I file già copiati in Managed Lustre non vengono eliminati quando viene rimosso il mirror.

I trasferimenti di file in corso quando viene eliminato un mirror vengono interrotti. I trasferimenti incompleti potrebbero lasciare file temporanei con il formato del nome FILENAME.cloud_transfer.UUID.NUMBER.tmp nella directory di mirroring dopo l'eliminazione del mirror. Puoi eliminare questi file.

Visualizza i log

I log di mirroring identificano i singoli file che non sono stati sincronizzati.

I log vengono indirizzati a Cloud Logging in base alla risorsa lustre.googleapis.com/Instance, con il nome log mirror.

Per visualizzare i log delle operazioni di mirroring:

  1. Vai a Esplora log.
  2. Inserisci la seguente query:

    resource.type="lustre.googleapis.com/Instance"
    logName="projects/PROJECT_ID/logs/lustre.googleapis.com%2Fmirror"
    resource.labels.instance_id="INSTANCE_ID"
    

Risoluzione dei problemi

Errori PERMISSION_DENIED nel bucket di origine

Se la creazione del mirror non riesce con un errore PERMISSION_DENIED, i file non vengono sincronizzati o sono presenti log che mostrano errori "PERMISSION_DENIED":

  1. Verifica che l'agente di servizio Cloud Storage sia stato inizializzato:

    gcloud storage service-agent --project=PROJECT_ID
    
  2. Verifica che all'agente di servizio Managed Lustre siano state concesse le autorizzazioni richieste per il bucket di origine. Per i dettagli, consulta Concedi le autorizzazioni per l'agente di servizio.

Le modifiche in Cloud Storage non vengono replicate in Managed Lustre

Se lo stato del mirror è ACTIVE, ma gli oggetti nuovi o modificati in Cloud Storage non vengono visualizzati in Managed Lustre, verifica che la configurazione della notifica del bucket esista nel bucket di origine.

  1. Elenca le notifiche del bucket:

    gcloud storage buckets notifications list --bucket=BUCKET_NAME
    
  2. Se l'output è vuoto, devi eliminare il mirror esistente e crearne uno nuovo:

    gcloud lustre instances mirrors delete MIRROR_NAME \
      --instance=INSTANCE_ID \
      --location=LOCATION
    

    Al termine dell'eliminazione, crea un nuovo mirror.

Errori di conflitto di nomi

Se noti che mancano dei file in Managed Lustre dopo averli aggiunti a Cloud Storage, controlla Cloud Logging per verificare la presenza di errori di conflitto di nomi:

  • Se un oggetto creato in Cloud Storage ha lo stesso nome di una directory esistente in Managed Lustre, il trasferimento non va a buon fine con un errore file exists e la directory esistente non viene sovrascritta. Il trasferimento non riuscito lascia un file temporaneo con il formato del nome FILENAME.cloud_transfer.UUID.NUMBER.tmp nella directory principale.
  • Se un oggetto creato in Cloud Storage contiene un prefisso di percorso che corrisponde a un file normale esistente in Managed Lustre, il trasferimento non va a buon fine con un errore not a directory e il file esistente non viene sovrascritto. Ad esempio, se models è un file esistente in Managed Lustre, il trasferimento di un oggetto denominato models/weights.bin da Cloud Storage non va a buon fine perché non è possibile creare la directory models/.

Per risolvere questi conflitti, rinomina o elimina la directory o il file in conflitto in Managed Lustre, rimuovi eventuali file .tmp rimanenti e carica nuovamente l'oggetto in Cloud Storage per attivare la sincronizzazione.

ABORTED: unable to queue the operation

Se ricevi un errore ABORTED: unable to queue the operation durante la creazione di un mirror o l'avvio di un job di trasferimento on demand:

  • Prima di creare un mirror, assicurati che nell'istanza non siano in esecuzione operazioni import-data o export-data esistenti.
  • Attendi il completamento della creazione del mirror e della sincronizzazione iniziale prima di tentare altre operazioni sui dati amministrativi nell'istanza.

FILESYSTEM_NO_SPACE_ON_DEVICE

Se il mirroring si interrompe e i log indicano errori di spazio, il file system Managed Lustre potrebbe aver esaurito gli inode o la capacità del disco. Puoi eliminare i file non necessari per liberare spazio o aumentare la capacità di archiviazione per espandere il file system.