Bagian ini membahas cara mengonfigurasi pencadangan dan pemulihan data untuk ring database Apache Cassandra yang diinstal di bidang runtime Apigee Hybrid. Lihat juga Datastore Cassandra.
Yang perlu Anda ketahui tentang pencadangan Cassandra
Cassandra adalah database yang direplikasi dan dikonfigurasi untuk memiliki setidaknya tiga salinan data Anda di setiap region atau pusat data. Cassandra menggunakan replikasi streaming dan perbaikan baca untuk mempertahankan replika data di setiap region atau pusat data pada titik tertentu.
Dalam hybrid, pencadangan Cassandra tidak diaktifkan secara default. Namun, sebaiknya aktifkan pencadangan Cassandra jika data Anda tidak sengaja dihapus.
Apa yang dicadangkan?
Konfigurasi pencadangan yang dijelaskan dalam topik ini mencadangkan entitas berikut:
- Skema Cassandra termasuk skema pengguna (definisi keyspace Apigee)
- Informasi token partisi Cassandra per node
- Snapshot data Cassandra
Di mana data cadangan disimpan?
Data yang dicadangkan disimpan di bucket Google Cloud Storage yang harus Anda buat. Pembuatan dan konfigurasi bucket dibahas dalam topik ini.
Menjadwalkan pencadangan Cassandra
Pencadangan dijadwalkan sebagai tugas cron di bidang runtime. Untuk menjadwalkan
pencadangan Cassandra:
- Jalankan perintah
create-service-accountberikut untuk membuat akun layanan (SA) Google Cloud dengan peranroles/storage.objectAdminstandar. Peran SA ini memungkinkan Anda menulis data cadangan ke Cloud Storage. Jalankan perintah berikut di direktori root penginstalan hybrid: Contoh:./tools/create-service-account apigee-cassandra OUTPUT_DIR
Untuk mengetahui informasi selengkapnya tentang akun layanan Google Cloud, lihat Membuat dan mengelola akun layanan../tools/create-service-account apigee-cassandra ./service-accounts
- Perintah
create-service-accountmenyimpan file JSON yang berisi kunci pribadi akun layanan. File disimpan di direktori yang sama tempat perintah dijalankan. Anda akan memerlukan jalur ke file ini pada langkah-langkah berikutnya. - Buat bucket Cloud Storage. Tentukan kebijakan retensi data yang wajar untuk bucket. Apigee merekomendasikan kebijakan retensi data selama 15 hari.
- Buka file
overrides.yaml. - Tambahkan properti
cassandra.backupberikut untuk mengaktifkan pencadangan. Jangan menghapus properti yang sudah dikonfigurasi.Parameter
cassandra: ... backup: enabled: true serviceAccountPath: SA_JSON_FILE_PATH dbStorageBucket: CLOUD_STORAGE_BUCKET_PATH schedule: BACKUP_SCHEDULE_CODE ...Contoh
... 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" ...
Dengan:
- Terapkan perubahan konfigurasi ke cluster baru. Contoh:
./apigeectl apply -f overrides.yaml
| Properti | Deskripsi |
|---|---|
backup:enabled |
Pencadangan dinonaktifkan secara default. Anda harus menetapkan properti ini ke true. |
backup:serviceAccountPath |
SA_JSON_FILE_PATH Jalur pada sistem file Anda ke file JSON akun layanan yang didownload saat Anda menjalankan |
backup:dbStorageBucket |
CLOUD_STORAGE_BUCKET_PATH Jalur bucket Cloud Storage dalam format ini: |
backup:schedule |
BACKUP_SCHEDULE_CODE Waktu saat pencadangan dimulai, yang ditentukan dalam
sintaksis crontab standar. Default: |
Memulihkan cadangan
Pemulihan mengambil data Anda dari lokasi cadangan dan memulihkan data ke cluster Cassandra baru dengan jumlah node yang sama. Tidak ada data yang diambil dari cluster Cassandra lama.
Petunjuk pemulihan di bawah ini ditujukan untuk deployment region tunggal yang menggunakan Google Cloud Storage untuk pencadangan. Untuk deployment multi-region, lihat Deployment multi-region di GKE dan GKE on-prem.
Untuk memulihkan cadangan Cassandra:
- Buat namespace baru dalam cluster Kubernetes yang ada yang akan digunakan untuk memulihkan deployment runtime hybrid. Jangan gunakan nama namespace asli untuk namespace baru. Jangan gunakan namespace lama untuk pemulihan.
- Di direktori penginstalan hybrid root, buat file
overrides-restore.yamlbaru. - Salin konfigurasi Cassandra lengkap dari file
overrides.yamlasli Anda ke fileoverrides-restore.yamlbaru. Lihat perintah berikut untuk mengetahui contohnya.cp ./overrides.yaml ./overrides-restore.yaml
- Tambahkan elemen namespace ke file
overrides-restore.yamlbaru. Jangan gunakan namespace yang sama dengan yang digunakan untuk cluster asli Anda.Parameter
namespace: YOUR_RESTORE_NAMESPACE cassandra: ... restore: enabled: true snapshotTimestamp: TIMESTAMP serviceAccountPath: SA_JSON_FILE_PATH dbStorageBucket: CLOUD_STORAGE_BUCKET_PATH image: pullPolicy: Always ...
Contoh
... 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 ...
Dengan:
Properti Deskripsi namespaceYOUR_RESTORE_NAMESPACE
Nama namespace baru yang Anda buat di langkah 1 untuk cluster Cassandra baru. Jangan gunakan namespace yang sama dengan yang Anda gunakan untuk cluster asli.
restore:enabledPemulihan dinonaktifkan secara default. Anda harus menetapkan properti ini ke true.restore:snapshotTimestampTIMESTAMP
Stempel waktu snapshot cadangan yang akan dipulihkan. Untuk memeriksa stempel waktu yang dapat digunakan, buka
dbStorageBucketdan lihat file yang ada di bucket. Setiap nama file berisi nilai stempel waktu seperti berikut:backup_20210203213003_apigee-cassandra-default-0.tgzDengan 20210203213003 adalah nilai
snapshotTimestampyang akan Anda gunakan jika ingin memulihkan cadangan yang dibuat pada waktu tersebut.restore:serviceAccountPathSA_JSON_FILE_PATH
Jalur di sistem file Anda ke akun layanan yang Anda buat untuk pencadangan.
restore:dbStorageBucketCLOUD_STORAGE_BUCKET_PATH
Jalur bucket Cloud Storage tempat data cadangan Anda disimpan dalam format berikut:
gs://BUCKET_NAMEgs://wajib diisi. - Ubah label
apppada node Cassandra di namespace lama dengan menjalankan perintah berikut:kubectl label pods --overwrite --namespace=OLD_NAMESPACE -l app=apigee-cassandra app=apigee-cassandra-old
- Buat deployment runtime hybrid baru. Tindakan ini akan membuat cluster Cassandra baru dan mulai
memulihkan data cadangan ke dalam cluster:
./apigeectl init -f ../overrides-restore.yaml
./apigeectl apply -f ../overrides-restore.yaml
-
Setelah pemulihan selesai, traffic harus dialihkan untuk menggunakan cluster Cassandra di namespace baru. Jalankan perintah berikut untuk mengalihkan traffic:
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}}' - Setelah pengalihan traffic selesai, Anda dapat mengonfigurasi ulang pencadangan di cluster yang dipulihkan dengan
menghapus konfigurasi
restoredan menambahkan konfigurasibackupke fileoverrides-restore.yaml. Ganti YOUR_RESTORE_NAMESPACE dengan nama namespace baru yang dibuat di langkah 1.namespace: YOUR_RESTORE_NAMESPACE cassandra: ... backup: enabled: true serviceAccountPath: SA_JSON_FILE_PATH dbStorageBucket: CLOUD_STORAGE_BUCKET_PATH schedule: BACKUP_SCHEDULE_CODE ...
Kemudian, terapkan konfigurasi
backupdengan perintah berikut:./apigeectl apply -f ../overrides-restore.yaml
Melihat log pemulihan
Anda dapat memeriksa log tugas pemulihan dan menggunakan grep untuk memeriksa error guna
memastikan log pemulihan tidak memiliki error.
Memverifikasi bahwa pemulihan telah selesai
Gunakan perintah berikut untuk memeriksa apakah operasi pemulihan selesai:
kubectl get pods
Outputnya mirip dengan hal berikut ini:
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
Melihat log pemulihan
Gunakan perintah berikut untuk melihat log pemulihan:
kubectl logs -f apigee-cassandra-restore-b4lgf
Outputnya mirip dengan hal berikut ini:
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
Memverifikasi tugas pencadangan
Anda juga dapat memverifikasi tugas pencadangan setelah cronjob pencadangan dijadwalkan. Setelah cronjob dijadwalkan, Anda akan melihat tampilan seperti ini:
kubectl get pods
Outputnya mirip dengan hal berikut ini:
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
Memeriksa log pencadangan
Tugas pencadangan:
- Membuat file
schema.cql. - Menguploadnya ke bucket penyimpanan Anda.
- Menggema node untuk mencadangkan data dan menguploadnya secara bersamaan.
- Menunggu hingga semua data diupload.
kubectl logs -f apigee-cassandra-backup-1554515580-pff6s
Outputnya mirip dengan hal berikut ini:
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