チュートリアル: 移行サービス プレビューを使用して、Azure VM またはオンプレミスの PostgreSQL サーバーから Azure Database for PostgreSQL にオンラインで移行する

適用対象: Azure Database for PostgreSQL - フレキシブル サーバー

この記事では、Azure portal と Azure CLI を使用して、オンプレミスまたは Azure 仮想マシン (VM) から Azure Database for PostgreSQL フレキシブル サーバーに PostgreSQL インスタンスを移行する方法について説明します。

Azure Database for PostgreSQL の移行サービスは、Azure portal と Azure CLI に統合されたフル マネージド サービスです。 これは、Azure Database for PostgreSQL フレキシブル サーバーへの移行作業を簡略化するように設計されています。

  • Azure Database for PostgreSQL - フレキシブル サーバーを構成する
  • 移行タスクを構成する
  • 移行を監視する
  • 完了時に移行を確認する

前提条件

移行を開始するには、次の前提条件が必要です。

Azure Database for PostgreSQL 移行サービスを使用して移行を開始する前に、オンライン移行シナリオ向けに特に設計された次の前提条件を満たすことが重要です。

ソース バージョンの確認

ソースの PostgreSQL サーバーのバージョンが 9.5 以降である必要があります。

ソース PostgreSQL のバージョンが 9.5 未満の場合は、移行を開始する前に 9.5 以降にアップグレードします。

test_decoding のインストール - ソースのセットアップ

  • test_decoding は、論理デコード メカニズムを通じて WAL を受信し、実行された操作のテキスト表現にデコードします。

  • test-decoding プラグインの詳細については、PostgreSQL のドキュメントを参照してください

ターゲット セットアップを構成する

  • 移行する前に、Azure Database for PostgreSQL - フレキシブル サーバーを作成する必要があります。
  • Azure Database for PostgreSQL - フレキシブル サーバー用にプロビジョニングされた SKU はソースと一致する必要があります。
  • 新しい Azure Database for PostgreSQL を作成するには、Azure Database for PostgreSQL の作成に関するページを参照してください

ソースとして CDC を有効にする

  • test_decoding 論理デコード プラグインは、変更されたレコードをソースから取り込みます。
  • ソース PostgreSQL インスタンスで、postgresql.conf 構成ファイルに次のパラメーターと値を設定します。
    • Set wal_level = logical
    • Set max_replication_slots を 1 より大きい値に設定します。この値は、移行対象として選んだデータベースの数より大きくする必要があります。
    • Set max_wal_senders を 1 より大きい値、少なくとも max_replication_slots と同じ値に、インスタンスで既に使用されている送信者の数を加えた値に設定する必要があります。
    • wal_sender_timeout パラメーターは、指定されたミリ秒数を超えて非アクティブなレプリケーション接続を終了します。 オンプレミスの PostgreSQL データベースの既定値は 60,000 ミリ秒 (60 秒) です。 値を 0 (ゼロ) に設定するとタイムアウト メカニズムが無効になり、移行に有効な設定となります。

オンライン移行の領域が不足しないようにするには、プロビジョニングされたマネージド ディスクを使用して十分なテーブルスペース領域があることを確認します。 これを実現するには、移行中にフレキシブル サーバーでサーバー パラメーター azure.enable_temp_tablespaces_on_local_ssd を無効にし、移行後に元の状態に復元します。

ネットワーク セットアップを構成する

ネットワーク セットアップは、移行サービスが正しく機能するために重要です。 ソースの PostgreSQL サーバーがターゲットの Azure Database for PostgreSQL サーバーと通信できることを確認します。 移行を成功させるには、次のネットワーク構成が不可欠です。

ネットワーク セットアップの詳細については、移行サービスのネットワーク ガイドを参照してください。

  • ネットワークに関するその他の考慮事項:

pg_hba.conf 構成: ソースとターゲットの PostgreSQL インスタンス間の接続を容易にするには、pg_hba.conf ファイルを検証して変更する必要があります。 このファイルにはクライアント認証が含まれており、ターゲット PostgreSQL がソースに接続できるように構成する必要があります。 通常、pg_hba.conf ファイルを変更するには、ソース PostgreSQL インスタンスを再起動する必要があります。

pg_hba.conf ファイルは、PostgreSQL インストールのデータ ディレクトリにあります。 ソース データベースがオンプレミスの PostgreSQL サーバーまたは Azure VM でホストされている PostgreSQL サーバーである場合は、このファイルを確認して構成する必要があります。

拡張機能を有効にする

Azure Database for PostgreSQL の移行サービスを使用して移行を成功させるには、ソース PostgreSQL インスタンスの拡張機能を検証する必要がある場合があります。 拡張機能では、アプリケーションに必要な追加の機能が提供されます。 移行プロセスを開始する前に、ソース PostgreSQL インスタンスの拡張機能を検証してください。

ターゲットの Azure Database for PostgreSQL フレキシブル サーバー上のソース PostgreSQL インスタンスで識別されるサポート対象拡張機能を有効にします。

拡張機能の詳細については、Azure Database for PostgreSQL の拡張機能に関する記事を参照してください。

Note

shared_preload_libraries パラメーターに変更がある場合は、再起動が必要です。

サーバー パラメーターを確認する

  • ソースで構成されたサーバー パラメーター値に基づいて、Azure Database for PostgreSQL - フレキシブル サーバーのサーバー パラメーター値を手動で構成する必要があります。

ユーザーとロールを確認する

  • ユーザーおよびさまざまなロールは、Azure Database for PostgreSQL - フレキシブル サーバーに手動で移行する必要があります。 ユーザーとロールを移行するには、pg_dumpall --globals-only -U <<username> -f <<filename>>.sql を使用できます。
  • Azure Database for PostgreSQL - フレキシブル サーバーはスーパーユーザーをサポートしません。スーパーユーザーのロールを持つユーザーは、移行前に削除する必要があります。

移行する

Azure portal または Azure CLI を使用して移行することができます。

この記事では、Azure portal を使用して、PostgreSQL データベースを Azure VM またはオンプレミスの PostgreSQL サーバーから Azure Database for PostgreSQL に移行する方法について説明します。 Azure portal では、データベースの移行など、さまざまなタスクを実行できます。 このチュートリアルで説明されている手順に従うと、データベースを Azure にシームレスに転送でき、その強力な機能とスケーラビリティを活用できます。

移行タスクを構成する

移行サービスには、Azure portal に関する簡単なウィザード ベースのエクスペリエンスが付属しています。 開始する方法は次のとおりです。

  1. Web ブラウザーを開き、ポータルに移動します。 資格情報を入力してサインインします。 既定のビューはサービス ダッシュボードです。

  2. お使いの Azure Database for PostgreSQL フレキシブル サーバーに移動します。

  3. フレキシブル サーバーの [概要] タブの左側のメニューで、下にスクロールして [移行] を選びます。

    Azure portal の [移行] の選択ページのスクリーンショット。

  4. [作成] ボタンを選び、Azure 仮想マシン (VM) またはオンプレミスの PostgreSQL サーバーからフレキシブル サーバーに移行します。 初めて移行サービスを使う場合、空のグリッドと最初の移行の開始を促すプロンプトが表示されます。

    [作成] の移行のスクリーンショット。

    フレキシブル サーバー ターゲットへの移行を既に作成している場合、グリッドには試行された移行に関する情報が含まれています。

  5. [作成] ボタンを選択します。 次に、ウィザードベースの一連のタブを使用して、PostgreSQL ソース サーバーからこのフレキシブル サーバー ターゲットへの移行を作成します。

セットアップ

最初のタブは [セットアップ] タブで、ユーザーは移行名やソースの種類などの移行の詳細を指定して移行を開始します。

[セットアップ] の移行のスクリーンショット。

  • 移行名は、このフレキシブル サーバーへの移行ごとの一意識別子です。 このフィールドで使用できる文字は英数字のみで、ハイフン (-) 以外の特殊文字は使用できません。 名前はハイフンから開始できず、1 つのターゲット サーバーに対して一意である必要があります。 同じフレキシブル サーバー ターゲットへの 2 つの移行の名前を同じにすることはできません。

  • ソース サーバーの種類 - PostgreSQL ソースに応じて、Azure VM または "オンプレミス" を選択できます。

  • [移行オプション] では、移行をトリガーする前に検証を実行できます。 次のいずれかのオプションを選択できます。

    • [検証] - サーバーとデータベースがターゲットに移行できる状態になっていることを調べます。
    • [移行] - 検証をスキップして移行を始めます。
    • [検証して移行] - 移行をトリガーする前に検証を実行します。 移行は、検証エラーがない場合にのみトリガーされます。

移行を実行する前に移行前検証を実行する場合は、常に [検証] または [検証して移行] オプションを選ぶことをお勧めします。 移行前検証の詳細については、このドキュメントを参照してください。

[移行モード] では、移行のモードを選択できます。 [オフライン] が既定のオプションです。

[次へ: ソースに接続] ボタンを選択します。

ランタイム サーバー

移行ランタイム サーバーは、Azure Database for PostgreSQL の移行サービス内の特殊な機能であり、移行中に中間サーバーとして機能するように設計されています。 これは、ターゲット サーバーではない、別の Azure Database for PostgreSQL - フレキシブル サーバー インスタンスですが、プライベート ネットワーク経由でのみアクセスできるソース環境からのデータベースの移行を容易にするために使用されます。

移行ランタイム サーバー ページのスクリーンショット。

ランタイム サーバーについて詳しくは、移行ランタイム サーバーに関する記事を参照してください。

ソースに接続する

[ソースに接続] タブでは、[セットアップ] タブで選んだデータベースのソースに関連する詳細を入力するよう求められます。

Connectsourcemigration のスクリーンショット。

  • サーバー名 - ソース PostgreSQL インスタンスのホスト名または IP アドレスを指定します
  • ポート - ソース サーバーのポート番号
  • サーバー管理者ログイン名 - ソース PostgreSQL サーバーのユーザー名
  • パスワード - ソース PostgreSQL サーバーのパスワード
  • SSL モード - サポートされている値が優先されかつ必要です。 ソース PostgreSQL サーバーの SSL が OFF の場合は、SSLMODE=prefer を使用します。 ソース サーバーの SSL が ON の場合は、SSLMODE=require を使用します。 SSL 値は postgresql.conf ファイルで決定できます。
  • テスト接続 - ターゲットとソースの間の接続テストを実行します。 接続が成功すると、ユーザーは次の手順に進むことができます。 それ以外の場合は、ターゲットとソースの間のネットワークの問題を特定し、ソースのユーザー名とパスワードを確認する必要があります。 テスト接続には、ターゲットとソースの間の接続を確立するのに数分かかります

テスト接続が成功したら、[次へ: 移行ターゲットの選択] を選びます

移行ターゲットの選択

[移行ターゲットの選択] タブには、サブスクリプション名、リソース グループ、サーバー名、場所、PostgreSQL バージョンなど、フレキシブル サーバー ターゲットのメタデータが表示されます。

Connecttargetmigration のスクリーンショット。

  • 管理者ユーザー名 - ターゲット PostgreSQL サーバーの管理者ユーザー名
  • パスワード - ターゲット PostgreSQL サーバーのパスワード
  • テスト接続 - ターゲットとソースの間の接続テストを実行します。 接続が成功すると、ユーザーは次の手順に進むことができます。 それ以外の場合は、ターゲットとソースの間のネットワークの問題を特定し、ターゲットのユーザー名/パスワードを確認する必要があります。 テスト接続では、ターゲットとソースの間の接続が確立されるまでに数分かかります。

テスト接続が成功したら、[次へ: 移行のデータベースの選択] を選択します

移行するデータベースを選択する

このタブでは、[セットアップ] タブで選んだソース サーバー内のユーザー データベースの一覧が表示されます。1 回の移行試行で最大 8 つのデータベースを選択して移行できます。 ユーザー データベースが 8 つを超える場合は、ソース サーバーとターゲット サーバーの間で、次のデータベース セットに対して移行プロセスが繰り返されます。

FetchDBmigration のスクリーンショット。

データベースを選んだ後、[次へ: 概要] を選びます

まとめ

[概要] タブには、検証または移行を作成するためのソースとターゲットの詳細がすべてまとめられます。 詳細を確認して、[開始] ボタンを選びます。

[概要] の移行のスクリーンショット。

移行を監視する

[開始] ボタンを選ぶと、検証または移行の作成が成功したことを示す通知が数秒で表示されます。 フレキシブル サーバーの [移行] ブレードに自動的にリダイレクトされ、最近作成された検証または移行の新しいエントリが表示されます。

Azure portal での監視の移行のスクリーンショット。

移行を表示するグリッドには、[名前][状態][移行モード][移行の種類][ソース サーバー][ソース サーバーの種類][データベース]、**[期間]、[開始時刻] の列があります。 エントリは、開始日時の降順に表示され、最新のエントリが先頭になります。 [最新の情報に更新] ボタンを使って、検証または移行の状態を更新できます。 グリッドで移行の名前を選んで、関連する詳細を表示します。

作成された検証または移行は、InProgress 状態と PerformingPreRequisiteSteps サブ状態になります。 ワークフローで移行インフラストラクチャとネットワーク接続が設定されるまで、2 から 3 分かかります。

移行の詳細

[セットアップ] タブで、移行オプションとして [検証して移行] を選びました。 このシナリオでは、最初に検証が実行されてから移行が開始されます。 PerformingPreRequisiteSteps サブ状態が完了すると、ワークフローは Validation in Progress サブ状態になります。

  • 検証にエラーがある場合、移行は Failed 状態になります。
  • 検証がエラーなしで完了すると、移行が開始され、ワークフローは Migrating Data サブ状態に推移します。

検証結果は [検証] タブに表示され、移行は [移行] タブで監視されます。

[詳細] の移行のスクリーンショット。

移行の状態には、次のものがあります。

移行の状態

State 説明
InProgress 移行インフラストラクチャのセットアップが進行中、または実際のデータ移行が進行中です。
取り消されました 移行が取り消されたか削除されました。
Failed 移行は失敗しました。
Validation Failed 検証が失敗しました。
Succeeded 移行が成功し、完了しました。
WaitingForUserAction オンライン移行にのみ適用されます。 ユーザー アクションがカットオーバーを実行するのを待機しています。

移行サブ状態

下位状態 説明
PerformingPreRequisiteSteps データ移行のためのインフラストラクチャのセットアップが進行中です。
Validation in Progress 検証を実行中です。
MigratingData データ移行が進行中です。
CompletingMigration 移行は完了の最終段階です。
完了 移行が完了しました。
Failed 移行は失敗しました。

検証のサブ状態

下位状態 説明
Failed 検証が失敗しました。
Succeeded 検証が成功しました。
警告 検証で警告が発生しています。

カットオーバー

移行検証して移行の両方がある場合、オンライン移行を完了するには別の手順が必要で、ユーザーは一括移行アクションを実行する必要があります。 基本データのコピーまたはクローンが完了すると、移行は WaitingForUserAction 状態および 'WaitingForCutoverTrigger' サブ状態に推移します。 この状態では、ユーザーは移行を選ぶことでポータルから一括移行をトリガーできます。

一括移行を開始する前に、次のことを確認するのが重要です。

  • ソースへの書き込みは停止されています - Latency は 0 または 0 に近い値です。 Latency 情報は、以下に示す移行の詳細画面から取得できます。
  • latency が 0 または 0 に近い値まで低下しています
  • latency 値は、ターゲットが最後にソースと同期した時期を示します。 この時点で、ソースへの書き込みを停止し、一括移行を開始することができます。 ソースに大量のトラフィックがある場合は、最初に書き込みを停止して、Latency が 0 に近づいてから、一括移行を開始することをお勧めします。

一括移行操作では、ソースからターゲットへの保留中のすべての変更が適用され、そして移行が完了します。 Latency, がゼロ以外の場合でも "一括移行" をトリガーすると、レプリケーションはその時点までで停止します。 その場合、一括移行の時点までのソース上のすべてのデータが、ターゲットに適用されます。 一括移行の時点で待機時間が 15 分の場合、過去 15 分間に変更されたすべてのデータがターゲットに適用されます。 時間は、過去 15 分間に発生した変更のバックログによって異なります。 そのため、一括移行をトリガーする前に、待機時間をゼロまたはゼロに近い値にすることをお勧めします。

  • Migrating Data サブ状態または一括移行 (オンライン移行) が正常に完了すると、移行は Succeeded 状態に推移します。 Migrating Data サブ状態で問題が発生した場合、移行は Failed 状態に移行します。

移行の取り消し

進行中の検証または移行は取り消すことができます。 ワークフローを取り消すには、InProgress 状態である必要があります。 Succeeded または Failed 状態では、検証や移行を取り消すことができません。

検証を取り消すと、検証アクティビティはそれ以上行われなくなり、検証は Canceled 状態になります。

移行を取り消すと、ターゲット サーバーでそれ以上移行アクティビティは行われなくなり、Canceled 状態になります。 ターゲット サーバー上の変更がドロップまたはロールバックされることはありません。 取り消された移行に関連するターゲット サーバー上のデータベースは必ず削除してください。

完了時に移行を確認する

データベースを完了したら、ソースとターゲット間のデータを手動で検証し、ターゲット データベース内のすべてのオブジェクトが正常に作成されたことを確認する必要があります。

移行後、次のタスクを実行できます:

  • フレキシブル サーバー上のデータを確認し、ソース インスタンスの正確なコピーであることを確認します。
  • 検証後、必要に応じてフレキシブル サーバーで高可用性オプションを有効にします。
  • アプリケーションのニーズに合わせてフレキシブル サーバーの SKU を変更します。 この変更には、データベース サーバーの再起動が必要です。
  • ソース インスタンスの既定値からサーバー パラメーターを変更する場合は、フレキシブル サーバーでこれらのサーバー パラメーターの値をコピーします。 タグ、アラート、ファイアウォール規則 (該当する場合) などの他のサーバー設定をソース インスタンスからフレキシブル サーバーにコピーします。
  • 接続文字列がフレキシブル サーバーをポイントするように、アプリケーションに変更を加えます。
  • データベースのパフォーマンスを厳密に監視して、パフォーマンス チューニングが必要かどうかを確認します。