Questa sezione illustra come configurare il backup e il ripristino dei dati per l'anello del database Apache Cassandra installato il piano di runtime ibrido Apigee. Vedi anche Datastore Cassandra.
Cosa devi sapere sui backup di Cassandra
Cassandra è un database replicato configurato per avere almeno tre copie dei dati in ogni regione o data center. Cassandra utilizza la replica in modalità flusso e le riparazioni di lettura per gestire le repliche dei dati in ogni regione o data center in un dato punto.
In ibrido, i backup di Cassandra non sono abilitati per impostazione predefinita. Tuttavia, è buona norma abilitare i backup di Cassandra nel caso in cui i tuoi dati vengano per errore.
Di cosa viene eseguito il backup?
La configurazione di backup descritta in questo argomento esegue il backup delle seguenti entità:
- Schema Cassandra incluso lo schema utente (definizioni dello spazio chiavi Apigee)
- Informazioni sul token di partizione Cassandra per nodo
- Uno snapshot dei dati di Cassandra
Dove vengono archiviati i dati di backup?
I dati di cui è stato eseguito il backup vengono archiviati in un bucket Google Cloud Storage che devi creare. La creazione e la configurazione dei bucket sono trattate in questo argomento.
Pianificazione dei backup di Cassandra
I backup sono pianificati come job cron
nel piano di runtime. Per programmare
Backup di Cassandra:
- Esegui questo
create-service-account
per creare un account di servizio Google Cloud (SA) con il comandoroles/storage.objectAdmin
. Questo ruolo SA ti consente di scrivere i dati di backup in Cloud Storage. Esegui questo comando nell'installazione ibrida directory principale: Ad esempio:./tools/create-service-account apigee-cassandra OUTPUT_DIR
Per ulteriori informazioni sugli account di servizio Google Cloud, consulta Creare e gestire gli account di servizio../tools/create-service-account apigee-cassandra ./service-accounts
- Il comando
create-service-account
salva un file JSON contenente la chiave privata dell'account di servizio. Il file viene salvato nella stessa directory in cui viene eseguito il comando. Ti servirà il percorso di questo file nei passaggi successivi. - Crea un bucket Cloud Storage. Specifica un criterio di conservazione dei dati ragionevole per il bucket. Apigee consiglia un criterio di conservazione dei dati di 15 giorni.
- Apri il file
overrides.yaml
. - Aggiungi le seguenti proprietà di
cassandra.backup
per abilitare il backup. Non rimuovere le proprietà già configurate.Parametri
cassandra: ... backup: enabled: true serviceAccountPath: SA_JSON_FILE_PATH dbStorageBucket: CLOUD_STORAGE_BUCKET_PATH schedule: BACKUP_SCHEDULE_CODE ...
Esempio
... cassandra: storage: type: gcepd capacity: 50Gi gcepd: replicationType: regional-pd sslRootCAPath: "/Users/myhome/ssh/cassandra.crt" sslCertPath: "/Users/myhome/ssh/cassandra.crt" sslKeyPath: "/Users/myhome/ssh/cassandra.key" auth: default: password: "abc123" admin: password: "abc234" ddl: password: "abc345" dml: password: "abc456" nodeSelector: key: cloud.google.com/gke-nodepool value: apigee-data backup: enabled: true serviceAccountPath: "/Users/myhome/.ssh/my_cassandra_backup.json" dbStorageBucket: "gs://myname-cassandra-backup" schedule: "45 23 * * 6" ...
Dove:
- Applica le modifiche alla configurazione al nuovo cluster. Ad esempio:
./apigeectl apply -f overrides.yaml
Proprietà | Descrizione |
---|---|
backup:enabled |
Il backup è disattivato per impostazione predefinita. Devi impostare questa proprietà su true . |
backup:serviceAccountPath |
SA_JSON_FILE_PATH Il percorso sul tuo file system all'account di servizio
File JSON scaricato durante l'esecuzione di |
backup:dbStorageBucket |
CLOUD_STORAGE_BUCKET_PATH Il percorso del bucket Cloud Storage nel seguente formato: |
backup:schedule |
BACKUP_SCHEDULE_CODE L'ora di avvio del backup, specificata in
sintassi standard di crontab. Valore predefinito: |
Ripristino dei backup in corso...
Il ripristino recupera i dati dalla posizione del backup e li ripristina in un nuovo cluster Cassandra con lo stesso numero di nodi. Nessun dato viene estratto dal vecchio cluster Cassandra.
Le istruzioni di ripristino riportate di seguito si riferiscono ai deployment in una singola regione che utilizzano Google Cloud Storage per i backup. Per altri deployment, consulta quanto segue:
- Per i deployment a regione singola che non utilizzano Google Cloud Storage per i backup, consulta Backup e ripristino senza Google Cloud.
- Per i deployment multiregionali, consulta Deployment in più regioni su GKE e GKE On-Prem.
Per ripristinare i backup di Cassandra:
- Creare un nuovo spazio dei nomi all'interno del cluster Kubernetes esistente che per ripristinare il deployment del runtime ibrido. Non utilizzare il nome dello spazio dei nomi originale per il nuovo spazio dei nomi. Non utilizzare il vecchio spazio dei nomi per il ripristino.
- Nella directory di installazione ibrida principale, crea un nuovo file
overrides-restore.yaml
. - Copia la configurazione completa di Cassandra dal file
overrides.yaml
originale nel nuovo fileoverrides-restore.yaml
. Vedi il comando seguente per un esempio.cp ./overrides.yaml ./overrides-restore.yaml
- Aggiungi un elemento dello spazio dei nomi al nuovo file
overrides-restore.yaml
. Non utilizzare lo stesso spazio dei nomi utilizzato per il cluster originale.Parametri
namespace: YOUR_RESTORE_NAMESPACE cassandra: ... restore: enabled: true snapshotTimestamp: TIMESTAMP serviceAccountPath: SA_JSON_FILE_PATH dbStorageBucket: CLOUD_STORAGE_BUCKET_PATH image: pullPolicy: Always ...
Esempio
... namespace: cassandra-restore cassandra: storage: type: gcepd capacity: 50Gi gcepd: replicationType: regional-pd sslRootCAPath: "/Users/myhome/ssh/cassandra.crt" sslCertPath: "/Users/myhome/ssh/cassandra.crt" sslKeyPath: "/Users/myhome/ssh/cassandra.key" auth: default: password: "abc123" admin: password: "abc234" ddl: password: "abc345" dml: password: "abc456" nodeSelector: key: cloud.google.com/gke-nodepool value: apigee-data restore: enabled: true snapshotTimestamp: "20210203213003" serviceAccountPath: "/Users/myhome/.ssh/my_cassandra_backup.json" dbStorageBucket: "gs://myname-cassandra-backup" image: pullPolicy: Always ...
Dove:
Proprietà Descrizione namespace
YOUR_RESTORE_NAMESPACE
Il nome del nuovo spazio dei nomi che hai creato nel passaggio 1 per il nuovo cluster Cassandra. Non utilizzare lo stesso spazio dei nomi che hai utilizzato per cluster originale.
restore:enabled
Il ripristino è disattivato per impostazione predefinita. Devi impostare questa proprietà su true
.restore:snapshotTimestamp
TIMESTAMP
Il timestamp dello snapshot del backup da ripristinare. Per verificare quali timestamp possono essere utilizzati, vai a
dbStorageBucket
e controlla i file presenti nel bucket. Ogni nome file contiene un valore timestamp come il seguente:backup_20210203213003_apigee-cassandra-default-0.tgz
dove 20210203213003 è il valore
snapshotTimestamp
che useresti se volessi ripristinare i backup creati in quel momento.restore:serviceAccountPath
SA_JSON_FILE_PATH
Il percorso nel file system all'account di servizio che hai creato per il backup.
restore:dbStorageBucket
CLOUD_STORAGE_BUCKET_PATH
Il percorso del bucket Cloud Storage in cui sono archiviati i dati di backup nel seguente formato:
gs://BUCKET_NAME
gs://
è obbligatorio. - Modifica l'etichetta
app
su qualsiasi nodo Cassandra nello spazio dei nomi precedente eseguendo il comando seguente comando:kubectl label pods --overwrite --namespace=OLD_NAMESPACE -l app=apigee-cassandra app=apigee-cassandra-old
- Crea un nuovo deployment del runtime ibrido. Verrà creato un nuovo cluster Cassandra e verrà avviata
ripristinando i dati di backup nel cluster:
./apigeectl init -f ../overrides-restore.yaml
./apigeectl apply -f ../overrides-restore.yaml
-
Una volta completato il ripristino, il traffico deve essere convertito in modo da utilizzare la Cassandra nel nuovo spazio dei nomi. Esegui i seguenti comandi per trasferire il traffico:
kubectl get rs -n OLD_NAMESPACE # look for the 'apigee-connect' replicaset
kubectl patch rs -n OLD_NAMESPACE APIGEE_CONNECT_RS_NAME -p '{"spec":{"replicas" : 0}}'
- Una volta completato il trasferimento del traffico, puoi riconfigurare i backup sul cluster ripristinato rimuovendo la configurazione
restore
e aggiungendo la configurazionebackup
al fileoverrides-restore.yaml
. Sostituisci YOUR_RESTORE_NAMESPACE con il nuovo nome dello spazio dei nomi creato nel passaggio 1.namespace: YOUR_RESTORE_NAMESPACE cassandra: ... backup: enabled: true serviceAccountPath: SA_JSON_FILE_PATH dbStorageBucket: CLOUD_STORAGE_BUCKET_PATH schedule: BACKUP_SCHEDULE_CODE ...
Quindi applica la configurazione
backup
con il seguente comando:./apigeectl apply -f ../overrides-restore.yaml
Visualizzazione dei log di ripristino
Puoi controllare i log del job di ripristino e usare grep
per controllare error
per
assicurati che il log di ripristino non contenga errori.
Verificare il completamento del ripristino
Utilizza il seguente comando per verificare se l'operazione di ripristino è stata completata:
kubectl get pods
L'output è simile al seguente:
NAME READY STATUS RESTARTS AGE apigee-cassandra-default-0 1/1 Running 0 1h apigee-cassandra-default-1 1/1 Running 0 1h apigee-cassandra-default-2 1/1 Running 0 59m apigee-cassandra-restore-b4lgf 0/1 Completed 0 51m
Visualizza i log di ripristino
Utilizza il seguente comando per visualizzare i log di ripristino:
kubectl logs -f apigee-cassandra-restore-b4lgf
L'output è simile al seguente:
Restore Logs: Activated service account credentials for: [apigee-cassandra-backup-svc@gce-myusername.iam.gserviceaccount.com] to download file gs://gce-myusername-apigee-cassandra-backup/apigeecluster/dc-1/backup_20190405011309_schema.tgz INFO: download successfully extracted the backup files from gs://gce-myusername-apigee-cassandra-backup/apigeecluster/dc-1 finished downloading schema.cql to create schema from 10.32.0.28 Warnings : dclocal_read_repair_chance table option has been deprecated and will be removed in version 4.0 dclocal_read_repair_chance table option has been deprecated and will be removed in version 4.0 Warnings : dclocal_read_repair_chance table option has been deprecated and will be removed in version 4.0 dclocal_read_repair_chance table option has been deprecated and will be removed in version 4.0 INFO: the schema has been restored starting apigee-cassandra-default-0 in default starting apigee-cassandra-default-1 in default starting apigee-cassandra-default-2 in default 84 95 106 waiting on waiting nodes $pid to finish 84 Activated service account credentials for: [apigee-cassandra-backup-svc@gce-myusername.iam.gserviceaccount.com] Activated service account credentials for: [apigee-cassandra-backup-svc@gce-myusername.iam.gserviceaccount.com] Activated service account credentials for: [apigee-cassandra-backup-svc@gce-myusername.iam.gserviceaccount.com] INFO: restore downloaded tarball and extracted the file from gs://gce-myusername-apigee-cassandra-backup/apigeecluster/dc-1 INFO: restore downloaded tarball and extracted the file from gs://gce-myusername-apigee-cassandra-backup/apigeecluster/dc-1 INFO: restore downloaded tarball and extracted the file from gs://gce-myusername-apigee-cassandra-backup/apigeecluster/dc-1 INFO 12:02:28 Configuration location: file:/etc/cassandra/cassandra.yaml …... INFO 12:02:41 [Stream #e013ee80-5863-11e9-8458-353e9e3cb7f9] All sessions completed Summary statistics: Connections per host : 3 Total files transferred : 2 Total bytes transferred : 0.378KiB Total duration : 5048 ms Average transfer rate : 0.074KiB/s Peak transfer rate : 0.075KiB/s progress: [/10.32.1.155]0:1/1 100% 1:1/1 100% [/10.32.0.28]1:1/1 100% 0:1/1 100% [/10.32.3.220]0:1/1 100% 1:1/1 100% total: 100% 0.000KiB/s (avg: 0.074KiB/s) INFO 12:02:41 [Stream #e013ee80-5863-11e9-8458-353e9e3cb7f9] All sessions completed progress: [/10.32.1.155]0:1/1 100% 1:1/1 100% [/10.32.0.28]1:1/1 100% 0:1/1 100% [/10.32.3.220]0:1/1 100% 1:1/1 100% total: 100% 0.000KiB/s (avg: 0.074KiB/s) INFO 12:02:41 [Stream #e013ee80-5863-11e9-8458-353e9e3cb7f9] All sessions completed INFO 12:02:41 [Stream #e013ee80-5863-11e9-8458-353e9e3cb7f9] All sessions completed INFO: ./apigee/data/cassandra/data/ks1/user-9fbae960571411e99652c7b15b2db6cc restored successfully INFO: Restore 20190405011309 completed INFO: ./apigee/data/cassandra/data/ks1/user-9fbae960571411e99652c7b15b2db6cc restored successfully INFO: Restore 20190405011309 completed waiting on waiting nodes $pid to finish 106 Restore finished
Verifica il job di backup
Puoi anche verificare il job di backup dopo la pianificazione del cron job di backup. Dopo il giorno il cronjob è stato pianificato, il risultato dovrebbe essere simile a questo:
kubectl get pods
L'output è simile al seguente:
NAME READY STATUS RESTARTS AGE apigee-cassandra-default-0 1/1 Running 0 2h apigee-cassandra-default-1 1/1 Running 0 2h apigee-cassandra-default-2 1/1 Running 0 2h apigee-cassandra-backup-1554515580-pff6s 0/1 Running 0 54s
Controllare i log di backup
Il job di backup:
- Crea un file
schema.cql
. - Lo carica nel bucket di archiviazione.
- Fai clic sul nodo per eseguire il backup dei dati e li carica contemporaneamente.
- Attende il caricamento di tutti i dati.
kubectl logs -f apigee-cassandra-backup-1554515580-pff6s
L'output è simile al seguente:
myusername-macbookpro:cassandra-backup-utility myusername$ kubectl logs -f apigee-cassandra-backup-1554577680-f9sc4 starting apigee-cassandra-default-0 in default starting apigee-cassandra-default-1 in default starting apigee-cassandra-default-2 in default 35 46 57 waiting on process 35 Activated service account credentials for: [apigee-cassandra-backup-svc@gce-myusername.iam.gserviceaccount.com] Activated service account credentials for: [apigee-cassandra-backup-svc@gce-myusername.iam.gserviceaccount.com] Activated service account credentials for: [apigee-cassandra-backup-svc@gce-myusername.iam.gserviceaccount.com] Requested creating snapshot(s) for [all keyspaces] with snapshot name [20190406190808] and options {skipFlush=false} Snapshot directory: 20190406190808 INFO: backup created cassandra snapshot 20190406190808 tar: Removing leading `/' from member names /apigee/data/cassandra/data/ks1/mytest3-37bc2df0587811e98e8d875b0ed64754/snapshots/ /apigee/data/cassandra/data/ks1/mytest3-37bc2df0587811e98e8d875b0ed64754/snapshots/20190406190808/ /apigee/data/cassandra/data/ks1/mytest3-37bc2df0587811e98e8d875b0ed64754/snapshots/20190406190808/mc-1-big-Data.db Requested creating snapshot(s) for [all keyspaces] with snapshot name [20190406190808] and options {skipFlush=false} Requested creating snapshot(s) for [all keyspaces] with snapshot name [20190406190808] and options {skipFlush=false} Snapshot directory: 20190406190808 INFO: backup created cassandra snapshot 20190406190808 tar: Removing leading `/' from member names /apigee/data/cassandra/data/system/hints-2666e20573ef38b390fefecf96e8f0c7/snapshots/ /apigee/data/cassandra/data/system/hints-2666e20573ef38b390fefecf96e8f0c7/snapshots/20190406190808/ /apigee/data/cassandra/data/system/hints-2666e20573ef38b390fefecf96e8f0c7/snapshots/20190406190808/manifest.json /apigee/data/cassandra/data/system/prepared_statements-18a9c2576a0c3841ba718cd529849fef/snapshots/ /apigee/data/cassandra/data/system/prepared_statements-18a9c2576a0c3841ba718cd529849fef/snapshots/20190406190808/ /apigee/data/cassandra/data/system/prepared_statements-18a9c2576a0c3841ba718cd529849fef/snapshots/20190406190808/manifest.json /apigee/data/cassandra/data/system/range_xfers-55d764384e553f8b9f6e676d4af3976d/snapshots/ /apigee/data/cassandra/data/system/range_xfers-55d764384e553f8b9f6e676d4af3976d/snapshots/20190406190808/ /apigee/data/cassandra/data/system/range_xfers-55d764384e553f8b9f6e676d4af3976d/snapshots/20190406190808/manifest.json /apigee/data/cassandra/data/system/peer_events-59dfeaea8db2334191ef109974d81484/snapshots/ /apigee/data/cassandra/data/system/peer_events-59dfeaea8db2334191ef109974d81484/snapshots/20190406190808/ /apigee/data/cassandra/data/system/peer_events-59dfeaea8db2334191ef109974d81484/snapshots/20190406190808/manifest.json /apigee/data/cassandra/data/system/built_views-4b3c50a9ea873d7691016dbc9c38494a/snapshots/ /apigee/data/cassandra/data/system/built_views-4b3c50a9ea873d7691016dbc9c38494a/snapshots/20190406190808/ /apigee/data/cassandra/data/system/built_views-4b3c50a9ea873d7691016dbc9c38494a/snapshots/20190406190808/manifest.json …… /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/ /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/ /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-3-big-Filter.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-2-big-CompressionInfo.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-2-big-Index.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-3-big-Statistics.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-2-big-Data.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-1-big-Index.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-1-big-Statistics.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-2-big-TOC.txt /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-2-big-Statistics.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-1-big-Summary.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-1-big-Filter.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-2-big-Summary.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-3-big-Index.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/manifest.json /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-2-big-Filter.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-2-big-Digest.crc32 /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-3-big-Summary.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-3-big-Data.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-1-big-TOC.txt /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/schema.cql /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-3-big-CompressionInfo.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-1-big-Digest.crc32 /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-3-big-TOC.txt /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-1-big-Data.db /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-3-big-Digest.crc32 /apigee/data/cassandra/data/ks2/user-d6d39d70586311e98e8d875b0ed64754/snapshots/20190406190808/mc-1-big-CompressionInfo.db …… /tmp/tokens.txt / [1 files][ 0.0 B/ 0.0 B] Operation completed over 1 objects. / [1 files][ 0.0 B/ 0.0 B] Operation completed over 1 objects. INFO: backup created tarball and transferred the file to gs://gce-myusername-apigee-cassandra-backup/apigeecluster/dc-1 INFO: removing cassandra snapshot INFO: backup created tarball and transferred the file to gs://gce-myusername-apigee-cassandra-backup/apigeecluster/dc-1 INFO: removing cassandra snapshot Requested clearing snapshot(s) for [all keyspaces] INFO: Backup 20190406190808 completed waiting on process 46 Requested clearing snapshot(s) for [all keyspaces] INFO: Backup 20190406190808 completed Requested clearing snapshot(s) for [all keyspaces] waiting on process 57 INFO: Backup 20190406190808 completed waiting result to get schema from 10.32.0.28 INFO: /tmp/schema.cql has been generated Activated service account credentials for: [apigee-cassandra-backup-svc@gce-myusername.iam.gserviceaccount.com] tar: removing leading '/' from member names tmp/schema.cql Copying from <TDIN>... / [1 files][ 0.0 B/ 0.0 B] Operation completed over 1 objects. INFO: backup created tarball and transferred the file to gs://gce-myusername-apigee-cassandra-backup/apigeecluster/dc-1 finished uploading schema.cql