リモート サーバーでのバックアップのスケジュール設定

このページでは、Cloud Storage を使用せずに Cassandra のバックアップをスケジュールする方法について説明します。この方法では、バックアップは Cloud Storage バケットではなく、ユーザーが指定したリモート サーバーに保存されます。Apigee は SSH を使用してリモート サーバーと通信します。

バックアップは cron ジョブとしてスケジュールする必要があります。バックアップ スケジュールがハイブリッド クラスタに適用されると、ランタイム プレーンのスケジュールに従って Kubernetes バックアップ ジョブが定期的に実行されます。このジョブは、ハイブリッド クラスタ内の各 Cassandra ノードでバックアップ スクリプトをトリガーし、ノード上のすべてのデータを収集して、データのアーカイブ(圧縮)ファイルを作成し、アーカイブを overrides.yaml ファイルで指定されたサーバーに送信します。

以下の手順には、SSH 認証鍵ペアの作成など、特定のタスクを完了するための一般的な例が含まれています。ご使用の環境に適した方法をお選びください。

このプロシージャは次のパートで構成されています。

サーバーと SSH を設定する

  1. バックアップ サーバーを選択する: バックアップに十分なストレージがある Linux サーバーまたは Unix サーバーを選択し、Apigee ハイブリッド ランタイム プレーンから SSH 経由でアクセスできることを確認します。
  2. SSH サーバーを構成する: SSH サーバーをインストールするか、既存の SSH サーバーが安全であることを確認します。
  3. SSH 認証鍵ペアを作成する: パスフレーズなしで SSH 認証鍵ペアを生成します。次に例を示します。
    ssh-keygen -t rsa -b 4096 -C exampleuser@example.com
      Enter file in which to save the key (/Users/exampleuser/.ssh/id_rsa): $APIGEE_HOME/hybrid-files/certs/ssh_key
      Enter passphrase (empty for no passphrase):
      Enter same passphrase again:
      Your identification has been saved in ssh_key
      Your public key has been saved in ssh_key.pub
      The key fingerprint is:
      SHA256:DWKo334XMZcZYLOLrd/8HNpjTERPJJ0mc11UYmrPvSA exampleuser@example.com
      The key's randomart image is:
      +---[RSA 4096]----+
      |          +.  ++X|
      |     .   . o.=.*+|
      |    . o . . o==o |
      |   . . . =oo+o...|
      |  .     S +E oo .|
      |   . .   .. . o .|
      |    . . .  . o.. |
      |     .  ...o ++. |
      |      .. .. +o+. |
      +----[SHA256]-----+

    ここで、exampleuser@example.com は文字列です。ssh-keygen コマンドの -C に続く文字列はすべて、新しく作成された ssh キーに含まれるコメントになります。入力文字列には任意の文字列を指定できます。exampleuser@example.com の形式でアカウント名を使用すると、鍵に対応するアカウントをすばやく特定できます。

    このコマンドは、秘密鍵ファイル(ssh_key.rsa など)と公開鍵ファイル(ssh_key.pub など)の 2 つの SSH 認証鍵ファイルを生成します。

    ランタイム プレーンがアクセスできる場所に秘密鍵を保存します。

  4. ユーザー アカウントを追加する: バックアップ サーバーで、/home/apigee の下にホーム ディレクトリを持つ apigee という名前のユーザーを作成します。新しい apigee ユーザーのホーム ディレクトリが /home の下にあることを確認します。
  5. .ssh ディレクトリを設定する: バックアップ サーバーで、/home/apigee/.ssh.ssh ディレクトリを作成します。次に例を示します。
    cd /home/apigee
          mkdir .ssh
          cd .ssh
          vi authorized_keys
  6. 公開鍵をインストールする: 公開鍵を /home/apigee/ ディレクトリ内の authorized_keys ファイルに配置します。バックアップ ディレクトリには、apigee ユーザーがアクセス可能な任意のディレクトリを使用できます。ssh public key ファイルの内容をファイルに貼り付けます。
  7. SSH アクセスを確認する: ローカルマシンまたはクラスタノードから接続をテストします。
  8. ssh -i PATH_TO_PRIVATE_KEY_FILE apigee@BACKUP_SERVER_IP

バックアップのスケジュールと宛先を設定する

overrides.yaml ファイルでバックアップのスケジュールと宛先を設定します。

  1. overrides.yaml ファイルに次のパラメータを追加します。

    パラメータ

    cassandra:
      backup:
        enabled: true
        keyFile: "PATH_TO_PRIVATE_KEY_FILE"
        server: "BACKUP_SERVER_IP"
        storageDirectory: "/home/apigee/BACKUP_DIRECTORY"
        cloudProvider: "HYBRID" # required verbatim "HYBRID" (all caps)
        schedule: "SCHEDULE"

    cassandra:
      backup:
        enabled: true
        keyFile: "private.key" # path relative to apigee-datastore path
        server: "34.56.78.90"
        storageDirectory: "/home/apigee/cassbackup"
        cloudProvider: "HYBRID"
        schedule: "0 2 * * *"

    ここで

    プロパティ 説明
    backup:enabled バックアップはデフォルトでは無効になっています。このプロパティを true に設定する必要があります。
    backup:keyFile

    PATH_TO_PRIVATE_KEY_FILE

    ローカル ファイル システム上の SSH 秘密鍵ファイル(SSH 認証鍵ペアを作成した手順ssh_key と名付けています)へのパス。このパスは、apigee-datastore チャート ディレクトリからの相対パスにする必要があります。

    backup:server

    BACKUP_SERVER_IP

    バックアップ サーバーの IP アドレス。

    backup:storageDirectory

    BACKUP_DIRECTORY

    バックアップ サーバー上のバックアップ ディレクトリの名前。これは、home/apigee 内のディレクトリにする必要があります(バックアップ ディレクトリを作成したステップでバックアップ ディレクトリに cassandra_backup という名前を付けています)。

    backup:cloudProvider

    GCP/HYBRID

    Cloud Storage バックアップの場合は、プロパティを GCP に設定します。たとえば、cloudProvider: "GCP" です。

    リモート サーバーのバックアップの場合は、プロパティを HYBRID に設定します。たとえば、cloudProvider: "HYBRID" です。

    backup:schedule

    SCHEDULE

    バックアップの開始時刻。標準の crontab 構文で指定します。時刻は Kubernetes クラスタのローカル タイムゾーンで指定します。デフォルト: 0 2 * * *

  2. バックアップ構成をクラスタのストレージ スコープに適用します。
    helm upgrade datastore apigee-datastore/ \
      --namespace apigee \
      --atomic \
      -f OVERRIDES_FILE.yaml
    

    ここで、OVERRIDES_FILE は、先ほど編集したオーバーライド ファイルのパスです。

  3. バックアップ ジョブを確認します。次に例を示します。
    kubectl get cronjob -n apigee
    NAME                      SCHEDULE     SUSPEND   ACTIVE   LAST SCHEDULE   AGE
    apigee-cassandra-backup   33 * * * *   False     0        <none>          94s

トラブルシューティング

  1. Cassandra Pod から接続をテストします。Cassandra Pod が SSH を使用してバックアップ サーバーに接続できることを確認する必要があります。
    1. Cassandra Pod のシェルにログインします。次に例を示します。
      kubectl exec -it -n apigee APIGEE_CASSANDRA_DEFAULT_0 -- /bin/bash

      ここで、APIGEE_CASSANDRA_DEFAULT_0 は Cassandra Pod の名前です。この名前を接続元の Pod の名前に変更します。

    2. Cassandra Pod にマウントした SSH 秘密鍵とサーバーの IP アドレスを使用して、SSH でバックアップ サーバーに接続します。
      ssh -i /var/secrets/keys/key apigee@BACKUP_SERVER_IP
  2. Cassandra Pod からリモート サーバーにアクセスできない場合は、リモート サーバーの SSH 構成を再度確認し、データストアのアップグレードが正常に終了したことを確認してください。
  3. Cassandra が正しい秘密鍵を使用しているかどうかは、Cassandra Pod にログインしているときに次のコマンドを実行し、出力を作成した秘密鍵と比較することで確認できます。
    cat /var/secrets/keys/key