第3章 組み込み PostgreSQL 10 データベースから外部 PostgreSQL 10 データベースへの移行
-
system.appSpec.replicasを1にスケーリングする前に、データベースをサポートされているバージョン (現在 PostgreSQL 13) にアップグレードする必要があります。Red Hat 3scale API Management のサポート対象設定 を参照してください。 - このドキュメントは、組み込み PostgreSQL 10 データベースから外部 PostgreSQL 10 データベースへの移行を説明します。外部 PostgreSQL 10 データベースから外部 PostgreSQL 13 データベースにアップグレードするには、PostgreSQL の公式ドキュメント に従う必要があります。
- 免責事項: ここに記載されている外部 Web サイトへのリンクは、お客様の利便性のみを目的として提供されています。Red Hat はリンクの内容を確認しておらず、コンテンツまたは可用性に責任を負わないものとします。外部 Web サイトへのリンクが含まれていても、Red Hat が Web サイトまたはその組織、製品、もしくはサービスを保証することを意味するものではありません。お客様は、外部サイトまたはコンテンツの使用 (または信頼) によって生じる損失または費用について、Red Hat が責任を負わないことに同意するものとします。
組み込み PostgreSQL データベースから外部 PostgreSQL データベースに移行するプロセスは、同じ DB バージョンで実行する必要があります。この移行ガイドは、PostgreSQL 10 である必要があります。運用環境には外部データベースを使用する必要があります。
system-database として PostgreSQL を使用している場合は、3scale での 外部データベースのインストール にサポートされているバージョンを使用してください。
- これらの手順は一般的なガイドラインです。正確な手順は、オペレーティングシステム、PostgreSQL のバージョン、データベースの特定要件によって異なる場合があります。
- アップグレードする前に、PostgreSQL のドキュメント とリリースノートをよく読んでください。
- この手順を実稼働環境に適用する前に、非実稼働環境でテストしてください。
- このプロセスの手順が完了するまで、サービスの提供が中断されます。このサービス中断が生じるため、メンテナンス期間を設けるようにしてください。
手順
APIManager カスタマーリソース (CR) を使用して、
system-appの DeploymentConfig (DC) をスケールダウンします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow Pod がスケールダウンされていることを確認します。
oc get deploymentconfig system-app -o jsonpath='{.status.availableReplicas}{"\n"}'$ oc get deploymentconfig system-app -o jsonpath='{.status.availableReplicas}{"\n"}' 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
PostgreSQL の移行を続行する前に、すべての 3scale Pod のステータスが
Terminatedになるまで待ちます。
-
PostgreSQL の移行を続行する前に、すべての 3scale Pod のステータスが
すべてのデータ、設定、ユーザーアカウントを含む既存の PostgreSQL データベースのバックアップを作成します。
DB_USER=$(oc get secret system-database -o jsonpath="{.data.DB_USER}" | base64 --decode) DATABASE_NAME=$(oc get secret system-database -o jsonpath="{.data.URL}" | base64 --decode | cut -d '/' -f4)$ DB_USER=$(oc get secret system-database -o jsonpath="{.data.DB_USER}" | base64 --decode) $ DATABASE_NAME=$(oc get secret system-database -o jsonpath="{.data.URL}" | base64 --decode | cut -d '/' -f4)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要stdoutにパイプしないでください。バイナリーファイルが破損します。カスタム形式でダンプします。
oc rsh $(oc get pods -l 'deploymentConfig=system-postgresql' -o json | jq -r '.items[0].metadata.name') bash -c "pg_dump -U $DB_USER -F c $DATABASE_NAME -f /tmp/<backupfilename>.backup"
$ oc rsh $(oc get pods -l 'deploymentConfig=system-postgresql' -o json | jq -r '.items[0].metadata.name') bash -c "pg_dump -U $DB_USER -F c $DATABASE_NAME -f /tmp/<backupfilename>.backup"Copy to Clipboard Copied! Toggle word wrap Toggle overflow バックアップをダウンロードします。
oc cp $(oc get pods -l 'deploymentConfig=system-postgresql' -o json | jq -r '.items[0].metadata.name'):/tmp/<backupfilename>.backup <backupfilename>.backup
$ oc cp $(oc get pods -l 'deploymentConfig=system-postgresql' -o json | jq -r '.items[0].metadata.name'):/tmp/<backupfilename>.backup <backupfilename>.backupCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 3scale にデプロイしたのと同じバージョンの PostgreSQL 10 をターゲットの外部システムにインストールします。インストール手順に従って、PostgreSQL Web サイトからインストールパッケージをダウンロードします。
- 既存の PostgreSQL データベースで作成したバックアップ (すべてのデータ、設定、ユーザーアカウントを含む) をターゲットの外部システムにコピーして復元します。
PostgreSQL で新しいデータベースを作成します。
createdb -U <username> <databasename>
$ createdb -U <username> <databasename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow バックアップファイルから新しい PostgreSQL データベースにデータをインポートします。
カスタム形式で復元します。
pg_restore [--host <databasehostname>] -U <username> -d <databasename> --verbose -F c <backupfilename>.backup
$ pg_restore [--host <databasehostname>] -U <username> -d <databasename> --verbose -F c <backupfilename>.backupCopy to Clipboard Copied! Toggle word wrap Toggle overflow
データベースに接続してクエリーを実行し、データが新しい PostgreSQL データベースに正常にインポートされたことを確認します。
postgresql://<username>:<password>@<databasehostname>/<databasename>
postgresql://<username>:<password>@<databasehostname>/<databasename>Copy to Clipboard Copied! Toggle word wrap Toggle overflow system-databaseシークレットを更新します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow APImanager CR を更新して外部データベースを有効にし、システムをスケールアップします。
oc patch apimanager <apimanager_sample> --type=merge --patch '{"spec": {"system": {"database": null, "appSpec": {"replicas": 1}}, "externalComponents": {"system": {"database": true}}}}'$ oc patch apimanager <apimanager_sample> --type=merge --patch '{"spec": {"system": {"database": null, "appSpec": {"replicas": 1}}, "externalComponents": {"system": {"database": true}}}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow ローカルの postgresql デプロイメントを削除します。
oc delete service system-postgresql oc delete deploymentconfig system-postgresql oc delete pvc postgresql-data
$ oc delete service system-postgresql $ oc delete deploymentconfig system-postgresql $ oc delete pvc postgresql-dataCopy to Clipboard Copied! Toggle word wrap Toggle overflow Pod がスケールアップされていることを確認します。
oc wait --for=condition=available apimanager/<apimanager_sample> --timeout=-1s
$ oc wait --for=condition=available apimanager/<apimanager_sample> --timeout=-1sCopy to Clipboard Copied! Toggle word wrap Toggle overflow