次の方法で共有


フェールオーバー グループの概要とベスト プラクティス (Azure SQL Managed Instance)

適用対象:Azure SQL Managed Instance

この記事では、フェールオーバー グループ機能の概要と、Azure SQL Managed Instance で使用するためのベスト プラクティスと推奨事項について説明します。 フェールオーバー グループ機能を使用すると、SQL マネージド インスタンス内のすべてのユーザー データベースのレプリケーションとフェールオーバーを別の Azure リージョンに管理できます。

開始するには、 Azure SQL Managed Instance のフェールオーバー グループの構成に関するページを参照してください。

概要

フェールオーバー グループ機能を使用すると、ある SQL マネージド インスタンスから別の Azure リージョン内の別の SQL マネージド インスタンスへのユーザー データベースのレプリケーションとフェールオーバーを管理できます。 フェールオーバー グループは、geo レプリケーションデータベースの大規模なデプロイと管理を簡略化するように設計されています。

詳しくは、Azure SQL Managed Instance の高可用性に関する記事をご覧ください。 geo フェールオーバー RPO と RTO については、「ビジネス継続性の 概要」を参照してください

エンドポイント リダイレクト

フェールオーバー グループは、geo フェールオーバー中も変更されない読み取り/書き込みおよび読み取り専用リスナー エンドポイントを提供します。 接続は現在のプライマリに自動的にルーティングされるので、geo フェールオーバー後にアプリケーションの接続文字列を変更する必要はありません。 geo フェールオーバーでは、グループ内のすべてのセカンダリ データベースがプライマリ ロールに切り替まれます。 geo フェールオーバーが完了すると、DNS レコードが自動的に更新され、エンドポイントが新しいリージョンにリダイレクトされます。

読み取り専用ワークロードをオフロードする

プライマリ データベースへのトラフィックを減らすために、フェールオーバー グループ内のセカンダリ データベースを使用して、読み取り専用ワークロードをオフロードすることもできます。 読み取り専用リスナーを使用して、読み取り専用のトラフィックを読み取り可能なセカンダリ データベースに送信します。

アプリケーションの回復

完全なビジネス継続性を実現するには、リージョン データベースの冗長性を追加する方法は、ソリューションの一部に限定されます。 致命的な障害の後にアプリケーション (サービス) をエンド ツー エンドで復旧するには、そのサービスと依存しているサービスを構成するすべてのコンポーネントを復旧する必要があります。 このようなコンポーネントの例には、クライアント ソフトウェア (カスタム JavaScript が設定されたブラウザーなど)、Web フロント エンド、ストレージ、DNS などがあります。 すべてのコンポーネントが同じ障害に耐性を持ち、アプリの復元時間目標(RTO)内で利用可能になることが重要です。 そのため、依存するサービスをすべて特定し、これらのサービスが提供する保証と機能について把握しておく必要があります。 そのうえで、依存するサービスのフェールオーバー中もサービスが確実に機能するように対策を講じる必要があります。

フェールオーバー ポリシー

フェールオーバー グループでは、次の 2 つのフェールオーバー ポリシーがサポートされています。

  • カスタマー マネージド (推奨) - お客様は、フェールオーバー グループ内の 1 つ以上のデータベースに影響を与える予期しない停止に気付いたときに、グループのフェールオーバーを実行できます。 PowerShell、Azure CLI、Rest API などのコマンド ライン ツールを使用する場合、カスタマー マネージドのフェールオーバー ポリシー値は manual.
  • Microsoft マネージド - プライマリ リージョンに影響を与える広範囲にわたる停止が発生した場合、Microsoft は、Microsoft が管理するように構成されたフェールオーバー ポリシーを持つ影響を受ける すべての フェールオーバー グループのフェールオーバーを開始します。 マイクロソフトマネージド フェールオーバーは、個々のフェールオーバー グループまたはリージョン内のフェールオーバー グループのサブセットに対して開始されません。 PowerShell、Azure CLI、Rest API などのコマンド ライン ツールを使用する場合、マイクロソフトが管理するフェールオーバー ポリシーの値は automatic.

次の表に示すように、各フェールオーバー ポリシーには、一意のユース ケースセットと、フェールオーバー スコープとデータ損失に対する対応する想定があります。

フェールオーバー ポリシー フェールオーバー スコープ ユース ケース データ損失の可能性
お客様による管理
(おすすめ)
フェールオーバー グループ フェールオーバー グループ内の 1 つ以上のデータベースが停止の影響を受け、使用できなくなります。 フェールオーバーを選択できます。 はい
Microsoft マネージド リージョン内のすべてのフェールオーバー グループ リージョンで広範囲にわたる障害が発生すると、データベースが使用できなくなるので、Microsoft Azure SQL サービス チームは強制フェールオーバーをトリガーすることを決定します。
このオプションは、ディザスター リカバリーの責任をマイクロソフトに委任する必要があり、アプリケーションが少なくとも 1 時間以上の RTO (ダウンタイム) に耐えられる場合にのみ使用します。
Microsoft マネージド フェールオーバーは、極端な状況でのみ実行される場合があります。 カスタマー マネージド フェールオーバー ポリシーを強くお勧めします。
はい

お客様による管理

まれに、組み込みの 可用性や高可用性 では停止を軽減できません。また、フェールオーバー グループ内のデータベースは、データベースを使用するアプリケーションのサービス レベル アグリーメント (SLA) に許容できない期間は使用できなくなる可能性があります。 データベースは、少数のデータベースのみに影響するローカライズされた問題が原因で使用できない場合があります。または、データセンター、可用性ゾーン、またはリージョン レベルにある可能性があります。 いずれの場合も、ビジネス継続性を復元するために、強制フェールオーバーを開始できます。

フェールオーバー ポリシーをカスタマー マネージドに設定することを強くお勧めします。フェールオーバーを開始してビジネス継続性を復元するタイミングを制御できます。 フェールオーバー グループ内の 1 つ以上のデータベースに影響を与える予期しない停止が発生した場合に、フェールオーバーを開始できます。

Microsoft マネージド

マイクロソフトマネージド フェールオーバー ポリシーでは、ディザスター リカバリーの責任が Azure SQL サービスに委任されます。 Azure SQL サービスで強制フェールオーバーを開始するには、次の条件を満たす必要があります。

  • 自然災害イベント、構成の変更、ソフトウェアのバグまたはハードウェア コンポーネントの障害、およびリージョン内の多くのデータベースによって発生するリージョン レベルの停止が影響を受けます。
  • 猶予期間が切れています。 停電の規模を確認し、緩和するかどうかは人間の行動に依存するため、猶予期間を 1 時間以下に設定することはできません。

これらの条件が満たされると、Azure SQL サービスは、フェールオーバー ポリシーがマイクロソフトマネージドに設定されているリージョン内のすべてのフェールオーバー グループに対して強制フェールオーバーを開始します。

重要

カスタマー マネージド フェールオーバー ポリシーを使用して、ディザスター リカバリー計画をテストして実装します。 Microsoft マネージド フェールオーバーに依存しないでください。これは Microsoft がやむを得ない場合にのみ実行することがあります。 Microsoft マネージド フェールオーバーは、そのフェールオーバー ポリシーが Microsoft マネージドに設定されているリージョン内のすべてのフェールオーバー グループに対して開始されます。 個々のフェールオーバー グループに対して開始することはできません。 フェールオーバー グループを選択的にフェールオーバーする必要がある場合は、カスタマー マネージド フェールオーバー ポリシーを使用します。

フェールオーバー ポリシーは、次の場合にのみマイクロソフトマネージドに設定します。

  • ディザスター リカバリーの責任を Azure SQL サービスに委任する必要があります。
  • アプリケーションは、データベースが少なくとも 1 時間以上使用できないことに耐えられます。
  • 強制フェールオーバーの実際の時間は大きく異なる可能性があるため、猶予期間の有効期限が切れた後に強制フェールオーバーをトリガーすることは許容されます。
  • ゾーンの冗長性の構成や可用性の状態に関係なく、フェールオーバー グループ内のすべてのデータベースがフェールオーバーしてもかまいません。 ゾーン冗長用に構成されたデータベースはゾーン障害に対する回復性があり、障害の影響を受ける可能性はありませんが、マイクロソフトマネージド フェールオーバー ポリシーを使用するフェールオーバー グループの一部である場合でもフェールオーバーされます。
  • アプリケーションが使用する他の Azure サービスまたはコンポーネントに対するアプリケーションの依存関係を考慮せずに、フェールオーバー グループ内のデータベースを強制的にフェールオーバーすることは許容されます。これにより、アプリケーションのパフォーマンスの低下や使用不能が発生する可能性があります。
  • 強制フェールオーバーの正確な時刻を制御できず、セカンダリ データベースの同期状態を無視するため、不明な量のデータ損失が発生してもかまいません。
  • フェールオーバー グループ内のプライマリ レプリカとセカンダリ レプリカのサービス レベル、コンピューティング レベル、コンピューティング サイズは同じです。

マイクロソフトによってフェールオーバーがトリガーされると、操作名 Failover Azure SQL フェールオーバー グループのエントリが Azure Monitor アクティビティ ログに追加されます。 エントリには[リソース] の下のフェールオーバー グループの名前が含まれ、イベントによって開始されたイベントには、フェールオーバーが マイクロソフトによって開始されたことを示す 1 つのハイフン (-) が表示されます。 この情報は、Azure portal の 新しいプライマリ サーバーまたはインスタンスの [アクティビティ ログ] ページでも確認できます。

用語と機能

  • フェールオーバー グループ (FOG)

    フェールオーバー グループを使用すると、プライマリ リージョンの停止によってプライマリ SQL マネージド インスタンスが使用できなくなった場合に備えて、SQL マネージド インスタンス内のすべてのユーザー データベースを 1 つのユニットとして別の Azure リージョンにフェールオーバーできます。 SQL Managed Instance のフェールオーバー グループには、そのインスタンス内のすべてのユーザー データベースが含まれています。そのため、1 つインスタンスにつき構成できるフェールオーバー グループは 1 つのみとなります。

    重要

    フェールオーバー グループの名前は、.database.windows.net ドメイン内でグローバルに一意である必要があります。

  • プライマリ

    フェールオーバー グループ内のプライマリ データベースをホストする SQL マネージド インスタンス。

  • セカンダリ

    フェールオーバー グループ内のセカンダリ データベースをホストする SQL マネージド インスタンス。 セカンダリをプライマリと同じ Azure リージョンに配置することはできません。

    重要

    データベースにインメモリ OLTP オブジェクトが含まれている場合、インメモリ OLTP オブジェクトがメモリ内に存在するため、プライマリインスタンス とターゲットセカンダリ geo レプリカ データベースには一致するサービス レベルが必要です。 geo レプリカ インスタンスのサービス レベルが低いと、メモリ不足の問題が発生する可能性があります。 この問題が発生すると、セカンダリ レプリカがデータベースの復旧に失敗し、セカンダリ データベースと geo セカンダリ上のインメモリ OLTP オブジェクトが使用できなくなる可能性があります。 これにより、フェールオーバーも失敗する可能性があります。 これを回避するには、geo セカンダリ インスタンスのサービス レベルがプライマリ データベースのサービス レベルと一致していることを確認します。 サービス レベルのアップグレードは、データサイズの操作になる場合があり、完了するまでに時間がかかる場合があります。

  • フェールオーバー (データ損失なし)

    フェールオーバーでは、セカンダリがプライマリ ロールに切り替わる前に、プライマリ データベースとセカンダリ データベース間の完全なデータ同期が行われます。 これにより、データ損失が発生しないことが保証されます。 フェールオーバーは、プライマリにアクセスできる場合にのみ可能です。 フェールオーバーは、次のシナリオで使用されます。

    • データ損失が許容されない場合は、運用環境でディザスター リカバリー (DR) ドリルを行います
    • ワークロードを別のリージョンに再配置します
    • 機能停止が軽減 (フェールバック) された後、ワークロードをプライマリ リージョンに返します
  • 強制フェールオーバー (データ損失の可能性)

    強制フェールオーバーの場合、最近の変更がプライマリから反映されるのを待たずに、直ちにセカンダリがプライマリに切り替わります。 この操作を実行するとデータが失われる可能性があります。 強制フェールオーバーは、機能停止時においてプライマリにアクセスできない場合に回復手段として使用されます。 停止が緩和されると、以前のプライマリは自動的に再接続され、新しいセカンダリになります。 フェールオーバーを実行してフェールバックし、レプリカを元のプライマリとセカンダリのロールに戻すこともできます。

  • データ消失の猶予期間

    非同期レプリケーションを使用してデータがセカンダリにレプリケートされるため、マイクロソフトマネージド フェールオーバー ポリシーを使用してグループを強制フェールオーバーすると、データが失われる可能性があります。 アプリケーションのデータ損失の許容範囲が反映されるように、フェールオーバー ポリシーをカスタマイズできます。 GracePeriodWithDataLossHours を構成することで、データ損失につながる可能性がある強制フェールオーバーの開始までに Azure SQLサービスが待機する時間を制御できます。

  • DNS ゾーン

    新しい SQL Managed Instance の作成時に自動的に生成される一意の ID。 このインスタンスのマルチドメイン (SAN) は、同じ DNS ゾーンのインスタンスに対するクライアント接続を認証する目的でプロビジョニングされます。 同じフェールオーバー グループ内の 2 つの SQL マネージド インスタンスは、DNS ゾーンを共有する必要があります。

  • フェールオーバー グループの読み取り/書き込みリスナー

    現在のプライマリをポイントする DNS CNAME レコード。 フェールオーバー グループが作成されるときに自動的に作成され、フェールオーバー後にプライマリが変更された場合に、読み取り/書き込みワークロードがプライマリに透過的に再接続できるようにします。 SQL マネージド インスタンスでフェールオーバー グループが作成されると、リスナー URL の DNS CNAME レコードは <fog-name>.<zone_id>.database.windows.net形式になります。

  • フェールオーバー グループの読み取り専用リスナー

    現在のセカンダリをポイントする DNS CNAME レコード。 フェールオーバー グループが作成されるときに自動的に作成され、フェールオーバー後にセカンダリが変更された場合に、読み取り専用 SQL ワークロードがセカンダリに透過的に接続できるようにします。 SQL マネージド インスタンスでフェールオーバー グループが作成されると、リスナー URL の DNS CNAME レコードは <fog-name>.secondary.<zone_id>.database.windows.net形式になります。 既定では、読み取り専用リスナーのフェールオーバーは無効になります。これにより、セカンダリがオフラインのときにプライマリのパフォーマンスに影響が及ばないようにします。 ただし、セカンダリが回復するまで、読み取り専用セッションは接続できません。 読み取り専用セッションのダウンタイムを許容できず、プライマリのパフォーマンスが下がる可能性があっても、読み取り専用と読み取り/書き込みの両方のトラフィックにプライマリを使用してもよければ、AllowReadOnlyFailoverToPrimary プロパティを構成することによって、読み取り専用リスナーのフェールオーバーを有効にできます。 その場合、セカンダリが利用できないと、読み取り専用トラフィックがプライマリに自動的にリダイレクトされます。

    AllowReadOnlyFailoverToPrimary プロパティは、マイクロソフトマネージドフェールオーバー ポリシーが有効になっていて、強制フェールオーバーがトリガーされる場合にのみ有効です。 その場合、プロパティが True に設定されている場合、新しいプライマリは読み取り/書き込みセッションと読み取り専用セッションの両方を提供します。

フェールオーバー グループのアーキテクチャ

フェールオーバー グループは、プライマリ インスタンスで構成し、別の Azure リージョンのセカンダリ インスタンスに接続する必要があります。 プライマリ インスタンス上のすべてのユーザー データベースがセカンダリ インスタンスにレプリケートされます。 mastermsdbなどのシステム データベースはレプリケートされません。

次の図は、SQL マネージド インスタンスとフェールオーバー グループを使用した geo 冗長クラウド アプリケーションの一般的な構成を示しています。

Azure SQL Managed Instance のフェールオーバー グループのダイアグラム

アプリケーションでデータ層として SQL Managed Instance を使用する場合は、ビジネス継続性を考慮して設計する際にこれらの一般的なガイドラインとベスト プラクティスに従ってください。

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

フェールオーバー後にプライマリ SQL Managed Instance への接続が中断されないようにするには、プライマリ インスタンスとセカンダリ インスタンスの両方が同じ DNS ゾーン内にある必要があります。 同じマルチドメイン (SAN) 証明書を使用して、フェールオーバー グループ内の 2 つのインスタンスのいずれかへのクライアント接続を認証できます。 アプリケーションを運用環境にデプロイする準備ができたら、別のリージョンでセカンダリ SQL Managed Instance を作成し、プライマリ SQL Managed Instance と DNS ゾーンを共有していることを確認します。 これを行うには、インスタンスの作成時に省略可能なパラメーターを指定します。 PowerShell または REST API を使用している場合、省略可能なパラメーターの名前は DNSZonePartner です。 テーブル内の対応する省略可能なフィールドのAzure portalは 、Primary Managed Instance です

重要

サブネットに作成された最初の SQL マネージド インスタンスによって、同じサブネット内の後続のすべてのインスタンスの DNS ゾーンが決定されます。 つまり、同じサブネットの 2 つのインスタンスが異なる DNS ゾーンに属することはできません。

プライマリ インスタンスと同じ DNS ゾーンでのセカンダリ SQL Managed Instance の作成の詳細については、「Azure SQL Managed Instance のフェールオーバーグループを構成する」を参照してください。

ペアリージョンを使用する

パフォーマンス上の理由から、 ペアになっているリージョン に両方の SQL マネージド インスタンスをデプロイします。 SQLManaged Instanceリージョン内のフェールオーバー グループのパフォーマンスは、ペア設定されていないリージョンと比較して優れたものになります。

Azure SQL Managed Instance は、一般に Azure ペア リージョンが同時にデプロイされない安全なデプロイ プラクティスに従います。 ただし、どのリージョンが最初にアップグレードされるかを予測することはできないため、デプロイの順序は保証されません。 プライマリ インスタンスが最初にアップグレードされ、セカンダリ インスタンスが最初にアップグレードされる場合があります。

Azure SQL Managed Instance がフェールオーバー グループの一部であり、グループ内のインスタンスが Azure のペアになっているリージョン内にない場合は、プライマリ データベースとセカンダリ データベースに対して異なるメンテナンス期間スケジュールを選択します。 たとえば、geo セカンダリ データベースのメンテナンス期間には [平日] を選択し、geo プライマリ データベースのメンテナンス期間には [週末] を選択します。

インスタンス間の geo レプリケーション トラフィック フローを有効にして最適化する

geo レプリケーション トラフィック フローを中断せずに行うには、プライマリ インスタンスとセカンダリ インスタンスをホストする仮想ネットワーク サブネット間の接続を確立し、維持する必要があります。 ネットワーク トポロジとポリシーに基づいて選択できるインスタンス間の接続を提供するには、複数の方法があります。

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

初期シード処理

SQL マネージド インスタンス間でフェールオーバー グループを確立する場合、データ レプリケーションが開始される前に、最初のシード処理フェーズがあります。 初期シード処理フェーズは、最も時間がかかり、最も負荷の高い操作です。 初期シード処理が完了すると、データが同期され、後続のデータ変更のみがレプリケートされます。 初期シード処理が完了するまでにかかる時間は、データのサイズ、レプリケートされたデータベースの数、プライマリ データベースでのワークロードの強度、プライマリ インスタンスとセカンダリ インスタンスをホストする仮想ネットワーク間のリンクの速度によって異なります。これは主に接続の確立方法によって異なります。 通常の状況では、推奨されるグローバル仮想ネットワーク ピアリングを使用して接続が確立されると、SQL Managed Instance のシード処理速度は 1 時間に最大 360 GB になります。 シード処理は、ユーザー データベースのバッチに対して並列で実行されますが、すべてのデータベースで同時に実行されるわけではありません。 インスタンスで多数のデータベースがホストされている場合は、複数のバッチが必要になる場合があります。

2 つのインスタンス間のリンクの速度が必要な速度よりも遅い場合は、シードする時間が大きな影響を受けそうになります。 指定されたシード処理速度、データベースの数、データの合計サイズ、リンク速度を使用して、データ レプリケーションの開始前に最初のシード処理フェーズにかかる時間を見積もることができます。 たとえば、100 GB のデータベースが 1 つの場合、リンクで 1 時間あたり 84 GB をプッシュでき、他のデータベースにシードしていないのであれば、初期シード処理フェーズにかかる時間は約 1.2 時間になります。 リンクが転送できるのが 1 時間あたり 10 GB のみの場合、100 GB のデータベースのシード処理には約 10 時間かかります。 レプリケートするデータベースが複数ある場合は、シード処理が並列で実行されます。 低速リンク速度と組み合わせると、最初のシード処理フェーズは、特にすべてのデータベースからのデータの並列シード処理が使用可能なリンク帯域幅を超える場合に、かなり長い時間がかかる場合があります。

重要

初期シード処理フェーズは、非常に低速または混雑したリンクでは数日かかる場合があります。 この場合、フェールオーバー グループを作成するとタイムアウトする可能性があります。フェールオーバー グループの作成は、6 日後に自動的に取り消されます。

geo セカンダリ インスタンスへの geo フェールオーバーを管理する

フェールオーバー グループは、プライマリ SQL マネージド インスタンス上のすべてのデータベースの geo フェールオーバーを管理します。 グループが作成されると、インスタンス上の各データベースがジオセカンダリインスタンスに自動的にジオレプリケートされます。 フェールオーバー グループを使用して、データベースのサブセットの部分的なフェールオーバーを開始することはできません。

重要

プライマリ SQL マネージド インスタンスでデータベースが削除された場合は、geo セカンダリ SQL マネージド インスタンスでも自動的に削除されます。

読み取り/書き込みリスナーを使用する (プライマリ MI)

読み取り/書き込みワークロードの場合は、サーバー名として <fog-name>.zone_id.database.windows.net を使用します。 接続は自動的にプライマリに向けられる。 この名前はフェールオーバー後に変更されません。 geo フェールオーバーには DNS レコードの更新が含まれるため、新しいクライアント接続は、クライアント DNS キャッシュが更新された後にのみ新しいプライマリにルーティングされます。 セカンダリ インスタンスは DNS ゾーンをプライマリと共有するために、クライアント アプリケーションは同じサーバー側 SAN 証明書を使用してそのゾーンに再接続できます。 既存のクライアント接続を終了してから再作成して、新しいプライマリにルーティングする必要があります。 読み取り/書き込みリスナーと読み取り専用リスナーは、 SQL マネージド インスタンスのパブリック エンドポイントを介して到達できません。

読み取りリスナーを使用する (セカンダリ MI)

データ待機時間に耐える読み取り専用ワークロードを論理的に分離している場合は、geo セカンダリで実行できます。 geo セカンダリに直接接続するには、サーバー名として <fog-name>.secondary.<zone_id>.database.windows.net を使用します。

Business Critical レベルの SQL Managed Instance では、接続文字列の パラメーターを使用して、ApplicationIntent=ReadOnlyを使用した読み取り専用クエリ ワークロードのオフロードがサポートされています。 Geo レプリケートされたセカンダリを構成した場合は、この機能を使用して、プライマリ ロケーション、または geo レプリケートされた場所の読み取り専用レプリカに接続できます。

  • プライマリ ロケーションの読み取り専用レプリカに接続するには、ApplicationIntent=ReadOnly<fog-name>.<zone_id>.database.windows.net を使用します。
  • セカンダリ ロケーションの読み取り専用レプリカに接続するには、ApplicationIntent=ReadOnly<fog-name>.secondary.<zone_id>.database.windows.net を使用します。

読み取り/書き込みリスナーと読み取り専用リスナーは、 SQL マネージド インスタンスのパブリック エンドポイントを介して到達できません。

フェールオーバー後のパフォーマンス低下の可能性

一般的な Azure アプリケーションでは、複数の Azure サービスを使用し、複数のコンポーネントで構成されます。 グループの geo フェールオーバーは、Azure SQL コンポーネントだけの状態に基づいてトリガーされます。 障害がプライマリ リージョン内の他の Azure サービスに影響を与えない可能性があり、そのコンポーネントはそのリージョンで引き続き使用できる可能性があります。 プライマリ データベースがセカンダリ リージョンに切り替えられると、依存コンポーネント間の待機時間が長くなる場合があります。 セカンダリ リージョン内のすべてのアプリケーションのコンポーネントの冗長性を確保し、アプリケーション コンポーネントをデータベースと共にフェールオーバーして、リージョン間の待機時間が長いほどアプリケーションのパフォーマンスに影響を与えないようにします。

強制フェールオーバー後のデータ損失の可能性

プライマリ リージョンで障害が発生した場合、最近のトランザクションが geo セカンダリにレプリケートされていない可能性があり、強制フェールオーバーが実行されるとデータが失われる可能性があります。

DNS の更新

読み取り/書き込みリスナーの DNS の更新は、フェールオーバーが開始された後すぐに行われます。 この操作によるデータの損失はありません。 ただし、通常の条件下では、データベース ロールを切り替えるプロセスには最大 5 分かかることがあります。 これが完了するまで、新しいプライマリ インスタンスの一部のデータベースは引き続き読み取り専用となります。 PowerShell を使用してフェールオーバーが開始された場合、プライマリ レプリカ ロールを切り替える操作は同時に発生します。 Azure portal を使用して開始された場合、UI で完了状態が示されます。 REST API を使用して開始された場合は、標準的な Azure Resource Manager のポーリング メカニズムを使用して、完了を監視します。

重要

geo フェールオーバーの原因となる停止が軽減された後は、手動計画フェールオーバーを使用してプライマリを元の場所に戻します。

ライセンスフリーの DR レプリカでコストを節約する

セカンダリ SQL マネージド インスタンスをディザスター リカバリー (DR) にのみ使用するように構成することで、SQL Server ライセンス コストを節約できます。 これをセットアップするには、「Azure SQL Managed Instance のライセンスフリー スタンバイ レプリカを構成する」を参照してください。

セカンダリ インスタンスが読み取りワークロードに使われていない限り、Microsoft はプライマリ インスタンスと一致する数の無料仮想コアを提供します。 その場合でも、セカンダリ インスタンスで使われるコンピューティングとストレージについては課金されます。 フェールオーバー グループは 1 つのレプリカのみをサポートし、レプリカは読み取り可能レプリカであるか、DR 専用レプリカとして指定されている必要があります。

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

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

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

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

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

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

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

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

プライマリ インスタンスとセカンダリ インスタンスの構成は同じである必要があります。 これには、コンピューティング サイズ、ストレージ サイズ、サービス レベルが含まれます。 フェールオーバー グループの構成を変更する必要がある場合は、それに応じて各インスタンスを同じ構成にスケーリングすることで変更できます。 詳細については、 フェールオーバー グループ内のインスタンスのスケーリングに関するページを参照してください。

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

ワイドエリアネットワークの待機時間が長いため、geo レプリケーションは非同期レプリケーションメカニズムを使用します。 非同期レプリケーションを使用すると、プライマリに障害が発生した場合にデータ損失が回避される可能性があります。 データを保護する方法については、「データ損失の 防止」を参照してください。

フェールオーバー グループの状態

フェールオーバー グループは、データ レプリケーションの現在の状態を説明する状態を報告します。

  • シード処理: 最初のシード処理 は、すべてのユーザー データベースがセカンダリ インスタンスで初期化されるまで、フェールオーバー グループの作成後に行われます。 ユーザー データベースがまだセカンダリ インスタンスにコピーされていないため、フェールオーバー グループが シード 状態の間はフェールオーバーを開始できません。
  • 同期中: フェールオーバー グループの通常の状態。 つまり、プライマリ インスタンスでのデータ変更が、セカンダリ インスタンスに非同期的にレプリケートされます。 この状態では、データがすべての時点で完全に同期される保証はありません。 フェールオーバー グループ内のインスタンス間のレプリケーション プロセスの非同期的な性質により、プライマリからセカンダリにレプリケートされるデータが変更される可能性があります。 フェールオーバー グループが同期状態にある間は、自動フェールオーバーと手動フェールオーバーの両方 開始できます。
  • フェールオーバーの進行中: この状態は、自動または手動で開始されたフェールオーバーが進行中であることを示します。 フェールオーバー グループがこの状態の間は、フェールオーバー グループに対する変更や追加のフェールオーバーを開始できません。

フェールバック

Microsoft が管理するフェールオーバー ポリシーを使用してフェールオーバー グループを構成すると、定義された猶予期間に従って、障害シナリオ中に geo セカンダリ サーバーへの強制フェールオーバーが開始されます。 古いプライマリへのフェールバックは、手動で開始する必要があります。

機能の相互運用性

バックアップ

完全バックアップは、次のシナリオで作成されます。

  • 初期シード処理が開始される前 (フェールオーバー グループを作成するとき)。
  • フェールオーバーの後。

完全バックアップは、スキップまたは遅延できないデータ操作のサイズであり、完了するまでに時間がかかる場合があります。 完了に要する時間は、データのサイズ、データベースの数、プライマリ データベースのワークロードの強度によって異なります。 完全バックアップにより、初期シード処理が大幅に遅れる可能性があり、フェールオーバー直後の新しいインスタンスでのフェールオーバー操作が遅延または妨げられる可能性があります。

以下、具体例に沿って説明します。

  • フェールオーバー グループのセカンダリ インスタンスでホストされているデータベースは、フェールオーバー後、またはフェールオーバー グループが削除されるまで、そのインスタンスがプライマリになるまでバックアップされません。
  • フェールオーバー後にデータベースがプライマリ ロールに変更された後、またはフェールオーバー グループが削除された後にスタンドアロンになった後、ポイントインタイム リストアを容易にするためにデータベースの完全バックアップが自動的に開始されます。
  • そのインスタンスがフェールオーバー グループ内のセカンダリ レプリカであった時点まで、データベースをインスタンスから復元することはできません。 特定の時点に復元するには、その時点でプライマリであったインスタンスからデータベースを復元する必要があります。
  • 同じ SQL マネージド インスタンスのペアで削除されたフェールオーバー グループを再作成するには、フェールオーバー グループが削除された後、すべてのユーザー データベースを目的のセカンダリから削除する必要があります。 データベースは、保留中のすべてのバックアップ操作が完了した後にのみ完全に削除されます。これには、完全バックアップ (データのサイズ操作) が実行されなかった場合も含まれます。 データベースが非常に大きいフェールオーバー グループを削除した後、セカンダリ インスタンスをクリーンアップする時間を許可します。各データベースでは、保留中の完全バックアップ操作が進行中である可能性があります。

完全バックアップは、スキップまたは遅延できないデータ操作のサイズであり、完了するまでに時間がかかる場合があります。 完了に要する時間は、データのサイズ、データベースの数、プライマリ データベースのワークロードの強度によって異なります。 完全バックアップでは初期シード処理が著しく遅れる可能性があり、フェールオーバーの直後に新しいインスタンスでフェールオーバー操作を遅延または回避できます。

ログ再生サービス

ログ再生サービス (LRS) を使用して Azure SQL Managed Instance に移行されたデータベースは、一括移行ステップが実行されるまでフェールオーバー グループに追加できません。 LRS で移行されたデータベースは、一括移行まで復元状態になり、復元状態のデータベースをフェールオーバー グループに追加することはできません。 復元状態のデータベースでフェールオーバー グループを作成しようとすると、データベースの復元が完了するまでフェールオーバー グループの作成が遅れます。

トランザクション レプリケーション

フェールオーバー グループ内のインスタンスでのトランザクション レプリケーションの使用はサポートされています。 ただし、SQL マネージド インスタンスをフェールオーバー グループに追加する前にレプリケーションを構成した場合、フェールオーバー グループの作成を開始するとレプリケーションが一時停止します。 レプリケーション モニターには、 Replicated transactions are waiting for the next log backup or for mirroring partner to catch upの状態が表示されます。 レプリケーションは、フェールオーバー グループが正常に作成されると、再開されます。

パブリッシャーまたはディストリビューター SQL マネージド インスタンスがフェールオーバー グループに存在する場合、フェールオーバーが発生した後に、SQL マネージド インスタンス管理者が、古いプライマリ上のすべてのパブリケーションをクリーンアップして、新しいプライマリ上でそれらを再構成する必要があります。 このシナリオで必要なアクティビティの手順については、「トランザクション レプリケーション ガイド」を確認してください。

アクセス許可と制限

フェールオーバー グループを構成する前に、アクセス許可制限事項の一覧を確認してください。

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

フェールオーバー グループは、Azure PowerShell、Azure CLI、および REST API を使用してプログラムで管理することもできます。 詳細については 、「フェールオーバー グループの構成」 を参照してください。

ディザスター リカバリーの訓練

DR ドリルを実行するには、テスト フェールオーバーのチュートリアルに従って手動計画フェールオーバーの使用をお勧めします。

この操作ではデータ損失に対するガードレールが提供されないため、強制フェールオーバーを使用してドリルを実行 することはお勧めしません。 ただし、強制フェイルオーバー前に以下の条件を満たすことで、データ損失のない強制フェイルオーバーが可能になります。

  • ワークロードは、プライマリ SQL マネージド インスタンスで停止されます。
  • 実行時間の長いトランザクションがすべて完了した。
  • プライマリ SQL マネージド インスタンスへのすべてのクライアント接続が切断されました。
  • フェールオーバー グループの状態 が "同期中"である。

2 つの SQL マネージド インスタンスでロールが切り替っていることを確認してください。 また、必要に応じて新しいプライマリ SQL マネージド インスタンスへの接続を確立し、読み取り/書き込みワークロードを開始する前に、フェールオーバー グループの状態が "フェールオーバーの進行中" から "同期中" に切り替わりました。

元の SQL マネージド インスタンス ロールに対してデータ損失のないフェールバックを実行するには、強制フェールオーバーではなく手動の計画フェールオーバーを使用 することを強くお勧めします。 強制フェールバックを使用する場合:

  • データ ロスレス フェイルオーバーと同じ手順に従います。
  • 最初の強制フェールオーバーが完了した 直後に 強制フェールバックが実行された場合、以前のプライマリ SQL マネージド インスタンスで未処理の自動バックアップ操作が完了するのを待機する必要があるため、フェールバックの実行時間が長くなることが予想されます。
  • プライマリ ロールからセカンダリ ロールに移行するインスタンスに対する未処理の自動バックアップ操作は、このインスタンスでのデータベースの可用性に影響を与える可能性があります。
  • フェールオーバー グループの状態を使用して、両方のインスタンスがロールを正常に変更し、クライアント接続を受け入れる準備ができているかどうかを確認してください。