Cassandra CSI のバックアップと復元

CSI(Container Storage Interface)スナップショットを使用してハイブリッド データのバックアップと復元を行えます。CSI バックアップでは、提供された CSI ドライバを使用して、基盤となるストレージ システムによるディスク スナップショットの取得がトリガーされます。バックアップ データを保存するための Google Cloud Storage バケットやリモート サーバーは必要ありません。

CSI バックアップは、Google Cloud、AWS、Azure でホストされているハイブリッド インスタンスに推奨されます。

このページでは、ハイブリッド CSI のバックアップと復元の手順について説明します。一般的なバックアップと復元の概要については、Cassandra のバックアップと復元の概要をご覧ください。

バックアップと復元の制限事項

CSI のバックアップと復元を使用する場合は、次の制限事項に注意してください。

  • 構成されたストレージ クラスで使用される CSI ドライバが、CSI スナップショットをサポートしている必要があります。ドライバ情報については、こちらの Kubernetes CSI ドライバのリストをご覧ください。
  • すべてのプラットフォームがサポートされているわけではありません。サポートされているのは、Google Cloud、AWS、Azure のプラットフォームのみです。
  • ボリューム スナップショットの制限により、OpenShift Container Platform はサポートされていません。
  • クラウド プラットフォームのみがサポートされます。オンプレミス プラットフォームはサポートされません。
  • CSI バックアップ データと CSI 以外のハイブリッド バックアップ データには互換性がありません。CSI 以外のバックアップは CSI 復元で使用できず、CSI バックアップは CSI 以外の復元には使用できません。
  • CSI ドライバのインストールと機能は、CSI ドライバのベンダーが責任を担います。
  • ユーザーは、CSI スナップショットのプロビジョニングに十分なクラスタ リソースを使用できることを確認する必要があります。
  • 古いスナップショット データを削除する責任はユーザーにあります。

CSI バックアップを設定する

CSI を使用してハイブリッド バックアップをスケジュールするには、次の操作を行います。

  1. ハイブリッド バックアップをまだ設定していない場合:
    1. 次の create-service-account コマンドを実行して、標準の roles/storage.objectAdmin ロールを持つ Google Cloud サービス アカウント(SA)を作成します。この SA ロールを使用すると、バックアップ データを Cloud Storage に書き込むことができます。管理ツールに適したディレクトリで次のコマンドを実行します。
      • Helm チャート: $APIGEE_HELM_CHARTS_HOME/apigee-operator/etc/
      • apigeectl: HYBRID_BASE_DIRECTORY/hybrid-files/
      ./tools/create-service-account --env non-prod --dir ./service-accounts

      このコマンドにより、非本番環境で使用する apigee-non-prod という名前の 1 つのサービス アカウントが作成され、ダウンロードしたキーファイルが ./service-accounts ディレクトリに配置されます。

      Google Cloud サービス アカウントの詳細については、サービス アカウントを作成して管理するをご覧ください。

    2. 上記の create-service-account コマンドにより、サービス アカウントの秘密鍵を含む JSON ファイルが作成され、コマンドを実行したディレクトリに保存されます。以降のステップでこのファイルのパスが必要になります。
  2. overrides.yaml ファイルを開きます。オーバーライド ファイルの例に示すように、次のパラメータを設定します。

    1. backup ブロックで、以下に示す一般的なパラメータを設定します。CSI 以外のハイブリッド バックアップ ソリューションでこれらのパラメータをすでに設定している場合は、CSI スナップショットに同じパラメータを使用できます。各値の詳細については、バックアップ プロパティのリファレンス テーブルをご覧ください。

      backup:

      • enabled: true に設定するとバックアップのスケジュール設定が有効になります。
      • pullPolicy in image: Always に設定します。
      • schedule: cron 式のスケジュールを指定します。
    2. CSI 固有のバックアップのパラメータは次のとおりです。
      • Cassandra ストレージ グループの値: 構成された Cassandra ストレージ クラスは、CSI バックアップと復元が機能するように CSI スナップショットをサポートする必要があります。ストレージ クラスが CSI スナップショットをサポートしているかどうかを確認するには、次のコマンドを実行して使用可能なストレージ クラスを取得します。
        kubectl get sc
        各ストレージ クラスの「プロビジョナー」の出力を確認します。CSI を使用するプロビジョナーは通常、名前に「.csi」の部分があります(例: pd.csi.storage.gke.io)。こちらの Kubernetes CSI ドライバの一覧でプロビジョナー名を探します。「Other Features」(その他の機能)列に「Snapshot」(スナップショット)という単語が含まれている場合、そのプロビジョナーを使用するストレージ クラスは CSI スナップショットをサポートしています。

        以下のパラメータをストレージ グループに追加します。どちらの値も必須です。

        • storageclass: CSI スナップショット対応ストレージ クラス名。
        • capacity: ディスクの容量。
      • クラウド プロバイダの種類:

        CSI スナップショット機能を確認したら、CSI バックアップと復元を使用するようにオーバーライド ファイルを変更します。

        • cloudProvider: backuprestorecloudProviderCSI に設定します。

バックアップ構成の例

このセクションでは、サンプルの overrides.yaml ファイルのバックアップ関連の部分について説明します。
cassandra:
  hostNetwork: false
  replicaCount: 3
  storage:
    storageclass: standard-rwo
    capacity: 100Gi
  image:
    pullPolicy: Always

  backup:
    enabled: true
    image:
      pullPolicy: Always
    cloudProvider: "CSI"
    schedule: "0 * * 11 *"

手動バックアップを開始する

CSI バックアップは、overrides.yaml ファイルに設定された cron スケジュールに従って自動的に生成されます。

手動 CSI バックアップを開始するには、次のコマンドを使用します。

kubectl create job -n APIGEE_NAMESPACE --from=cronjob/apigee-cassandra-backup BACKUP_POD_NAME
BACKUP_POD_NAME は、作成されるバックアップ Pod の名前です。

バックアップを確認する

バックアップが正常に作成されたことを確認する一つの方法は、次のコマンドを使用して Kubernetes クラスタのボリューム スナップショットを確認することです。

kubectl get volumesnapshot -n APIGEE_NAMESPACE

出力には、クラスタの現在のスナップショットのリストが表示されます。CSI バックアップ プロセスにより、各 Cassandra ディスクのスナップショットが作成されます。生成されるスナップショットの数は、クラスタ内の Cassandra Pod の合計数と一致する必要があります。

バックアップを復元する

このプロセスを使用して、以前に生成された CSI バックアップを復元します。バックアップの復元に関する一般的なプロセスとプロセスの概要については、復元の概要ページをご覧ください。

CSI バックアップの復元を開始するには、ハイブリッドの CSI 以外の単一リージョン復元の手順を行いますが、overrides.yamlrestore ブロックで以下の値を使用します。各値の詳細については、バックアップ プロパティのリファレンス テーブルをご覧ください。例については、復元構成の例をご覧ください。

  • enabled: true に設定すると、snapshotTimestamp タイムスタンプで参照されるバックアップの復元が有効になります。
  • snapshotTimestamp: 以前の CSI バックアップのタイムスタンプを指定します。
  • pullPolicy in image: Always に設定します。

復元する snapshotTimestamp 値を確認するには、次のコマンドを実行して、使用可能なスナップショットのリストを取得します。

kubectl get volumesnapshot -n APIGEE_NAMESPACE
返されるリストでは、スナップショットの名前にタイムスタンプが含まれています。
pvc-us-west2-b-20220803004907-47beff0e306d8861
この例のタイムスタンプは 20220803004907 です。

復元構成の例

このセクションでは、サンプルの overrides.yaml ファイルの復元関連の部分について説明します。
cassandra:
  hostNetwork: false
  replicaCount: 3
  storage:
    storageclass: standard-rwo
    capacity: 100Gi
  image:
    pullPolicy: Always

  restore:
    enabled: true
    snapshotTimestamp: "20220908222130"
    cloudProvider: "CSI"
    image:
      pullPolicy: Always

CSI のバックアップと復元に移行する

ハイブリッドのバックアップと復元をまだ使用したことがない場合は、CSI バックアップを設定するの手順に沿って新しい CSI バックアップを作成できます。このセクションの手順を行う必要はありません。この手順では、CSI 以外のバックアップと復元のソリューションから CSI バックアップへの移行について説明します。

  1. 現在構成されている CSI 以外のバックアップ方法を使用して新しいバックアップを生成します。
  2. バックアップ構成の例に示すように、CSI バックアップ オーバーライドを使用するように、ハイブリッド overrides.yaml ファイルのバックアップ構成を変更します。
  3. overrides.yaml ファイルに変更を適用します。
    helm upgrade datastore apigee-datastore/ \
      --namespace APIGEE_NAMESPACE \
      --atomic \
      -f OVERRIDES_FILE.yaml
    
  4. バックアップ ジョブを確認します。
    kubectl get cronjob -n APIGEE_NAMESPACE
  5. バックアップ ジョブが完了したら、スナップショットが作成されたことを確認します。生成されたスナップショットの数が、ハイブリッド インスタンスの Cassandra ノードの数と同じになる必要があります。
    kubectl get volumesnapshot -n APIGEE_NAMESPACE