Cassandra のバックアップと復元

このセクションでは、Apigee ハイブリッドのランタイム プレーンにインストールされた Apache Cassandra データベース リングのデータのバックアップと復元を構成する方法について説明します。また、Cassandra データストアもご覧ください。

Cassandra のバックアップが重要な理由

バックアップは障害シナリオに対する重要な保護手段です。各バックアップは、バックアップが作成された時点で存在した現在の Cassandra データの一貫性のあるスナップショットです。これには、Cassandra クラスタ内の Cassandra データとスキーマ / メタデータが含まれます。バックアップにより、ユーザーは Apigee Hybrid インスタンスを以前の正常な状態に戻せるようになります。これは、障害発生時にハイブリッド インスタンスをオンラインに戻すうえで重要なステップです。ハイブリッド インスタンスのサイズによっては、1 つのバックアップ セットに 1 つまたは複数のバックアップ ファイルが存在する場合があります。たとえば、ハイブリッド インスタンスに 3 つの Cassandra ノードがある場合、バックアップ セットには 3 つのバックアップ ファイルが含まれます。ハイブリッド インスタンスに 30 個の Cassandra ノードがある場合、バックアップ セットには 30 個のバックアップ ファイルが含まれます。つまり、バックアップからハイブリッド インスタンスを復元する時間は、バックアップ セット内で復元する必要があるバックアップ ファイルの数によって異なります。

Cassandra のバックアップについて知っておくべきこと

Cassandra はレプリケートされるデータベースであり、各リージョンまたはデータセンターに 3 つ以上のデータのコピーが存在するように構成されています。Cassandra はストリーミング レプリケーションと読み取りリペアを使用して、各リージョンまたはデータセンターに任意の時点のデータレプリカを保持します。

ハイブリッドでは、Cassandra のバックアップはデフォルトで無効になっています。ただし、壊滅的な障害によってデータが失われた場合に、Cassandra のバックアップを有効にすることをおすすめします。Cassandra のバックアップは障害復旧で使用することを意図しており、誤って削除されたデータの損失を復元するものではありません。

バックアップは、overrides.yaml ファイルに設定されているスケジュールに従って作成されます。バックアップをスケジュールする方法については、Cassandra のバックアップをスケジュールするをご覧ください。バックアップ スケジュールをハイブリッド クラスタに適用すると、スケジュールに従って Kubernetes バックアップ ジョブが定期的に実行されます。このジョブは、ハイブリッド クラスタ内の各 Cassandra ノードでバックアップ スクリプトをトリガーし、ノード上のすべてのデータを収集します。そして、データのアーカイブ ファイルを作成し、overrides.yaml ファイルの Cassandra バックアップ設定で指定された Google Cloud ストレージ・バケットにアーカイブを送信します。

バックアップの対象

このトピックで説明するバックアップ構成では、次のエンティティがバックアップされます。

  • ユーザー スキーマを含む Cassandra スキーマ(Apigee キースペースの定義)
  • ノードごとの Cassandra パーティション トークン情報
  • Cassandra データのスナップショット

バックアップ データの保存場所

バックアップ データは Google Cloud Storage バケットに保存されます。このバケットはユーザーが作成する必要があります。バケットの作成と構成については後述します。

Cassandra のバックアップ スケジュールの設定

バックアップはランタイム プレーンで cron ジョブとしてスケジュールされます。Cassandra のバックアップをスケジュールするには:

  1. 次の create-service-account コマンドを実行して、標準の roles/storage.objectAdmin ロールを持つ Google Cloud サービス アカウント(SA)を作成します。この SA ロールと使用すると、バックアップ データを Cloud Storage に書き込むことができます。ハイブリッド環境のルート ディレクトリで次のコマンドを実行します。
    ../tools/create-service-account --env prod \
      --profile apigee-cassandra \
      --name CASSANDRA_BACKUP_SA_NAME \
      --dir OUTPUT_DIR

    ここで

    • CASSANDRA_BACKUP_SA_NAME はサービス アカウントの名前です。
    • OUTPUT_DIR は、ツールがサービス アカウントの .json ファイルを出力するディレクトリです。

    次に例を示します。
    ./tools/create-service-account --env prod \
      --profile apigee-cassandra \
      --name my-cassandra-backup-sa  --dir ./service-accounts
    Google Cloud サービス アカウントの詳細については、サービス アカウントの作成と管理をご覧ください。
  2. 上記の create-service-account コマンドにより、サービス アカウントの秘密鍵を含む JSON ファイルが作成され、コマンドを実行したディレクトリに保存されます。以降のステップでこのファイルのパスが必要になります。
  3. Cloud Storage バケットを作成します。バケットに適したデータ保持ポリシーを指定してください。15 日のデータ保持ポリシーを使用することをおすすめします。
  4. overrides.yaml ファイルを開きます。
  5. 次の cassandra.backup プロパティを追加してバックアップを有効にします。すでに構成されているプロパティは削除しないでください。

    パラメータ

    cassandra:
      ...
    
      backup:
        enabled: true
        serviceAccountPath: SA_JSON_FILE_PATH
        dbStorageBucket: CLOUD_STORAGE_BUCKET_PATH
        schedule: BACKUP_SCHEDULE_CODE
    
      ...
      

    ...
    
    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-sa.json"
        dbStorageBucket: "gs://myname-cassandra-backup"
        schedule: "45 23 * * 6"
    
      ... 
  6. ここで
    プロパティ 説明
    backup:enabled バックアップはデフォルトでは無効になっています。このプロパティを true に設定する必要があります。
    backup:serviceAccountPath

    SA_JSON_FILE_PATH

    ./tools/create-service-account の実行時にダウンロードされたサービス アカウント JSON ファイルのファイル システム上のパス。

    backup:dbStorageBucket

    CLOUD_STORAGE_BUCKET_PATH

    Cloud Storage バケットのパス。形式は gs://BUCKET_NAME です。必ず gs:// を付ける必要があります。

    backup:schedule

    BACKUP_SCHEDULE_CODE

    バックアップの開始時刻。標準の crontab 構文で指定します。デフォルト: 0 2 * * *

  7. 構成の変更を新しいクラスタに適用します。例:
    ./apigeectl apply -f overrides.yaml
  8. バックアップ ジョブを確認します。次に例を示します。
    kubectl get cronjob -n apigee
    NAME                      SCHEDULE     SUSPEND   ACTIVE   LAST SCHEDULE   AGE
    apigee-cassandra-backup   33 * * * *   False     0        <none>          94s

バックアップを復元する

災害によって Apigee ハイブリッド インスタンスのすべてのデータが回復不能な状態になった場合など、重大な障害が発生した場合に、バックアップを使用して Apigee インフラストラクチャをゼロから復元します。マルチリージョン デプロイを使用している場合、単一リージョンの障害から復旧するには、デコミッションを使用して影響を受けるリージョンをクリーンアップしてから、影響を受けるリージョンで DN 拡張を使用する必要があります。Apigee Cassandra のデプロイと運用アーキテクチャは、単一リージョンの冗長性とフォールト トレランスを処理します。Apigee ハイブリッドは、本番環境ではマルチリージョン構成でデプロイすることをおすすめしているため、リージョン障害が発生した場合、バックアップから復旧するのではなく、文書化されたリージョンのデコミッショニングと拡張手順を使用して、他のライブ リージョンから復旧することが可能です。

次の場合は、バックアップを使用しないでください。

  • Cassandra ノードの障害。
  • アプリ、デベロッパー、api_credentials などのデータの誤削除。
  • マルチリージョン デプロイで停止している 1 つ以上のリージョン。

復元時に考慮すべき事項:

  • ダウンタイム: 復元中はダウンタイムが発生します。
  • データ損失: 最後の有効なバックアップ時と復元の完了時の間にデータ損失が発生します。
  • 復元時間: 復元時間はデータとクラスタのサイズによって異なります。
  • チェリーピッカー データ: 復元する特定のデータのみを選択することはできません。復元すると、選択したバックアップ全体が復元されます。

復元プロセスでは、バックアップのロケーションからデータが取得され、同じ数のノードを持つ新しい Cassandra クラスタにデータが復元されます。古い Cassandra クラスタからデータは取得されません。

以下の復元手順は、バックアップに Google Cloud Storage を使用する単一のリージョン デプロイを対象としています。その他のデプロイの場合は、以下のページをご覧ください。

Cassandra のバックアップを復元するには:

  1. ハイブリッド ランタイム デプロイを復元する新しい名前空間で新しい Kubernetes クラスタを作成します。元の Hybrid インストール環境で使用していたものと同じクラスタと名前空間を使用することはできません。
  2. ルート ハイブリッド インストール ディレクトリに、新しい overrides-restore.yaml ファイルを作成します。
  3. 元の overrides.yaml ファイルの完全な Cassandra 構成を新しい overrides-restore.yaml ファイルにコピーします。次に例を示します。
    cp ./overrides.yaml ./overrides-restore.yaml
  4. 新しい overrides-restore.yaml では、namespace 要素と restore 要素を追加して、cassandra プロパティの TLS 認証情報が正しいことを確認します。

    パラメータ

        namespace: YOUR_RESTORE_NAMESPACE
        cassandra:
          ...
          sslRootCAPath: PATH_TO_ROOT_CA_FILE
          sslCertPath: PATH_TO_SSL_CERT_FILE
          sslKeyPath: PATH_TO_SSL_KEY_FILE
          ...
          restore:
            enabled: true
            snapshotTimestamp: TIMESTAMP
            serviceAccountPath: SA_JSON_FILE_PATH
            dbStorageBucket: CLOUD_STORAGE_BUCKET_PATH
                 image:
                   pullPolicy: Always
          ...

        ...
    
        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
    
        ...

    ここで

    プロパティ 説明
    sslRootCAPath
    sslCertPath
    sslKeyPath

    PATH_TO_ROOT_CA_FILE
    PATH_TO_SSL_CERT_FILE
    PATH_TO_SSL_KEY_FILE

    元の Cassandra データベースの作成時に使用したのと同じ TLS 認証情報を使用します。

    namespace

    YOUR_RESTORE_NAMESPACE

    手順 1 で新しい Cassandra クラスタに作成した新しい Namespace の名前。元のクラスタで使用していた Namespace は使用しないでください。

    restore:enabled デフォルトでは、復元は無効になっています。このプロパティを true に設定する必要があります。
    restore:snapshotTimestamp

    TIMESTAMP

    復元するバックアップ スナップショットのタイムスタンプ。使用できるタイムスタンプを確認するには、dbStorageBucket に移動し、バケット内にあるファイルを確認します。各ファイル名には、次のようにタイムスタンプ値が含まれています。

    backup_20210203213003_apigee-cassandra-default-0.tgz

    ここで、20210203213003 は、その時点で作成されたバックアップを復元する場合に使用する snapshotTimestamp の値です。

    restore:serviceAccountPath

    SA_JSON_FILE_PATH

    バックアップ用に作成したサービス アカウントのファイル システム上のパス。

    restore:dbStorageBucket

    CLOUD_STORAGE_BUCKET_PATH

    バックアップ データが保存されている Cloud Storage バケットのパスで、次の形式です。

    gs://BUCKET_NAME

    必ず gs:// を付ける必要があります。

  5. 次のコマンドを実行して、古い Namespace の Cassandra ノードの app ラベルを変更します。
    kubectl label pods --overwrite --namespace=OLD_NAMESPACE -l app=apigee-cassandra app=apigee-cassandra-old
    
  6. 新しいハイブリッド ランタイム デプロイを作成します。これにより、新しい Cassandra クラスタが作成され、クラスタへのバックアップ データの復元が開始します。
    ./apigeectl init  -f ../overrides-restore.yaml
    
    ./apigeectl apply  -f ../overrides-restore.yaml
    
  7. 復元が完了したら、新しい Namespace で Cassandra クラスタを使用するようにトラフィックを切り替える必要があります。トラフィックを切り替えるには、次のコマンドを実行します。

    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}}'
    
  8. トラフィックの切り替えが完了すると、restore 構成を削除し、backup 構成を overrides-restore.yaml ファイルに追加することにより、復元したクラスタのバックアップを再構成できます。YOUR_RESTORE_NAMESPACE は、手順 1 で作成した新しい Namespace 名に置き換えます。
    namespace: YOUR_RESTORE_NAMESPACE
    cassandra:
      ...
       backup:
        enabled: true
        serviceAccountPath: SA_JSON_FILE_PATH
        dbStorageBucket: CLOUD_STORAGE_BUCKET_PATH
        schedule: BACKUP_SCHEDULE_CODE
      ...

    続いて、次のコマンドで、backup 構成を適用します。

    ./apigeectl apply  -f ../overrides-restore.yaml
    

復元ログの表示

復元ジョブのログを確認し、grep を使用して error をチェックすることで、復元ログにエラーがないことを確認します。

復元の完了を確認する

復元オペレーションが完了したかどうかの確認には、次のコマンドを使用します。

kubectl get pods

出力は次のようになります。

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

復元ログを表示する

復元ログは、次のコマンドを使用して表示します。

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 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.1.6]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.1.6]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-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-1.6451.680-pff6s   0/1       Running     0          54s

バックアップ ログを確認する

バックアップ ジョブは次のことを行います。

  • schema.cql ファイルを作成します。
  • このファイルをストレージ バケットにアップロードします。
  • ノードをエコーしてデータをバックアップし、同時にバックアップ データをアップロードします。
  • すべてのデータがアップロードされるまで待機します。
kubectl logs -f apigee-cassandra-backup-1.6451.680-pff6s

出力は次のようになります。

myusername-macbookpro:cassandra-backup-utility myusername$ kubectl logs -f apigee-cassandra-backup-1.64577680-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

検証

上り(内向き)の IP アドレスをテストして復元を確認します。

  1. 次のコマンドで EXTERNAL-IP を取得します。
    kubectl get svc -n istio-system
    NAME                       TYPE           CLUSTER-IP     EXTERNAL-IP    PORT(S)                                                                      AGE
    istio-ingressgateway       LoadBalancer   10.11.123.45   34.56.78.90   15021:32225/TCP,80:32208/TCP,443:31942/TCP,15012:32689/TCP,15443:31936/TCP   1d
  2. 次の例のように、コマンドラインで gcloud の認証情報を取得または更新します。

    TOKEN=$(gcloud auth print-access-token)
  3. Apigee 環境にデプロイされた既存の apiproxy と API キーまたはアクセス トークンを使用して、上り(内向き)テストを行います。
    Curl -v https://EXTERNAL-IP/basepath -H 'envgroup hostalias'

    次に例を示します。

    curl -v 'https://example.com/oauth/client_credential' \
      --resolve edgehybrid-staging-func-runtime-wf.hybrid.e2e.apigeeks.net:443:34.56.78.90 \
      -H 'Authorization: Bearer ${TOKEN}'

新しいクラスタとトラフィックのカットオーバーのための DNS 構成

検証が完了したら、トラフィックを新しいクラスタにリダイレクトし、DNS エントリを新しい上り(内向き)EXTERNAL-IP アドレスに変更します。