Cette section explique comment configurer la sauvegarde et la récupération des données pour l'anneau de base de données Apache Cassandra installé dans le plan d'exécution Apigee hybrid. Consultez également la section Datastore Cassandra.
Ce que vous devez savoir sur les sauvegardes Cassandra
Cassandra est une base de données répliquée configurée pour contenir au moins trois copies de vos données dans chaque région ou centre de données. Cassandra utilise la réplication par flux et les corrections de lecture pour maintenir les instances dupliquées de données dans chaque région ou centre de données à un moment donné.
Dans le cadre d'Apigee hybrid, les sauvegardes Cassandra ne sont pas activées par défaut. Cependant, il est recommandé d'activer les sauvegardes Cassandra pour vous prémunir contre toute suppression accidentelle de vos données.
Quels éléments sont sauvegardés ?
La configuration de sauvegarde décrite dans cette rubrique sauvegarde les entités suivantes :
- le schéma Cassandra, y compris le schéma utilisateur (définitions d'espace de clés Apigee) ;
- les informations sur les jetons de partition Cassandra par nœud ;
- un instantané des données Cassandra.
Où sont stockées les données de sauvegarde ?
Les données de sauvegarde sont stockées dans un bucket Google Cloud Storage que vous devez créer. La création et la configuration des buckets sont traitées dans cet article.
Planifier des sauvegardes Cassandra
Les sauvegardes sont planifiées en tant que tâches cron
dans le plan d'exécution. Pour planifier des sauvegardes Cassandra, procédez comme suit :
- Exécutez la commande
create-service-account
suivante pour créer un compte de service Google Cloud avec le rôle standardroles/storage.objectAdmin
. Ce rôle de compte de service vous permet d'écrire les données de sauvegarde dans Cloud Storage. Exécutez la commande suivante dans le répertoire racine d'installation hybride : Exemple :./tools/create-service-account apigee-cassandra OUTPUT_DIR
Pour en savoir plus sur les comptes de service Google Cloud, consultez la page Créer et gérer des comptes de service../tools/create-service-account apigee-cassandra ./service-accounts
- La commande
create-service-account
enregistre un fichier JSON contenant la clé privée du compte de service. Le fichier est enregistré dans le répertoire où est exécutée la commande. Vous aurez besoin du chemin d'accès à ce fichier lors des étapes suivantes. - Créez un bucket Cloud Storage. Spécifiez une règle de conservation des données raisonnable pour le bucket. Apigee recommande une règle de conservation des données de 15 jours.
- Ouvrez votre fichier
overrides.yaml
. - Ajoutez-y les propriétés
cassandra.backup
suivantes pour activer la sauvegarde. Ne supprimez aucune des propriétés déjà configurées.Paramètres
cassandra: ... backup: enabled: true serviceAccountPath: SA_JSON_FILE_PATH dbStorageBucket: CLOUD_STORAGE_BUCKET_PATH schedule: BACKUP_SCHEDULE_CODE ...
Exemple
... 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" ...
Où :
- Appliquez les changements de configuration au nouveau cluster. Exemple :
./apigeectl apply -f overrides.yaml
Propriété | Description |
---|---|
backup:enabled |
La sauvegarde est désactivée par défaut. Vous devez définir cette propriété sur true . |
backup:serviceAccountPath |
SA_JSON_FILE_PATH Le chemin d'accès, sur votre système de fichiers, au fichier JSON du compte de service, qui a été téléchargé lors de l'exécution de |
backup:dbStorageBucket |
CLOUD_STORAGE_BUCKET_PATH Chemin du bucket Cloud Storage au format suivant : |
backup:schedule |
BACKUP_SCHEDULE_CODE L'heure de début de la sauvegarde, spécifiée dans la syntaxe crontab standard. Par défaut : |
Restaurer des sauvegardes
La restauration extrait vos données de l'emplacement de sauvegarde et les restaure dans un nouveau cluster Cassandra présentant le même nombre de nœuds. Aucune donnée n'est extraite de l'ancien cluster Cassandra.
Les instructions de restauration ci-dessous concernent les déploiements dans une seule région qui utilisent Google Cloud Storage pour les sauvegardes. Pour les autres déploiements, consultez les articles suivants :
- Pour les déploiements dans une seule région qui n'utilisent pas Google Cloud Storage pour les sauvegardes, consultez la section Sauvegarde et récupération sans Google Cloud.
- Pour les déploiements multirégionaux, consultez la section Déploiement multirégional sur GKE et GKE On-Prem.
Pour restaurer des sauvegardes Cassandra :
- Créez un espace de noms dans le cluster Kubernetes existant qui sera utilisé pour restaurer le déploiement de l'environnement d'exécution hybride. N'utilisez pas le nom d'espace de noms d'origine pour le nouvel espace de noms. N'utilisez pas l'ancien espace de noms pour la restauration.
- Dans le répertoire racine d'installation hybride, créez un nouveau fichier
overrides-restore.yaml
. - Copiez la configuration Cassandra complète à partir de votre fichier
overrides.yaml
d'origine dans le nouveau fichieroverrides-restore.yaml
. La commande suivante en est un exemple.cp ./overrides.yaml ./overrides-restore.yaml
- Ajoutez un élément d'espace de noms au nouveau fichier
overrides-restore.yaml
. N'utilisez pas le même espace de noms que celui utilisé pour votre cluster d'origine.Paramètres
namespace: YOUR_RESTORE_NAMESPACE cassandra: ... restore: enabled: true snapshotTimestamp: TIMESTAMP serviceAccountPath: SA_JSON_FILE_PATH dbStorageBucket: CLOUD_STORAGE_BUCKET_PATH image: pullPolicy: Always ...
Exemple
... 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 ...
Où :
Propriété Description namespace
YOUR_RESTORE_NAMESPACE
Nom du nouvel espace de noms que vous avez créé à l'étape 1 pour le nouveau cluster Cassandra. N'utilisez pas le même espace de noms que celui utilisé pour votre cluster d'origine.
restore:enabled
La restauration est désactivée par défaut. Vous devez définir cette propriété sur true
.restore:snapshotTimestamp
TIMESTAMP
Horodatage de l'instantané de sauvegarde à restaurer. Pour vérifier quels horodatages peuvent être utilisés, accédez à
dbStorageBucket
et examinez les fichiers présents dans le bucket. Chaque nom de fichier contient une valeur d'horodatage telle que la suivante :backup_20210203213003_apigee-cassandra-default-0.tgz
Où 20210203213003 correspond à la valeur
snapshotTimestamp
que vous utiliseriez si vous souhaitiez restaurer les sauvegardes créées à ce moment-là.restore:serviceAccountPath
SA_JSON_FILE_PATH
Le chemin d'accès, sur votre système de fichiers, au compte de service que vous avez créé pour la sauvegarde.
restore:dbStorageBucket
CLOUD_STORAGE_BUCKET_PATH
Chemin d'accès au bucket Cloud Storage où vos données de sauvegarde sont stockées au format suivant :
gs://BUCKET_NAME
gs://
est obligatoire. - Modifiez le libellé
app
sur n'importe quel nœud Cassandra de l'ancien espace de noms en exécutant la commande suivante :kubectl label pods --overwrite --namespace=OLD_NAMESPACE -l app=apigee-cassandra app=apigee-cassandra-old
- Créez un déploiement d'exécution hybride. Cela crée un cluster Cassandra et commence à restaurer les données de sauvegarde dans le cluster :
./apigeectl init -f ../overrides-restore.yaml
./apigeectl apply -f ../overrides-restore.yaml
-
Une fois la restauration terminée, le trafic doit être basculé pour utiliser le cluster Cassandra dans le nouvel espace de noms. Exécutez les commandes suivantes pour changer de trafic :
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}}'
- Une fois le trafic basculé, vous pouvez reconfigurer les sauvegardes sur le cluster restauré en supprimant la configuration
restore
et en ajoutant la configurationbackup
au fichieroverrides-restore.yaml
. Remplacez YOUR_RESTORE_NAMESPACE par le nom de l'espace de noms créé à l'étape 1.namespace: YOUR_RESTORE_NAMESPACE cassandra: ... backup: enabled: true serviceAccountPath: SA_JSON_FILE_PATH dbStorageBucket: CLOUD_STORAGE_BUCKET_PATH schedule: BACKUP_SCHEDULE_CODE ...
Appliquez ensuite la configuration
backup
à l'aide de la commande suivante :./apigeectl apply -f ../overrides-restore.yaml
Afficher les journaux de restauration
Vous pouvez vérifier les journaux de restauration de la tâche et utiliser grep
pour rechercher error
et vous assurer que le journal de restauration ne comporte aucune erreur.
Vérifier que la restauration est terminée
Utilisez la commande suivante pour vérifier si l'opération de restauration est terminée :
kubectl get pods
Le résultat ressemble à ce qui suit :
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
Afficher les journaux de restauration
Utilisez la commande suivante pour afficher les journaux de restauration :
kubectl logs -f apigee-cassandra-restore-b4lgf
Le résultat ressemble à ce qui suit :
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
Vérifier la tâche de sauvegarde
Vous pouvez également vérifier votre tâche de sauvegarde une fois que votre tâche Cron de sauvegarde est planifiée. Une fois la tâche Cron planifiée, vous devriez voir quelque chose qui ressemble à ceci :
kubectl get pods
Le résultat ressemble à ce qui suit :
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
Vérifier les journaux de sauvegarde
La tâche de sauvegarde :
- Crée un fichier
schema.cql
. - L'importe dans votre bucket de stockage.
- Utilise le nœud pour sauvegarder les données et les importer en même temps.
- attend que toutes les données soient importées.
kubectl logs -f apigee-cassandra-backup-1554515580-pff6s
Le résultat ressemble à ce qui suit :
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