Azure SQL Managed Instance のフェールオーバー グループを構成する

適用対象: Azure SQL Managed Instance

この記事では、Azure portal と Azure PowerShell を使用して、Azure SQL Managed Instanceフェールオーバー グループを構成する方法について説明します。

フェールオーバー グループ内に両方のインスタンスを作成するエンド ツー エンドの PowerShell スクリプトについては、「PowerShell を使用してフェールオーバー グループにインスタンスを追加する」を参照してください。

前提条件

フェールオーバー グループを構成するには、プライマリとして使用する SQL Managed Instance が既に存在している必要があります。 開始するには、「インスタンスの作成」を確認してください。

構成要件

プライマリとセカンダリの SQL Managed Instance の間でフェールオーバー グループを構成するには、次の要件を考慮してください。

  • セカンダリ マネージド インスタンスは空 (ユーザー データベースなし) である必要があります。
  • 2 つのインスタンスは同じサービス レベルである必要があり、ストレージ サイズも同じである必要があります。 必須ではありませんが、セカンダリ インスタンスがプライマリ インスタンスからレプリケートされた変更を持続して処理できるように (ピーク アクティビティの期間を含む)、両方のインスタンスのコンピューティング サイズを等しくすることを強くお勧めします。
  • プライマリ インスタンスの仮想ネットワークの IP アドレス範囲は、セカンダリ マネージド インスタンスの仮想ネットワークのアドレス範囲、およびプライマリまたはセカンダリ仮想ネットワークとピアリングされたその他の仮想ネットワークと重複してはなりません。
  • 両方のインスタンスが同じ DNS ゾーン内にある必要があります。 セカンダリ マネージド インスタンスを作成する場合は、プライマリ インスタンスの DNS ゾーン ID を指定する必要があります。 指定しない場合、ゾーン ID は各仮想ネットワークで最初のインスタンスが作成されるときにランダムな文字列として生成され、同じサブネット内の他のすべてのインスタンスに同じ ID が割り当てられます。 一度割り当てられると、DNS ゾーンは変更できません。
  • 両方のインスタンスのサブネットのネットワーク セキュリティ グループ (NSG) 規則では、2 つのインスタンス間の通信を容易にするために、ポート 5022 とポート範囲 11000-11999 の受信と送信の TCP 接続を開く必要があります。
  • パフォーマンス上の理由から、マネージド インスタンスはペアのリージョンにデプロイする必要があります。 geo ペア リージョンに存在するマネージド インスタンスは、ペアになっていないリージョンと比較して、geo レプリケーション速度が大幅に向上します。
  • どちらのインスタンスも、同じ更新ポリシーを使用する必要があります。

セカンダリ インスタンスを作成する

セカンダリ インスタンスを作成する場合は、プライマリ インスタンスの IP アドレス空間範囲と重複しない IP アドレス空間を持つ仮想ネットワークを使用する必要があります。 さらに、新しいセカンダリ インスタンスを構成する場合は、プライマリ インスタンスのゾーン ID を指定する必要があります。

セカンダリ仮想ネットワークを構成し、Azure portal と PowerShell を使用してセカンダリ インスタンスを作成できます。

Create virtual network

Azure portal でセカンダリ インスタンスの仮想ネットワークを作成するには、次の手順に従います。

  1. プライマリ インスタンスのアドレス空間を確認します。 Azure portal でプライマリ インスタンスの仮想ネットワーク リソースに移動し、[設定][アドレス空間] を選択します。 [アドレス範囲] の範囲を確認します。

    Azure portal のプライマリ仮想ネットワークのアドレス空間のスクリーンショット。

  2. [仮想ネットワークの作成] ページに移動して、セカンダリ インスタンスに使用する予定の新しい仮想ネットワークを作成します。

  3. [仮想ネットワークの作成] ページの [基本] タブで、次の操作を行います。

    1. セカンダリ インスタンスに使用するリソース グループを選択します。 新しいものが存在しない場合は作成します。
    2. 仮想ネットワークの名前 (vnet-sql-mi-secondary など) を指定します。
    3. プライマリ インスタンスがあるリージョンとペアになっているリージョンを選択します。
  4. [仮想ネットワークの作成] ページの [IP アドレス] タブで、次の操作を行います。

    1. 既存の IPv4 アドレス スペースを削除するには、[アドレス空間の削除] を使用します。
    2. アドレス空間が削除されたら、[IPv4 アドレス空間の追加] を選択して新しい領域を追加し、プライマリ インスタンスの仮想ネットワークで使用されるアドレス空間とは異なる IP アドレス空間を指定します。 たとえば、現在のプライマリ インスタンスが 10.0.0.16 のアドレス空間を使用している場合は、セカンダリ インスタンスに使用する仮想ネットワークのアドレス空間に「10.1.0.0/16」を入力します。
    3. [+ サブネットの追加] を使用して、既定値を持つ既定のサブネットを追加します。
    4. [+ サブネットの追加] を使用して、既定のサブネットとは異なるアドレス範囲を使用して、セカンダリ インスタンス専用の ManagedInstance という名前の空のサブネットを追加します。 たとえば、プライマリ インスタンスでアドレス範囲 10.0.0.0 - 10.0.255.255 を使用している場合は、セカンダリ インスタンスのサブネットに 10.1.1.0 - 10.1.1.255 のサブネット範囲を指定します。

    Azure portal の新しい仮想ネットワークのアドレス空間のスクリーンショット。

  5. [確認と作成] を使用して設定を確認し、[作成] を使用して新しい仮想ネットワークを作成します。

セカンダリ インスタンスを作成する

仮想ネットワークの準備ができたら、次の手順に従って Azure portal でセカンダリ インスタンスを作成します。

  1. Azure portal で、[Azure SQL Managed Instance の作成] に移動します。

  2. [Azure SQL Managed Instance の作成] ページの [基本] タブで、以下を実行します。

    1. プライマリ インスタンスとペアになっているセカンダリ インスタンスのリージョンを選択します。
    2. プライマリ インスタンスのサービス レベルに一致するサービス レベルを選択します。
  3. [Azure SQL Managed Instance の作成] ページの [ネットワーク] タブで、[仮想ネットワーク/サブネット] のドロップダウン リストを使用して、前に作成した仮想ネットワークとサブネットを選択します。

    Azure portal でセカンダリ インスタンスで使用するために作成したネットワークが強調表示されたスクリーンショット。

  4. [Azure SQL Managed Instance の作成] ページの [追加設定] タブで、[フェールオーバー セカンダリとして使用する] に対して [はい] を選択し、ドロップダウン リストから適切なプライマリ インスタンスを選択します。

    Azure portal のスクリーンショット。ここでは、[追加設定] ページで、プライマリ マネージド インスタンスをフェールオーバー セカンダリとして指定しています。

  5. ビジネス ニーズに応じてインスタンスの残りの部分を構成し、[確認と作成] を使用して作成します。

インスタンス間の接続を確立する

geo レプリケーションのトラフィック フローが中断されないようにするには、プライマリ インスタンスとセカンダリ インスタンスをホストする仮想ネットワーク サブネット間の接続を確立する必要があります。 異なる Azure リージョンのマネージド インスタンスを接続するには、次のように複数の方法があります。

グローバル仮想ネットワークピアリングは、フェイルオーバーグループ内のインスタンス間の接続を確立する最もパフォーマン スが高く堅牢な方法として推奨されます。 グローバル仮想ネットワーク ピアリングは、Microsoft バックボーン インフラストラクチャを使用して、ピアリングされた仮想ネットワーク間に低遅延で高帯域幅のプライベート接続を提供します。 ピアリングされた仮想ネットワーク間の通信では、パブリック インターネット、ゲートウェイ、追加の暗号化が必要ありません。

重要

追加のネットワーク デバイスを含むインスタンスを接続する別の方法では、接続またはレプリケーション速度の問題のトラブルシューティングが複雑になり、ネットワーク管理者の積極的な関与が必要になり、解決時間が大幅に長くなる場合があります。

推奨されるグローバル仮想ネットワーク ピアリング以外のインスタンス間の接続を確立するメカニズムを使用する場合は、次の点を確認してください。

  • ファイアウォールやネットワーク仮想アプライアンス (NVA) などのネットワーク デバイスが、ポート 5022 (TCP) とポート範囲 11000-11999 の受信および送信接続のトラフィックをブロックしない。
  • ルーティングが適切に構成され、非対称ルーティングが回避されている。
  • ハブアンドスポーク ネットワーク トポロジのクロスリージョンにフェールオーバー グループをデプロイする場合、接続とレプリケーション速度の問題を回避するために、レプリケーション トラフィックはハブ ネットワークを経由するのではなく、2 つのマネージド インスタンスのサブネット間を直接通過する必要があります。

この記事では、Azure portal と PowerShell を使用して、2 つのインスタンスのネットワーク間のグローバル仮想ネットワーク ピアリングを構成する方法について説明します。

  1. Azure portal で、プライマリ マネージド インスタンスの仮想ネットワーク リソースに移動します。

  2. [設定][ピアリング] を選択して [ピアリング] ページを開き、コマンド バーから [+ 追加] を使用して [ピアリングの追加] ページを開きます。

    Azure portal の仮想ネットワーク A の [ピアリング] ページのスクリーンショット。

  3. [ピアリングの追加] ページで、次の設定の値を入力または選択します。

    設定 説明
    リモート仮想ネットワークの概要
    [Peering link name](ピアリング リンク名) ピアリングの名前は、仮想ネットワーク内で一意である必要があります。 この記事では、Fog-peering を使用します。
    仮想ネットワークのデプロイ モデル [リソース マネージャー] を選択します。
    リソース ID を知っている リソース ID がわかっている場合を除き、このチェック ボックスはオフのままにしておくことができます。
    サブスクリプション ドロップダウン リストから、サブスクリプションを選択します。
    仮想ネットワーク ドロップダウン リストからセカンダリ インスタンスの仮想ネットワークを選択します。
    リモート仮想ネットワーク ピアリングの設定
    "セカンダリ仮想ネットワーク" に "プライマリ仮想ネットワーク" へのアクセスを許可する チェック ボックスをオンにして、2 つのネットワーク間の通信を許可します。 仮想ネットワーク間の通信を有効にすると、各仮想ネットワークに接続されているリソースは、同じ仮想ネットワークに接続されている場合と同様に、同じ帯域幅と待機時間で相互に通信できます。 2 つの仮想ネットワーク内のリソース間のすべての通信は、Azure プライベート ネットワーク経由で行われます。
    "セカンダリ仮想ネットワーク" が "プライマリ仮想ネットワーク" から転送されたトラフィックを受信することを許可する このチェック ボックスをオンまたはオフにすることができ、どちらもこのガイドでは機能します。 詳細については、「ピアリングの作成」を参照してください。
    "セカンダリ仮想ネットワーク" 内のゲートウェイまたはルート サーバーが"プライマリ仮想ネットワーク" にトラフィックを転送することを許可する このチェック ボックスをオンまたはオフにすることができ、どちらもこのガイドでは機能します。 詳細については、「ピアリングの作成」を参照してください。
    "セカンダリ仮想ネットワーク" を有効にして、"プライマリ仮想ネットワークのリモート ゲートウェイまたはルート サーバー" を使用する このチェック ボックスはオフのままにします。 使用できるその他のオプションの詳細については、「ピアリングの作成」を参照してください。
    ローカル仮想ネットワークの概要
    [Peering link name](ピアリング リンク名) リモート仮想ネットワークに使用されるのと同じピアリングの名前。 この記事では、Fog-peering を使用します。
    "プライマリ仮想ネットワーク" に "セカンダリ仮想ネットワーク" へのアクセスを許可する チェック ボックスをオンにして、2 つのネットワーク間の通信を許可します。 仮想ネットワーク間の通信を有効にすると、各仮想ネットワークに接続されているリソースは、同じ仮想ネットワークに接続されている場合と同様に、同じ帯域幅と待機時間で相互に通信できます。 2 つの仮想ネットワーク内のリソース間のすべての通信は、Azure プライベート ネットワーク経由で行われます。
    "プライマリ仮想ネットワーク" が "セカンダリ仮想ネットワーク" から転送されたトラフィックを受信することを許可する このチェック ボックスをオンまたはオフにすることができ、どちらもこのガイドでは機能します。 詳細については、「ピアリングの作成」を参照してください。
    "プライマリ仮想ネットワーク" 内のゲートウェイまたはルート サーバーが "セカンダリ仮想ネットワーク" にトラフィックを転送することを許可する このチェック ボックスをオンまたはオフにすることができ、どちらもこのガイドでは機能します。 詳細については、「ピアリングの作成」を参照してください。
    "プライマリ仮想ネットワーク" を有効にして、"セカンダリ仮想ネットワーク" のリモート ゲートウェイまたはルート サーバーを使用する このチェック ボックスはオフのままにします。 使用できるその他のオプションの詳細については、「ピアリングの作成」を参照してください。
  4. [追加] を使用して、選択した仮想ネットワークとのピアリングを構成すると、自動的に [ピアリング] ページに戻り、2 つのネットワークが接続されていることが表示されます。

    Azure portal の [ピアリング] ページの仮想ネットワーク ピアリング状態のスクリーンショット。

ポートと NSG 規則を構成する

2 つのインスタンス間で選択された接続メカニズムに関係なく、ネットワークは geo レプリケーション トラフィックのフローに関する次の要件を満たす必要があります。

  • マネージド インスタンス サブネットに割り当てられたルート テーブルとネットワーク セキュリティ グループは、ピアリングされた 2 つの仮想ネットワーク間で共有されません。
  • 各インスタンスをホストする両方のサブネットのネットワーク セキュリティ グループ (NSG) 規則では、ポート 5022 の他のインスタンスとポート範囲 11000-11999 への受信トラフィックおよび送信トラフィックの両方が許可されます。

Azure portal と PowerShell を使用して、ポート通信と NSG ルールを構成できます。

Azure portal でネットワーク セキュリティ グループ (NSG) ポートを開くには、次の手順に従います。

  1. プライマリ インスタンスのネットワーク セキュリティ グループ リソースに移動します。

  2. [設定][受信セキュリティ規則] を選びます。 ポート 5022 と範囲 11000-11999 のトラフィックを許可する規則が既に存在するどうかを確認します。 既に存在し、ソースがビジネス ニーズを満たしている場合は、この手順をスキップします。 規則が存在しない場合、または別のソース (より安全な IP アドレスなど) を使用する場合は、既存の規則を削除し、コマンド バーから [ + 追加] を選択して、[受信セキュリティ規則の追加] ページを開きます。

    Azure portal で NSG の受信セキュリティ規則を追加するスクリーンショット。

  3. [受信セキュリティ規則の追加] ページで、次の設定の値を入力または選択します。

    設定 推奨値 説明
    ソース IP アドレスまたはサービス タグ 通信のソースのフィルター。 IP アドレスは最も安全であり、運用環境に推奨されます。 サービス タグは、非運用環境に適しています。
    発信元サービス タグ ソースとして [サービス タグ] を選択した場合は、ソース タグとして VirtualNetwork を指定します。 既定のタグは、IP アドレスのカテゴリを表す定義済みの識別子です。 VirtualNetwork タグは、すべての仮想およびローカル ネットワーク アドレス空間を表します。
    ソース IP アドレス ソースとして [IP アドレス] を選択した場合は、セカンダリ インスタンスの IP アドレスを指定します。 CIDR 表記 (192.168.99.0/24 や 2001:1234::/64 など) または IP アドレス (192.168.99.0 や 2001:1234:: など) を使用してアドレス範囲を指定します。 IPv4 または IPv6 を使用して、IP アドレスまたはアドレス範囲のコンマ区切りのリストを指定することもできます。
    ソース ポート範囲 5022 これは、この規則で許可されるポート トラフィックを指定します。
    サービス Custom このサービスでは、このルールの宛先プロトコルとポート範囲を指定します。
    宛先ポート範囲 5022 これは、この規則で許可されるポート トラフィックを指定します。 このポートは、ソース ポートの範囲と一致する必要があります。
    アクション Allow 指定したポートで通信を許可します。
    Protocol TCP ポート通信のプロトコルを決定します。
    優先度 1200 規則は優先度順に処理されます。値が小さいほど、優先度は高くなります。
    Name allow_geodr_inbound ルールの名前です。
    説明 省略可能 説明を入力するか、このフィールドを空白のままにすることができます。

    [追加] を選択して設定を保存し、新しいルールを追加します。

  4. これらの手順を繰り返して、allow_redirect_inbound などの名前と、5022 規則より少し高い優先順位 (1100 など) を使用して、ポート範囲 11000-11999 に対して別の受信セキュリティ規則を追加します。

  5. [設定][送信セキュリティ規則] を選びます。 ポート 5022 と範囲 11000-11999 のトラフィックを許可する規則が既に存在するどうかを確認します。 既に存在し、ソースがビジネス ニーズを満たしている場合は、この手順をスキップします。 規則が存在しない場合、または別のソース (より安全な IP アドレスなど) を使用する場合は、既存の規則を削除し、コマンド バーから [+ 追加] を選択して、[送信セキュリティ規則の追加] ページを開きます。

  6. [送信セキュリティ規則の追加] ページで、受信ポートの場合と同じ構成をポート 5022 に使用し、範囲 11000-11999 を使用します。

  7. セカンダリ インスタンスのネットワーク セキュリティ グループに移動し、これらの手順を繰り返して、両方のネットワーク セキュリティ グループに次のルールが適用されるようにします。

    • ポート 5022 での受信トラフィックを許可する
    • ポート範囲 11000-11999 で受信トラフィックを許可する
    • ポート 5022 での送信トラフィックを許可する
    • ポート範囲 11000-11999 で送信トラフィックを許可する

フェールオーバー グループを作成する

Azure portal または PowerShell を使用して、マネージド インスタンスのフェールオーバー グループを作成します。

Azure portal を使用して、SQL Managed Instance のフェールオーバー グループを作成します。

  1. Azure portal の左側のメニューで [Azure SQL] を選択します。 [Azure SQL] が一覧にない場合は、 [すべてのサービス] を選択し、検索ボックスに「Azure SQL」と入力します。 (省略可能) [Azure SQL] の横にある星を選択し、左側のナビゲーションにお気に入りの項目として追加します。

  2. フェールオーバー グループに追加するプライマリ マネージド インスタンスを選択します。

  3. [データ管理] で、[フェールオーバー グループ] を選択し、[グループの追加] を使用して [インスタンスのフェールオーバー グループ] ページを開きます。

    Azure portal でフェールオーバー グループ ページを追加する様子を示すスクリーンショット。

  4. [インスタンス フェールオーバー グループ] ページで、次の手順を実行します。

    1. [プライマリ マネージド インスタンス] が事前に選択されています。
    2. [フェールオーバー グループ名] に、フェールオーバー グループの名前を入力します。
    3. [セカンダリ マネージド インスタンス] で、フェールオーバー グループのセカンダリとして使用するマネージド インスタンスを選択します。
    4. ドロップダウン リストから [読み取り/書き込みフェールオーバー ポリシー] を選択します。 フェールオーバーを制御するには、[手動] をお勧めします。
    5. このレプリカをディザスター リカバリーのみに使用する場合を除き、[フェールオーバー権限を有効にする][オフ] のままにしておきます。
    6. [作成] を使用して設定を保存し、フェールオーバー グループを作成します。

    Azure portal でフェールオーバー グループを作成する様子を示すスクリーンショット。

  5. フェールオーバー グループのデプロイが開始されると、[フェールオーバー グループ] ページに戻ります。 デプロイが完了すると、ページが更新され、新しいフェールオーバー グループが表示されます。

[テスト フェールオーバー]

Azure portal または PowerShell を使用して、フェールオーバー グループのフェールオーバーをテストします。

Note

インスタンスが異なるサブスクリプションまたはリソース グループにある場合は、セカンダリ インスタンスからフェールオーバーを開始します。

Azure portal を使用して、フェールオーバー グループのフェールオーバーをテストします。

  1. Azure portal 内のプライマリまたはセカンダリ マネージド インスタンスに移動します。

  2. [データ管理] で [フェールオーバー グループ] を選びます。

  3. [フェールオーバー グループ] ページで、どのインスタンスがプライマリ インスタンスで、どのインスタンスがセカンダリ インスタンスであるかをメモします。

  4. [フェールオーバー グループ] ページで、コマンド バーから [フェールオーバー] を選択します。 TDS セッションの切断に関する警告で [はい] を選択し、ライセンスへの影響をメモします。

    Azure portal でフェールオーバー グループをフェールオーバーする様子を示すスクリーンショット。

  5. [フェールオーバー グループ] ページで、フェールオーバーが成功した後、インスタンスはロールを切り替え、前のセカンダリが新しいプライマリになり、前のプライマリが新しいセカンダリになります。

    重要

    ロールが切り替わらなかった場合は、インスタンスと関連する NSG の間の接続とファイアウォール規則を確認します。 次のステップに進むのは、ロールが切り替わった後にしてください。

  6. (省略可能) [フェールオーバー グループ] ページで、[フェールオーバー] を使用してロールを切り替え、元のプライマリが再びプライマリになるようにします。

リスナー エンドポイントを特定する

フェールオーバー グループの構成後、読み取り/書き込みリスナー エンドポイントを指すようにアプリケーションの接続文字列を更新し、フェールオーバー後もアプリケーションがプライマリ インスタンスに接続し続けるようにします。 リスナー エンドポイントを使用すると、トラフィックは常に現在のプライマリにルーティングされるため、フェールオーバー グループがフェールオーバーするたびに接続文字列を手動で更新する必要がなくなります。 読み取り専用ワークロードで読み取り専用リスナー エンドポイントを指すこともできます。

Azure portal でリスナー エンドポイントを見つけるには、SQL Managed Instance に移動し、[データ管理][フェールオーバー グループ] を選択します。

下スクロールしてリスナー エンドポイントを見つけます。

  • 読み取り/書き込みリスナー エンドポイントは、fog-name.dns-zone.database.windows.net の形式で、プライマリ インスタンスにトラフィックをルーティングします。
  • 読み取り専用リスナー エンドポイントは、fog-name.dns-zone.tutorial.database.windows.net の形式で、セカンダリ インスタンスにトラフィックをルーティングします。

Azure portal でフェールオーバー グループ接続文字列を見つける場所を示すスクリーンショット。

異なるサブスクリプションのインスタンス間にグループを作成する

サブスクリプションが同じ Microsoft Entra テナントに関連付けられている限り、2 つの異なるサブスクリプションの SQL Managed Instances 間でフェールオーバー グループを作成できます。

  • PowerShell API を使用する場合は、セカンダリ SQL Managed Instance の PartnerSubscriptionId パラメーターを指定することでこれを実行できます。
  • パラメーターをREST API、パラメーターに含まれる各インスタンス ID properties.managedInstancePairs に独自のサブスクリプション ID を設定できます。
  • Azure portal では、異なるサブスクリプション間でのフェールオーバー グループの作成はサポートされません。

重要

Azure Portal では、異なるサブスクリプション間でのフェールオーバー グループの作成はサポートされません。 異なるサブスクリプション間やリソース グループ間のフェールオーバー グループの場合、プライマリ SQL マネージド インスタンスから Azure portal を介して手動でフェールオーバーを開始することはできません。 代わりに、geo セカンダリ インスタンスから開始してください。

重要なデータが失われないようにする

ワイドエリアネットワークの待機時間が長いため、geo レプリケーションは非同期レプリケーションメカニズムを使用します。 非同期レプリケーションを使用すると、プライマリに障害が発生した場合にデータ損失が回避される可能性があります。 重要なトランザクションをデータ損失から保護するために、アプリケーション開発者はトランザクションをコミットした直後に sp_wait_for_database_copy_sync ストアドプロシージャを呼び出すことができます。 sp_wait_for_database_copy_sync を呼び出すと、最後にコミットされたトランザクションが転送され、セカンダリデータベースのトランザクションログに書き込まれるまで、呼び出し元のスレッドがブロックされます。 ただし、転送されたトランザクションがセカンダリで再生 (再実行) されるのを待つことはありません。 sp_wait_for_database_copy_sync は、特定の geo レプリケーションリンクにスコープが設定されています。 プライマリ データベースへの接続権限を持つユーザーが、このプロシージャを呼び出すことができます。

Note

sp_wait_for_database_copy_sync は、特定のトランザクションの geo フェールオーバー後のデータ損失を防ぎますが、読み取りアクセスの完全同期は保証しません。 sp_wait_for_database_copy_sync プロシージャ呼び出しによって発生する遅延は大きくなる可能性があり、呼び出し時のプライマリでまだ転送されていないトランザクションログのサイズによって異なります。

セカンダリ リージョンを変更する

インスタンス A がプライマリ インスタンス、インスタンス B が既存のセカンダリ インスタンス、インスタンス C が 3 番目のリージョン内の新しいセカンダリ インスタンスであるとします。 移行を行うには、次の手順を実行します。

  1. 同じ DNS ゾーン内で、A と同じサイズのインスタンス C を作成します。
  2. インスタンス A と B の間のフェールオーバー グループを削除します。この時点で、フェイルオーバーグループリスナーの SQL エイリアスが削除され、ゲートウェイがフェイルオーバーグループ名を認識できないため、サインインに失敗し始めます。 セカンダリ データベースはプライマリから切断され、読み取り/書き込みデータベースになります。
  3. フェイルオーバーグループの構成ガイドの指示に従って、インスタンス A と C の間に同じ名前のフェイルオーバー・グループを作成します。 これはデータ サイズに左右される操作であり、インスタンス A のすべてのデータベースがシード処理され、同期されると完了します。
  4. 不要な料金が発生しないように、インスタンス B が不要であれば削除してください。

Note

手順 2 の後、手順 3 が完了するまでは、インスタンス A のデータベースは、インスタンス A の致命的な障害から保護されないままになります。

プライマリ リージョンを変更する

インスタンス A がプライマリ インスタンス、インスタンス B が既存のセカンダリ インスタンス、インスタンス C が 3 番目のリージョン内の新しいプライマリ インスタンスであるとします。 移行を行うには、次の手順を実行します。

  1. 同じ DNS ゾーン内で、B と同じサイズのインスタンス C を作成します。
  2. インスタンス B から手動フェールオーバーを開始して、新しいプライマリにします。 インスタンス A が自動的に新しいセカンダリ インスタンスになります。
  3. インスタンス A と B の間のフェールオーバー グループを削除します。この時点では、フェールオーバー グループ エンドポイントを使用したログイン試行は失敗し始めます。 のセカンダリデータベースはプライマリから切断され、読み取り/書き込みデータベースになります。
  4. インスタンス B と C の間に同じ名前のフェールオーバー グループを作成します。これはデータ サイズに左右される操作であり、インスタンス B のすべてのデータベースがシード処理され、インスタンス C と同期されると完了します。この時点で、サインイン試行は失敗しなくなります。
  5. C インスタンスをプライマリ ロールに切り替えるには、手動でフェールオーバーします。 インスタンス B が自動的に新しいセカンダリ インスタンスになります。
  6. 不要な料金が発生しないように、インスタンス A が不要であれば削除してください。

注意事項

手順 3 の後、手順 4 が完了するまでは、インスタンス A のデータベースは、インスタンス A の致命的な障害から保護されないままになります。

重要

フェールオーバー グループを削除すると、リスナー エンドポイントの DNS レコードも削除されます。 この時点で、他のユーザーが同じ名前でフェールオーバー グループを作成している可能性はゼロではありません。 フェールオーバーグループ名はグローバルに一意である必要があるため、同じ名前を再度使用することはできません。 このリスクを最小限に抑えるには、汎用フェールオーバーグループ名を使用しないでください。

更新ポリシーを変更する

フェールオーバー グループ内のインスタンスには、一致する更新ポリシーが必要です。 フェールオーバー グループの一部であるインスタンスで Always-up-to-date 更新ポリシーを有効にするには、まずセカンダリ インスタンスで Always-up-up-date 更新ポリシーを有効にし、変更が有効になるまで待ってから、プライマリ インスタンスのポリシーを更新します。

フェールオーバー グループ内のプライマリ インスタンスの更新ポリシーを変更すると、インスタンスは別のローカル ノードにフェールオーバーされますが (フェールオーバー グループの一部ではないインスタンスの管理操作と同様)、フェールオーバー グループはフェールオーバーされず、プライマリ インスタンスはプライマリ ロールに保持されます。

注意事項

更新されたポリシーが Always-up-to-date に変更されると、SQL Server 2022 の更新ポリシーに戻すことはできなくなります。

システム データベースのオブジェクトに依存するシナリオを実現させる

システム データベースは、フェールオーバー グループのセカンダリ インスタンスにはレプリケートされません。 システム データベースのオブジェクトに依存するシナリオを実現するには、セカンダリ インスタンスに同じオブジェクトを作成し、プライマリ インスタンスとの同期を維持する必要があります。

たとえば、セカンダリ インスタンスで同じログインを使用する予定の場合は、必ず、同じ SID でそれらを作成してください。

-- Code to create login on the secondary instance
CREATE LOGIN foo WITH PASSWORD = '<enterStrongPasswordHere>', SID = <login_sid>;

詳細については、「ログインとエージェント ジョブのレプリケーション」を参照してください。

インスタンスのプロパティと保持ポリシーのインスタンスを同期する

フェールオーバーグループ内のインスタンスは個別の Azure リソースを保持します。プライマリインスタンスの構成に対して行われた変更は、セカンダリインスタンスに自動的にレプリケートされません。 プライマリ インスタンスセカンダリ インスタンスの両方で、関連するすべての変更を実行する必要があります。 たとえば、プライマリ インスタンスでバックアップ ストレージの冗長性または長期的なバックアップ保持ポリシーを変更した場合は、セカンダリ インスタンスでも必ず変更してください。

インスタンスのスケーリング

プライマリとセカンダリのインスタンスを、同じサービス レベル内の別のコンピューティング サイズ、または異なるサービス レベルにスケールアップまたはスケールダウンできます。 同じサービス レベル内でスケールアップするときは、最初に geo セカンダリをスケールアップしてから、プライマリをスケールアップします。 同じサービス レベル内でスケールダウンするときは、順序を逆にします。つまり最初にプライマリをスケールダウンしてから、セカンダリをスケールダウンします。 インスタンスを別のサービス レベルにスケーリングする場合も、同じ順序に従います。

より低い SKU の geo セカンダリが過負荷になり、アップグレードまたはダウングレードのプロセス中に再シードする必要があるという問題を回避するために、この順序が推奨されます。

アクセス許可

フェールオーバー グループに対するアクセス許可は、Azure ロールベースのアクセス制御 (Azure RBAC) によって管理されます。

プライマリ マネージド インスタンスとセカンダリ マネージド インスタンスのリソース グループにスコープ指定された SQL Managed Instance 投稿者ロールは、フェールオーバー グループに対するすべての管理操作を実行するのに十分です。

次の表は、フェールオーバー グループの管理操作に最低限必要なアクセス許可とそれぞれの最低限必要なスコープ レベルを詳細に示したものです。

管理操作 権限 スコープ
フェールオーバー グループを作成/更新する Microsoft.Sql/locations/instanceFailoverGroups/write プライマリ マネージド インスタンスとセカンダリ マネージド インスタンスのリソース グループ
フェールオーバー グループを作成/更新する Microsoft.Sql/managedInstances/write プライマリ マネージド インスタンスとセカンダリ マネージド インスタンス
フェールオーバー グループのフェールオーバー Microsoft.Sql/locations/instanceFailoverGroups/failover/action プライマリ マネージド インスタンスとセカンダリ マネージド インスタンスのリソース グループ
フェールオーバー グループのフェールオーバーを強制する Microsoft.Sql/locations/instanceFailoverGroups/forceFailoverAllowDataLoss/action プライマリ マネージド インスタンスとセカンダリ マネージド インスタンスのリソース グループ
フェールオーバー グループの削除 Microsoft.Sql/locations/instanceFailoverGroups/delete プライマリ マネージド インスタンスとセカンダリ マネージド インスタンスのリソース グループ

制限事項

次の制限事項に注意してください。

  • 同じ Azure リージョン内の 2 つのインスタンス間で、フェールオーバー グループを作成することはできません。
  • フェールオーバー グループの名前を変更することはできません。 グループを削除し、別の名前で再作成する必要があります。
  • フェールオーバー グループには、必ず 2 つのマネージド インスタンスが含まれています。 フェールオーバー グループにインスタンスを追加することはサポートされていません。
  • インスタンスは、いつでも 1 つのフェールオーバー グループにのみ参加できます。
  • 異なる Azure テナントに属する 2 つのインスタンス間でフェールオーバー グループを作成することはできません。
  • 異なるリソース グループまたはサブスクリプション内の 2 つのインスタンス間でのフェールオーバー グループの作成は、Azure portal や Azure CLI ではなく、Azure PowerShell または REST API でのみサポートされます。 フェールオーバー グループが作成されると、Azure portal に表示され、すべての操作が Azure portal または Azure CLI でサポートされます。 フェールオーバーは、セカンダリ インスタンスから開始する必要があります。
  • マネージド インスタンス リンクで構成されたインスタンスでフェールオーバー グループを作成することは、現在サポートされていません。
  • データベース名の変更は、フェールオーバー グループ内のデータベースではサポートされていません。 データベース名を変更するには、フェールオーバー グループを一時的に削除する必要があります。
  • システム データベースは、フェールオーバー グループのセカンダリ インスタンスにはレプリケートされません。 したがって、Server LoginsやAgentジョブといったシステムデータベースのオブジェクトに依存するシナリオでは、オブジェクトをセカンダリインスタンスで手動で作成する必要があります。また、プライマリインスタンスで行われた変更があれば、手動で同期を保つ必要があります。 唯一の例外は SQL Managed Instance のサービス マスター キー (SMK) で、これはフェールオーバー グループの作成時にセカンダリ インスタンスに自動的にレプリケートされます。 ただし、プライマリ インスタンスでの SMK のその後の変更は、セカンダリ インスタンスにレプリケートされません。 詳細については、「システムデータベースのオブジェクトに依存するシナリオを実現させる方法」を参照してください。
  • いずれかのインスタンスがインスタンス プールに存在する場合、インスタンス間にフェールオーバー グループを作成することはできません。
  • フェールオーバー グループ内のインスタンスの場合、Next-gen General Purpose レベルとの間でサービス レベルを変更することはサポートされていません。 最初にフェールオーバー グループを削除してからいずれかのレプリカを変更し、変更が有効となった後にフェールオーバー グループを再作成する必要があります。
  • フェールオーバー グループ内の SQL マネージド インスタンスには同じ更新ポリシーが必要ですが、フェールオーバー グループ内のインスタンスの更新ポリシーを変更することはできます。

フェールオーバーグループをプログラムで管理する

フェールオーバー グループは、Azure PowerShell、Azure CLI、および REST API を使用してプログラムで管理することもできます。 次の表では、使用できるコマンド セットについて説明します。 フェールオーバーグループには、管理のための Azure Resource Manager API 一式 (Azure SQL データベース REST APIAzure PowerShell コマンドレットなど) が含まれています。 これらの API では、リソース グループを使用する必要があり、Azure のロール ベースのアクセス制御 (Azure RBAC) がサポートされます。 アクセス ロールの実装方法の詳細については、Azure のロール ベースのアクセス制御 (Azure RBAC) に関するページをご覧ください。

コマンドレット 説明
New-AzSqlDatabaseInstanceFailoverGroup このコマンドはフェールオーバー グループを作成し、それをプライマリとセカンダリの両方のインスタンスに登録します。
Set-AzSqlDatabaseInstanceFailoverGroup フェールオーバー グループの構成を変更します。
Get-AzSqlDatabaseInstanceFailoverGroup フェールオーバー グループの構成を取得します。
Switch-AzSqlDatabaseInstanceFailoverGroup フェールオーバー グループのセカンダリ インスタンスに対するフェールオーバーをトリガーします。
Remove-AzSqlDatabaseInstanceFailoverGroup フェールオーバー グループを削除します