このセクションでは、Apigee Hybrid のランタイム プレーンにインストールされた Apache Cassandra データベース リングのデータ バックアップと復元を構成する方法について説明します。Cassandra データベースもご覧ください。
Cassandra のバックアップについて知っておくべきこと
Cassandra はレプリケートされるデータベースであり、各リージョンまたはデータセンターに 3 つ以上のデータコピーが存在するように構成されています。Cassandra はストリーミング レプリケーションと読み取りリペアを使用して、各リージョンまたはデータセンターに任意の時点のデータレプリカを保持します。
Hybrid では、Cassandra のバックアップはデフォルトで無効になっています。ただし、データを誤って削除してしまった場合に備えて、Cassandra のバックアップを有効にすることをおすすめします。
バックアップされるもの
このトピックで説明するバックアップ構成では、次のエンティティがバックアップされます。
- ユーザー スキーマを含む Cassandra スキーマ(Apigee キースペースの定義)
- ノードごとの Cassandra パーティション トークン情報
- Cassandra データのスナップショット
バックアップ データの保存場所
バックアップ データは Google Cloud Storage(GCS)バケットに保存されます。このバケットはユーザーが作成する必要があります。バケットの作成と構成については後述します。
Cassandra のバックアップ スケジュールの設定
バックアップはランタイム プレーンで cron ジョブとしてスケジュールされます。Cassandra のバックアップをスケジュールするには、次の手順に従います。
- 次の
create-service-accountコマンドを実行して、標準のroles/storage.objectAdmin役割を持つ GCP サービス アカウント(SA)を作成します。この SA の役割には、バックアップ データを Google Cloud Storage(GCS)に書き込む権限があります。Hybrid インストール環境のルート ディレクトリで次のコマンドを実行します。 次に例を示します。./tools/create-service-account apigee-cassandra output-dir
GCP サービス アカウントの詳細については、サービス アカウントの作成と管理をご覧ください。./tools/create-service-account apigee-cassandra ./service-accounts
- 上記の
create-service-accountコマンドにより、サービス アカウントの秘密鍵を含む JSON ファイルが作成され、コマンドを実行したディレクトリに保存されます。以降のステップでこのファイルのパスが必要になります。 - GCS バケットを作成します。バケットの保持ポリシーとして妥当なデータ保持期間を指定してください。15 日のデータ保持ポリシーを使用することをおすすめします。
overrides.yamlファイルを開きます。- 次の
cassandra.backupプロパティを追加してバックアップを有効にします。すでに構成されているプロパティは削除しないでください。 ここでcassandra: ... backup: enabled: true serviceAccountPath: sa_json_file_path dbStorageBucket: gcs_bucket_path schedule: backup_schedule_code ...
次に例を示します。プロパティ 説明 enabledバックアップはデフォルトでは無効になっています。このプロパティを trueに設定する必要があります。serviceAccountPath./tools/create-service-accountの実行時にダウンロードされたサービス アカウント JSON ファイルのファイルシステム上のパス。dbStorageBucketGCS ストレージ バケットのパス。形式は gs://bucket_nameです。必ずgs://を付ける必要があります。scheduleバックアップの開始時刻。標準の crontab 構文で指定します。デフォルト: 0 2 * * *注: バックアップをスケジュールする際、バックアップ構成をクラスタに適用した後すぐにバックアップが開始されるようにはしないでください。バックアップ構成を適用すると、Kubernetes によって Cassandra ノードが再作成されます。ノードが再起動する前にバックアップが開始されると、バックアップは失敗します(ノードの再起動にはおそらく数分かかります)。
... 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" ...
- 構成の変更を新しいクラスタに適用します。次に例を示します。
./apigeectl apply -c 2_cassandra -v beta2
バックアップの復元
復元操作では、バックアップ場所からデータが取得され、同じ数のポッドを持つ新しい Cassandra クラスタにそのデータが復元されます。復元先の新しいクラスタは、ランタイム プレーン クラスタとは異なる名前空間を持つ必要があります。
Cassandra のバックアップを復元するには:
- 新しい名前空間を持つ新しい Kubernetes クラスタを作成します。元の Hybrid インストール環境で使用していたものと同じクラスタ / 名前空間を使用することはできません。
- Hybrid インストール環境のルート ディレクトリに新しい
overrides-restore.yamlファイルを作成します。 - オリジナルの
overrides.yamlファイルから完全な Cassandra 構成をコピーして新しいファイルに貼り付けます。 - 名前空間の要素を追加します。元のクラスタで使用していたものと同じ名前空間は使用しないでください。
- 新しい Cassandra クラスタを作成します。
./apigeectl apply -c 2_cassandra -v beta2 -f ./overrides-restore.yaml./apigeectl apply -c 2_cassandra-role -v beta2
namespace: your-restore-namespace cassandra: storage: type: gcepd capacity: 50Gi gcepd: replicationType: regional-pd nodeSelector: key: cloud.google.com/gke-nodepool value: apigee-data sslRootCAPath: path_to_root_ca_file sslCertPath: path_to_ssl_cert_file sslKeyPath: path_to_ssl_key_file auth: default: password: your_cassandra_password admin: password: admin_password ddl: password: ddl_password dml: password: dml_password restore: enabled: true snapshotTimestamp: timestamp serviceAccountPath: sa_json_file_path dbStorageBucket: gcs_bucket_path image: pullPolicy: Always
| プロパティ | 説明 |
|---|---|
ssl*Path、auth.* |
元の Cassandra データベースの作成時に使用したのと同じ TLS 認証情報を使用します。 |
snapshotTimestamp |
復元するバックアップ スナップショットのタイムスタンプ。 |
serviceAccountPath |
バックアップ用に作成したサービス アカウントのファイルシステム上のパス。 |
dbStorageBucket |
バックアップが保存されている GCS ストレージ バケットのパス。形式は gs://bucket_name です。必ず gs:// を付ける必要があります。 |
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: "20190417002207" serviceAccountPath: "/Users/myhome/.ssh/my_cassandra_backup.json" dbStorageBucket: "gs://myname-cassandra-backup" image: pullPolicy: Always
ここで、snapshotTimestamp は、復元するバックアップに関連付けられたタイムスタンプです。
復元ログの表示
復元ジョブのログをチェックし、error を grep して復元ログにエラーがないことを確認できます。
復元が完了したことを確認する
復元操作が完了したかどうかを確認するには:
kubectl get pods
NAME READY STATUS RESTARTS AGE
apigee-cassandra-0 1/1 Running 0 1h
apigee-cassandra-1 1/1 Running 0 1h
apigee-cassandra-2 1/1 Running 0 59m
apigee-cassandra-restore-b4lgf 0/1 Completed 0 51m復元ログを表示する
復元ログを表示するには:
kubectl logs -f apigee-cassandra-restore-b4lgf
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 sucessfully 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-0 in default
starting apigee-cassandra-1 in default
starting apigee-cassandra-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バックアップ ジョブの確認
また、バックアップ cron ジョブのスケジュールを設定した後にバックアップ ジョブを確認することもできます。cron ジョブのスケジュールを設定した後、ポッドのリストが次のようになれば問題ありません。
kubectl get pods
NAME READY STATUS RESTARTS AGE
apigee-cassandra-0 1/1 Running 0 2h
apigee-cassandra-1 1/1 Running 0 2h
apigee-cassandra-2 1/1 Running 0 2h
apigee-cassandra-backup-1554515580-pff6s 0/1 Running 0 54sバックアップ ログを確認する
バックアップ ジョブは次のことを行います。
schema.cqlファイルを作成します。- このファイルをストレージ バケットにアップロードします。
- ノードをエコーしてデータをバックアップし、同時にバックアップ データをアップロードします。
- すべてのデータがアップロードされるまで待ちます。
kubectl logs -f apigee-cassandra-backup-1554515580-pff6s
myusername-macbookpro:cassandra-backup-utility myusername$ kubectl logs -f apigee-cassandra-backup-1554577680-f9sc4
starting apigee-cassandra-0 in default
starting apigee-cassandra-1 in default
starting apigee-cassandra-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 transfered the file to gs://gce-myusername-apigee-cassandra-backup/apigeecluster/dc-1
INFO: removing cassandra snapshot
INFO: backup created tarball and transfered 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 ...
/ [1 files][ 0.0 B/ 0.0 B]
Operation completed over 1 objects.
INFO: backup created tarball and transfered the file to gs://gce-myusername-apigee-cassandra-backup/apigeecluster/dc-1
finished uploading schema.cql