このページでは、Cloud Storage を使用せずに Cassandra のバックアップをスケジュールする方法について説明します。この方法では、バックアップは Cloud Storage バケットではなく、ユーザーが指定したリモート サーバーに保存されます。Apigee は SSH を使用してリモート サーバーと通信します。
バックアップは cron ジョブとしてスケジュールする必要があります。バックアップ スケジュールがハイブリッド クラスタに適用されると、ランタイム プレーンのスケジュールに従って Kubernetes バックアップ ジョブが定期的に実行されます。このジョブがハイブリッド クラスタ内の各 Cassandra ノードでトリガーするバックアップ スクリプトにより、ノード上のすべてのデータが収集されてアーカイブ(圧縮)ファイルが作成され、overrides.yaml ファイルで指定されたサーバーに送信されます。
以下の手順には、SSH 認証鍵ペアの作成など、特定のタスクを完了するための一般的な例が含まれています。ご使用の環境に適した方法をお選びください。
このプロシージャは次のパートで構成されています。
サーバーと SSH を設定する
- バックアップ サーバーを選択する: バックアップ用に十分なストレージがある Linux サーバーまたは Unix サーバーを選択し、Apigee ハイブリッド ランタイム プレーンから SSH 経由でアクセスできることを確認します。
- SSH サーバーを構成する: SSH サーバーをインストールするか、既存の SSH サーバーが安全であることを確認します。
- SSH 認証鍵ペアを作成する: パスフレーズなしで SSH 認証鍵ペアを生成します。次に例を示します。
ssh-keygen -t rsa -b 4096 -C exampleuser@example.comEnter 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 の形式でアカウント名を使用すると、鍵に対応するアカウントをすばやく特定できます。このコマンドは 2 つの SSH 認証鍵ファイルを生成します。これは、秘密鍵ファイル(ssh_key.rsa など)と公開鍵ファイル(ssh_key.pub など)です。
ランタイム プレーンがアクセスできる場所に秘密鍵を保存します。
- ユーザー アカウントを追加する: バックアップ サーバーで、
/home/apigeeにホーム ディレクトリを持つ apigee という名前のユーザーを作成します。新しいapigeeユーザーのホーム ディレクトリが/homeの下にあることを確認します。 - .ssh ディレクトリを設定する: バックアップ サーバーで、
/home/apigee/.sshに.sshディレクトリを作成します。次に例を示します。cd /home/apigeemkdir .sshcd .sshvi authorized_keys - 公開鍵をインストールする: 公開鍵を
/home/apigee/ディレクトリ内のauthorized_keysファイルに配置します。バックアップ ディレクトリには、apigeeユーザーがアクセスできる任意のディレクトリを使用できます。ssh public keyファイルの内容をファイルに貼り付けます。 - SSH アクセスを確認する: ローカルマシンまたはクラスタノードから接続をテストします。
ssh -i PATH_TO_PRIVATE_KEY_FILE apigee@BACKUP_SERVER_IP
バックアップのスケジュールと宛先を設定する
overrides.yaml ファイルでバックアップのスケジュールと宛先を設定します。
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:keyFilePATH_TO_PRIVATE_KEY_FILE
ローカル ファイル システム上の SSH 秘密鍵ファイルへのパス(SSH 認証鍵ペアを作成した手順の
ssh_key)。このパスは、apigee-datastoreチャート ディレクトリを基準にした相対パスにする必要があります。backup:serverBACKUP_SERVER_IP
バックアップ サーバーの IP アドレス。
backup:storageDirectoryBACKUP_DIRECTORY
バックアップ サーバー上のバックアップ ディレクトリの名前。これは、
home/apigee内のディレクトリにする必要があります(バックアップ ディレクトリを作成したステップでバックアップ ディレクトリにcassandra_backupという名前を付けています)。backup:cloudProviderHYBRIDリモート サーバーのバックアップの場合は、プロパティを
HYBRIDに設定します。backup:scheduleSCHEDULE
バックアップの開始時刻。標準の crontab 構文で指定します。時刻は Kubernetes クラスタのローカル タイムゾーンで指定します。デフォルト:
0 2 * * *- バックアップ構成をクラスタのストレージ スコープに適用します。
helm upgrade datastore apigee-datastore/ \ --install \ --namespace APIGEE_NAMESPACE \ --atomic \ -f OVERRIDES_FILE.yaml
ここで、OVERRIDES_FILE は、先ほど編集したオーバーライド ファイルのパスです。
- バックアップ ジョブを確認します。次に例を示します。
kubectl get cronjob -n APIGEE_NAMESPACE
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE apigee-cassandra-backup 33 * * * * False 0 <none> 94s
手動バックアップを開始する
バックアップ ジョブは、overrides.yaml ファイルの cassandra.backup.schedule で設定された cron スケジュールに従って自動的にトリガーされます。ただし、必要に応じて、次のコマンドを使用してバックアップ ジョブを手動で開始することもできます。
kubectl create job -n APIGEE_NAMESPACE --from=cronjob/apigee-cassandra-backup MANUAL_BACKUP_JOB_NAME
ここで、MANUAL_BACKUP_JOB_NAME は作成する手動バックアップ ジョブの名前です。
トラブルシューティング
-
Cassandra Pod から接続をテストします。Cassandra Pod が SSH を使用してバックアップ サーバーに接続できることを確認する必要があります。
-
Cassandra Pod のシェルにログインします。次に例を示します。
kubectl exec -it -n APIGEE_NAMESPACE APIGEE_CASSANDRA_POD -- /bin/bash
ここで、APIGEE_CASSANDRA_POD は Cassandra Pod の名前です。この名前を接続元の Pod の名前に変更します。
-
Cassandra Pod にマウントした SSH 秘密鍵とサーバーの IP アドレスを使用して、SSH でバックアップ サーバーに接続します。
ssh -i /var/secrets/keys/key apigee@BACKUP_SERVER_IP
-
Cassandra Pod のシェルにログインします。次に例を示します。
- Cassandra Pod からリモート サーバーにアクセスできない場合は、リモート サーバーの SSH 構成を再度確認し、データストアのアップグレードが正常に終了したことを確認してください。
-
Cassandra が正しい秘密鍵を使用しているかどうかは、Cassandra Pod にログインしているときに次のコマンドを実行し、出力を作成した秘密鍵と比較することで確認できます。
cat /var/secrets/keys/key