第11回では、Azure Database for PostgreSQL フレキシブル サーバーのデータベースをバックアップする方法として、「pg_dump」コマンドの使用例をまとめてみました。
今回は、Azure Database for PostgreSQL フレキシブル サーバーのメジャー アップグレードする方法について、自分の整理も兼ねて、まとめてみようと思います。
※ Azure Database for PostgreSQL フレキシブル サーバー バージョン 13.7 および 14.3 を使用して検証
メジャー アップグレードについて
Azure Database for PostgreSQL フレキシブル サーバーでは、マイナー バージョン アップグレード (例えば 14.1 -> 14.2 など) は、定期的なメンテナンスの一環として自動的に実行されます。
しかしながら、メジャー バージョン アップグレード (例えば 13 -> 14 など) は、自動的にアップグレードは行われません。
また、Azure Database for PostgreSQL フレキシブル サーバー (シングル サーバーも同様) では、インプレース による メジャー バージョン アップグレードがサポートされていないため、上位のメジャー バージョンにアップグレードするためには、データベースの移行作業が発生します。
上位のメジャー バージョンにアップグレードする方法として、以下の方法があります。
- Database Migration Service (DMS) を使用した移行 (オンライン移行)
- PostgreSQL「pg_dump」,「pg_restore (pg_sql)」を使用した移行 (オフライン移行)
今回は、ダウンタイムを許容できない要件がある場合に選択可能な Database Migration Service (DMS) によるオンライン移行の方法について、まとめてみようと思います。
Database Migration Service (DMS) を使用した移行 (オンライン移行)
[事前作業]
1) 移行先用の 新しい Azure Database for PostgreSQL フレキシブル サーバーをデプロイします。
2) 移行元の Azure Database for PostgreSQL フレキシブル サーバーと同様のオプション設定などを、移行先のAzure Database for PostgreSQL フレキシブル サーバーに設定します。
3) 移行元の Azure Database for PostgreSQL フレキシブル サーバーのサーバー パラメータを以下のように変更します。
- wal_level : 「LOGICAL」
※ 設定変更を反映させるために再起動が必要
4) 移行元の Azure Database for PostgreSQL フレキシブル サーバーに接続し、pg_dump コマンドにより、テーブル スキーマ、インデックス、ストアドプロシージャ などの移行対象となっているすべてのデータベース オブジェクトを含む Dump ファイルを作成します。
[コマンド例]
pg_dump -h azpostgre01.postgres.database.azure.com -U sqladmin -d db1 --port=5432 --schema-only --format=p --file=c:\dump\db1.dump |
pg_dump コマンドの詳細については、以下の URL を参照
5) 移行先のAzure Database for PostgreSQL フレキシブル サーバー上に空のデータベースを作成します。
※ 新規データベースの作成については、以下の URL を参照
※「新規データベース作成 (lc_collate, lc_ctype パラメータ指定) 」参照
6) 移行先のAzure Database for PostgreSQL フレキシブル サーバー上に作成したデータベース (今回は「db1」) に対して、4) で作成した Dump ファイル より スキーマをインポートします。
[コマンド例]
psql -h azpostgre14.postgres.database.azure.com -U sqladmin -d db1 --port=5432 --file=c:\dump\db1.sql |
[Database Migration Service (DMS) 設定]
1) Azure ポータル にログインし、検索欄に「サブスクリプション」と入力後、「サブスクリプション」を選択します。
2) 「リソース プロバイダー」- 検索欄に「DataMigration」と入力後、「Microsoft.DataMigration」を選択し、「登録」を選択します。
「Microsoft.DataMigration」リソース プロバイダーが登録され、「Azure Database Migration Service」をデプロイすることが出来るようになります。
3) 「リソース」検索欄に「azure database migration service」と入力後、「Azure Database Migration Service」を選択します。
4) 「+作成」を選択します。
5) 以下のように選択後、「選択」を選択します。
・ソース サーバーの種類:「PostgreSQL」
※ ソースサーバーが Azure Database for PostgreSQL の場合も「PostgreSQL」を選択します。
・ターゲット サーバーの種類 :「Azure Database for PostgreSQL」
6) 「移行サービス名」などを任意で入力後、価格レベルを「Premium」に変更し、「次: ネットワーク」を選択します。
※ オンライン移行を実施するためには、価格レベルを「Premium」に変更する必要があります。
※ Azure Database Migration Service で 仮想コア 4つ備えた Premium SKU を利用する場合、最初の6ヶ月間 (183日) は無料で利用可能。
7) 既存の「仮想ネットワーク」もしくは、新規で「仮想ネットワーク」を作成し、「確認および作成」より、Database Migration Service (DMS) インスタンスをデプロイします。
※ 10分~15分 程度、デプロイに時間を要します。
※ Azure Database Migration Service に紐づく仮想ネットワーク から ソース サーバー、ターゲット サーバーへのアクセスが行われます。
8) Database Migration Service (DMS) インスタンスのデプロイが完了後、デプロイしたインスタンス (今回は「adms01」) を選択します。
9) 「+新しい移行プロジェクト」を選択します。
10) 以下のように選択後、「アクティビティの作成と実行」を選択します。
・移行プロジェクト名 : 任意
・ソース サーバーの種類:「PostgreSQL」
※ ソースサーバーが Azure Database for PostgreSQL の場合も「PostgreSQL」を選択します。
・ターゲット サーバーの種類 :「Azure Database for PostgreSQL」
・移行アクティビティの種類:「オンライン データの移行」
11) ソース サーバーの情報を入力後、「次 : ターゲットの選択」を選択します。
※ オンライン移行を実施するためには、指定するユーザーが「userepl (replication)」権限を保持している必要があります。
12) ターゲット サーバーの情報を入力後、「次 : データベースの選択」を選択します。
13) ソース サーバー上の移行対象のデータベース および ターゲット サーバー上の移行先データベース を選択後、「次: テーブルの選択」を選択します。
15) 移行対象のテーブルを選択後、「次 : 移行の設定の構成」を選択します。
16) 「同時に読み込むテーブルの最大数」の設定などを変更後、「次 : サマリー」を選択します。
17) 「活動名」に任意の内容を記入後、サマリーの内容に誤りがないことを確認し、「移行の開始」を選択します。
18) 「移行の詳細」:「一括移行の準備完了」とステータスが変わったことを確認後、データベース名 (今回は「db1」) を選択します。
※「一括移行の準備完了」ステータスは、移行元データベース(ソース サーバー)の全データが、移行先データベース(ターゲット サーバー)上に反映された状態となります。
19) ソース サーバー上のデータベース上のデータを挿入、更新、削除のトランザクションが反映されていることを確認します。
[補足]
Azure Databaes Migration Serviceのオンライン移行を実施する場合の制限事項
- 主キー (プライマリ キー) が存在しないテーブルの場合、INSERT 処理は反映されるが、UPDATE/DELETE 処理は反映されない。
- 主キー (プライマリ キー) が更新された場合、データは反映されない。
- 同じ名前でかつ、大文字、小文字が異なるテーブルの移行はサポートされていない。 (例えば、「Table」、「TABLE」など)
Azure Database Migration Service の詳細な制限事項については、以下の URL を参照。
[Database Migration Service (DMS) 最終移行設定]
1) 実行中のDMS アクティビティ(今回は「act4」) を選択します。
2) 移行対象のデータベース(今回は「db1」) を選択します。
3)「一括移行の開始」を選択します。
4) 保留中の変更が「0」になっていることを確認後、保留中の変更:確認 にチェックし、「適用」を選択します。
5) 正常にデータ移行が完了したことを確認し、アプリケーションから接続するデータベースを移行先のデータベースに変更します。
※「一括移行を完了する」処理を実行することで、ソース サーバー - ターゲット サーバー間のレプリケーション処理も停止します。
[参考URL]
まとめ
今回は、Azure Database for PostgreSQL フレキシブル サーバーのメジャー アップグレードを Azure Database Migration Service (オンライン移行) を利用して実施する方法について整理してみました。
Azure Database Migration Service (オンライン移行) を利用する場合の制約事項はありますが、ダウンタイムを可能な限り減らしたデータ移行が可能であり、また、Azure Database Migration Service を仮想コア 4つ備えた Premium SKU で利用する場合、最初の6ヶ月間 (183日) は無料で利用可能であるため、制約事項を許容できる場合は、積極的に利用を検討してみても良いかと思います。
また、今回、Azure Database Migration Service (DMS) を Azure Database for PostgreSQL フレキシブル サーバー から Azure Database for PostgreSQL フレキシブル サーバー への移行目的で利用してみましたが、以下のような移行パスがサポートされているため、Azure 環境にデータ移行を実施する必要がある場合、Azure Database Migration Service (DMS) を利用することが可能となるか、確認してみると良いかと思います。
[Azure Database Migration Service 移行パス]
SQL Server -> Azure SQL Database
SQL Server -> Azure SQL Database Managed Instance
AWS RDS for SQL Server -> Azure SQL Database
AWS RDS for PostgreSQL -> Azure Database for PostgreSQL フレキシブル サーバー
MongoDB -> Cosmos DB
※一部抜粋
インデックス : 基本から始める Azure Database for PostgreSQL
※ 2022年9月 現在