Bagian ini membahas cara mengonfigurasi pencadangan dan pemulihan data untuk cincin database Apache Cassandra yang terinstal di bidang runtime hybrid Apigee. Lihat juga Datastore Cassandra.
Yang perlu Anda ketahui tentang pencadangan Cassandra
Cassandra adalah {i>database<i} replika yang dikonfigurasi untuk memiliki setidaknya tiga salinan data di setiap region atau pusat data. Cassandra menggunakan replikasi streaming dan membaca perbaikan untuk memelihara replika data di setiap region atau pusat data pada titik tertentu.
Dalam hybrid, pencadangan Cassandra tidak diaktifkan secara default. Ini adalah praktik yang baik, namun, untuk mengaktifkan pencadangan Cassandra jika data Anda tidak sengaja terhapus.
Apa yang dicadangkan?
Konfigurasi pencadangan yang dijelaskan dalam topik ini mencadangkan entitas:
- Skema Cassandra termasuk skema pengguna (definisi keyspace Apigee)
- Informasi token partisi Cassandra per node
- Ringkasan data Cassandra
Di mana data cadangan disimpan?
Data yang dicadangkan disimpan dalam bucket Google Cloud Storage yang harus dibuat. Pembuatan dan konfigurasi bucket dibahas dalam topik ini.
Menjadwalkan pencadangan Cassandra
Pencadangan dijadwalkan sebagai tugas cron
di bidang runtime. Untuk menjadwalkan
Cadangan Cassandra:
- Jalankan
create-service-account
berikut perintah untuk membuat akun layanan (SA) Google Cloud dengan Peranroles/storage.objectAdmin
. Peran SA ini memungkinkan Anda menulis data cadangan ke Cloud Storage. Jalankan perintah berikut di penginstalan hybrid direktori {i>root<i}:./tools/create-service-account apigee-cassandra OUTPUT_DIR
Contoh:./tools/create-service-account apigee-cassandra ./service-accounts
Untuk informasi selengkapnya tentang akun layanan Google Cloud, lihat Membuat dan mengelola akun layanan. - Perintah
create-service-account
menyimpan file JSON yang berisi kunci pribadi akun layanan Anda. File disimpan di direktori yang sama tempat perintah dijalankan. Anda akan memerlukan jalur ke file ini dalam langkah-langkah berikut. - Buat bucket Cloud Storage. Tentukan data yang wajar kebijakan retensi untuk bucket. Apigee merekomendasikan kebijakan retensi data selama 15 hari.
- Buka file
overrides.yaml
. - Tambahkan properti
cassandra.backup
berikut untuk mengaktifkan pencadangan. Larangan menghapus properti apa pun 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 keterangan:
- 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 di sistem file Anda ke akun layanan
File JSON yang didownload saat Anda menjalankan |
backup:dbStorageBucket |
CLOUD_STORAGE_BUCKET_PATH Jalur bucket Cloud Storage dalam format ini: |
backup:schedule |
BACKUP_SCHEDULE_CODE Waktu mulai pencadangan, yang ditentukan dalam
sintaksis crontab standar. Default: |
Memulihkan cadangan
Pemulihan mengambil data Anda dari lokasi cadangan dan memulihkan data ke dalam Cassandra baru cluster dengan jumlah node yang sama. Tidak ada data yang diambil dari gugus Cassandra lama.
Petunjuk pemulihan di bawah ditujukan untuk deployment satu region yang menggunakan Google Cloud Storage untuk pencadangan. Untuk deployment multi-region, lihat Deployment multi-region di GKE dan GKE lokal.
Untuk memulihkan cadangan Cassandra:
- Membuat 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 root hybrid, buat file
overrides-restore.yaml
baru. - Salin konfigurasi Cassandra lengkap dari
overrides.yaml
asli Anda ke fileoverrides-restore.yaml
baru. Lihat perintah berikut sebagai contoh.cp ./overrides.yaml ./overrides-restore.yaml
- Tambahkan elemen namespace ke file
overrides-restore.yaml
baru. Jangan gunakan 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 keterangan:
Properti Deskripsi namespace
YOUR_RESTORE_NAMESPACE
Nama namespace baru yang Anda buat pada langkah 1 untuk gugus Cassandra yang baru. Jangan gunakan namespace yang sama dengan yang Anda gunakan untuk gugus asli.
restore:enabled
Pemulihan dinonaktifkan secara default. Anda harus menetapkan properti ini ke true
.restore:snapshotTimestamp
TIMESTAMP
Stempel waktu snapshot cadangan yang akan dipulihkan. Untuk memeriksa stempel waktu yang dapat digunakan, buka
dbStorageBucket
dan lihat file yang ada di direktori VM dengan bucket. Setiap nama file berisi nilai stempel waktu seperti berikut:backup_20210203213003_apigee-cassandra-default-0.tgz
Dengan 20210203213003 adalah nilai
snapshotTimestamp
yang akan Anda digunakan jika Anda ingin memulihkan cadangan yang dibuat pada saat itu.restore:serviceAccountPath
SA_JSON_FILE_PATH
Jalur pada sistem file ke akun layanan yang Anda buat untuk pencadangan.
restore:dbStorageBucket
CLOUD_STORAGE_BUCKET_PATH
Jalur bucket Cloud Storage tempat data cadangan Anda disimpan dalam format berikut:
gs://BUCKET_NAME
gs://
wajib diisi. - Ubah label
app
pada node Cassandra di namespace lama dengan menjalankan perintah berikut:kubectl label pods --overwrite --namespace=OLD_NAMESPACE -l app=apigee-cassandra app=apigee-cassandra-old
- Membuat deployment runtime hybrid baru. Tindakan ini akan membuat gugus
Cassandra baru dan memulai
memulihkan data cadangan ke dalam cluster:
./apigeectl init -f ../overrides-restore.yaml
./apigeectl apply -f ../overrides-restore.yaml
-
Setelah pemulihan selesai, lalu lintas harus dialihkan untuk menggunakan Cassandra cluster 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 cadangan di cluster yang dipulihkan dengan
menghapus konfigurasi
restore
dan menambahkan konfigurasibackup
ke Fileoverrides-restore.yaml
. Ganti YOUR_RESTORE_NAMESPACE dengan nama namespace baru 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
backup
dengan 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 tidak ada error pada log pemulihan.
Memverifikasi bahwa pemulihan telah selesai
Gunakan perintah berikut untuk memeriksa apakah operasi pemulihan telah 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 Anda dijadwalkan. Sesudah {i>cronjob<i} telah dijadwalkan, Anda akan melihat sesuatu 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.
- Menggemakan {i>node<i} untuk mencadangkan data dan mengunggahnya di perangkat lain di waktu yang sama.
- 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