このページの手順では、ソース データベース クラスタとターゲット データベース クラスタが Google Kubernetes Engine で作成され、バックアップ ディスクが Compute Engine 永続ディスクであることを前提としています。また、データベースのバックアップとして使用される Compute Engine 永続ディスクが、他のどのデータベース クラスタでも使用されていないことを前提としています。
次のワークフローは、クローン作成に使用される手順を示しています。
- ソース データベース クラスタのバックアップ ディスクのバックアップ ディスク情報(永続ボリューム名、Compute Engine 永続ディスク ハンドラなど)を特定します。
PersistentVolumeリソースを作成して、ターゲット データベース クラスタの既存のバックアップ ディスクを使用し、ソース データベース クラスタのバックアップ ディスクにアクセスします。livenessProbeパラメータを無効にしてバックアップ ディスク情報を追加し、ターゲット データベース クラスタにDBClusterリソース マニフェスト ファイルを作成して適用します。pgBackRestコマンドを使用して、ソース バックアップにアクセスできることを確認します。pgBackRestコマンドを使用して、バックアップをターゲット データベース クラスタに復元します。
始める前に
- ソース データベース クラスタのバックアップが保存されているバックアップ ディスクにアクセスできることを確認します。
- ソース データベース クラスタのバックアップ ディスクをターゲット データベース クラスタにマウントできる必要があります。ディスクをマウント可能にする手順の詳細については、永続ボリュームをご覧ください。
- ソース バックアップ ディスクはターゲット データベース クラスタにマウントされているため、
pgBackRest.confファイルはそのまま再利用されます。 postgresユーザーとしてデータベースにログインしていることを確認します。
ソース バックアップのディスク情報を取得する
復元プロセスの一環として、ソース データベース クラスタのバックアップ ディスクの Persistent Volume Claim(PVC)名を特定します。PVC は、Kubernetes 内でアプリケーションの永続ストレージを管理するために使用されます。
次のサンプル コマンドを使用すると、基盤となる PV 名と Compute Engine 永続ディスク ハンドラを見つけることができます。この例では、すべてのバックアップ ディスクは Compute Engine 永続ディスクであり、ディスク ハンドラ ID を使用して Compute Engine VM 間でアクセスできます。
ターゲット データベース クラスタに接続して、PVC 名を確認します。
kubectl get pvc -n DB_CLUSTER_NAMESPACE | grep DB_CLUSTER_NAME | grep backupdisk次のように置き換えます。
DB_CLUSTER_NAMESPACE: このバックアップ プランの Kubernetes Namespace。データベース クラスタの Namespace と一致する必要があります。DB_CLUSTER_NAME: このデータベース クラスタの名前(例:my-db-cluster)。
レスポンスの例を次に示します。
backupdisk-al-fe8c-my-db-cluster-0 Bound pvc-36d8f05d-ef1a-4750-ac01-9bb330c15b3a 10Gi RWO standard-rwo 5d21h前の手順のバックアップ ディスク PVC 名(
backupdisk-al-fe8c-my-db-cluster-0など)を使用して、基盤となる PV 名と Compute Engine 永続ディスク ハンドラを見つけます。kubectl get pvc/PVC_NAME -n DB_CLUSTER_NAME -o jsonpath={.spec.volumeName}次のように置き換えます。
PVC_NAME: 前の手順のレスポンスから取得したバックアップ ディスクの PVC 名(例:backupdisk-al-fe8c-dbcluster-sample-0)。
PV 名に基づいて構成を変数としてエクスポートし、後続のセクションで使用します。
export DISK_SIZE=$(kubectl get pv/PV_NAME -o jsonpath="{.spec.capacity.storage}") export FS_TYPE=$(kubectl get pv/PV_NAME -o jsonpath="{.spec.csi.fsType}") export VOLUME_HANDLER=$(kubectl get pv/PV_NAME -o jsonpath="{.spec.csi.volumeHandle}") export STORAGE_CLASS=$(kubectl get pv/PV_NAME -o jsonpath="{.spec.storageClassName}")次のように置き換えます。
PV_NAME: 前の手順のレスポンスから取得したバックアップ ディスクの PV 名。
ターゲット データベース クラスタに永続ボリューム リソースを作成する
ディスク ハンドラ名を使用して、PersistentVolume リソースを作成します。
ターゲット データベース クラスタで、
PersistentVolumeマニフェスト ファイルを作成します。apiVersion: v1 kind: PersistentVolume metadata: name: backupdisk spec: storageClassName: "${STORAGE_CLASS}" capacity: storage: "${DISK_SIZE}" accessModes: - ReadWriteOnce csi: driver: pd.csi.storage.gke.io volumeHandle: "${VOLUME_HANDLER}" fsType: "${FS_TYPE}"マニフェスト ファイルを適用します。
kubectl apply -f PV_FILENAME次のように置き換えます。
- PV_FILENAME: 前の手順で作成した
PersistentVolumeマニフェスト ファイルの名前。
- PV_FILENAME: 前の手順で作成した
ターゲット データベース クラスタを作成する
復元プロセスが完了するまで livenessProbe パラメータを一時的に無効にして、データベース クラスタを作成します。
DBClusterマニフェスト ファイルを作成します。apiVersion: v1 kind: Secret metadata: name: db-pw-DB_CLUSTER_NAME type: Opaque data: DB_CLUSTER_NAME: "ENCODED_PASSWORD" --- apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBCluster metadata: name: DB_CLUSTER_NAME spec: primarySpec: availabilityOptions: livenessProbe: "Disabled" adminUser: passwordRef: name: db-pw-DB_CLUSTER_NAME resources: memory: 100Gi cpu: 10 disks: - name: DataDisk size: 40Gi - name: BackupDisk size: ${DISK_SIZE} storageClass: ${STORAGE_CLASS} volumeName: backupdisk次のように置き換えます。
DB_CLUSTER_NAME: このデータベース クラスタの名前。例:my-db-clusterENCODED_PASSWORD: デフォルトのpostgresユーザーロールのデータベース ログイン パスワード。base64 文字列としてエンコードされます。例:ChangeMe123の場合はQ2hhbmdlTWUxMjM=
マニフェスト ファイルを適用します。
kubectl apply -f DBCLUSTER_FILENAME次のように置き換えます。
- DBCLUSTER_FILENAME: 前の手順で作成した
DBClusterマニフェスト ファイルの名前。
- DBCLUSTER_FILENAME: 前の手順で作成した
kubectl describe コマンドを使用して、データベース クラスタ リソースが READY ステータスであることを確認します。
ターゲット データベース クラスタのソース バックアップを確認する
pgBackRest コマンドを実行して、ソース データベース クラスタのバックアップにターゲット データベース クラスタからアクセスできることを確認します。
ターゲット データベース クラスタで、データベース クラスタ Pod の詳細を確認します。
kubectl get pod -l "alloydbomni.internal.dbadmin.goog/dbcluster=DB_CLUSTER_NAME, alloydbomni.internal.dbadmin.goog/task-type=database"レスポンスには、クラスタ データベース Pod の名前が含まれます。
データベース Pod にログインします。
kubectl exec -ti DATABASE_POD_NAME -- /bin/bash次のように置き換えます。
- DATABASE_POD_NAME: 前の手順で作成したデータベース クラスタ Pod の名前。
pgBackRest構成ファイルを更新する前に、Pod を停止します。supervisorctl.par stop postgresデータベース クラスタ Pod でソース バックアップを確認します。
pgbackrest --config-path=/backup --stanza=db --repo=1 infoレスポンスの例を次に示します。
stanza: db status: ok cipher: none db (current) wal archive min/max (15): 000000010000000000000002/00000001000000000000000D full backup: 20240213-231400F timestamp start/stop: 2024-02-13 23:14:00+00 / 2024-02-13 23:17:14+00 wal start/stop: 000000010000000000000003 / 000000010000000000000003 database size: 38.7MB, database backup size: 38.7MB repo1: backup set size: 4.6MB, backup size: 4.6MB incr backup: 20240213-231400F_20240214-000001I timestamp start/stop: 2024-02-14 00:00:01+00 / 2024-02-14 00:00:05+00 wal start/stop: 00000001000000000000000D / 00000001000000000000000D database size: 38.7MB, database backup size: 488.3KB repo1: backup set size: 4.6MB, backup size: 84.2KB backup reference list: 20240213-231400F
レスポンスのタイムスタンプは、完全バックアップの復元または復元ウィンドウ内の特定の時点からの復元に使用されます。
ターゲット データベース クラスタにバックアップを復元する
復元するバックアップまたは復元ポイントを特定したら、ターゲット データベース クラスタで pgBackRest コマンドを実行します。これらのコマンドの詳細については、復元コマンドをご覧ください。
以下に、pgBackRest コマンドの例を示します。
バックアップから復元する
pgbackrest --config-path=/backup --stanza=db --repo=1 restore --set=20240213-231400F --type=immediate --target-action=promote --delta --link-all --log-level-console=info特定の時点から復元する
pgbackrest --config-path=/backup --stanza=db --repo=1 restore --target="2024-01-22 11:27:22" --type=time --target-action=promote --delta --link-all --log-level-console=info
Pod を再起動する
復元コマンドが正常に完了したら、postgres プロセスを開始できます。
supervisorctl.par start postgrespostgres プロセスが開始したら、プライマリ インスタンスに接続してクエリを実行し、データがバックアップから復元されたことを確認できます。詳細については、Kubernetes で実行されている AlloyDB Omni に接続するをご覧ください。