Azure SQL データベースの高可用性
適用対象:Azure SQL データベース
この記事では、Azure SQL データベースの高可用性アーキテクチャについて説明します。
概要
Azure SQL データベースの高可用性アーキテクチャの目的は、サービス メンテナンスの運用と停止による顧客のワークロードへの影響を最小限に抑えることです。 さまざまなサービス レベルの特定の SLA については、「Azure SQL データベースの SLA」を参照してください。
SQL Database は、Windows オペレーティング システム上の SQL Server データベース エンジンの最新の安定バージョンで実行され、適用可能なすべてのパッチが適用されます。 SQL Database では、修正プログラムの適用、バックアップ、Windows や SQL エンジンのアップグレードなどの重要なサービス タスクや、計画外のイベント (ハードウェア、ソフトウェア、ネットワークの根本的な障害など) が自動的に処理されます。 SQL Database のデータベースや Elastic Pool に修正プログラムが適用される場合や、フェールオーバーした場合、お使いのアプリで再試行ロジックを使用していれば、ダウンタイムによる影響はありません。 SQL Database は、クリティカルな状況であっても迅速な復旧が可能であるため、データが常に使用可能であることが保証されます。 ほとんどのユーザーは、アップグレードが継続的に実行されていることを認識しません。
高可用性ソリューションは、コミットされたデータが障害によって失われないこと、メンテナンス操作がワークロードに影響を及ぼさないこと、また、データベースがソフトウェア アーキテクチャでの単一障害点にならないことを保証するように設計されています。
高可用性アーキテクチャ モデルには、次の 3 つがあります。
- リモート記憶域モデルは、コンピューティングとストレージの分離に基づいています。 リモート ストレージ層の高可用性と信頼性に依拠します。 このアーキテクチャでは、メンテナンス作業中に一定のパフォーマンス低下を許容できる予算重視のビジネス アプリケーションを対象とします。
- ローカル記憶域モデルは、データベース エンジン プロセスのクラスターに基づいています。 利用可能なデータベース エンジン ノードのクォーラムが常にあるという事実に依存します。 このアーキテクチャでは、高い IO パフォーマンス、高いトランザクション レートを備えたミッション クリティカルなアプリケーションを対象とし、メンテナンス作業中のワークロードに対するパフォーマンスの影響を最小限に抑えることを保証します。
- ハイパースケール モデルは、計算ノード、ページ サーバー、ログ サービス、永続ストレージなどの高可用性コンポーネントの分散システムを使用します。 Hyperscale データベースをサポートする各コンポーネントは、障害に対する独自の冗長性と回復性を持ちます。 計算ノード、ページ サーバー、ログ サービスが Azure Service Fabric で実行されることで、各コンポーネントの正常性が制御され、必要に応じて使用できる正常なノードへのフェールオーバーが行われます。 永続ストレージでは、ネイティブの高可用性と冗長性の機能を備えた Azure Storage が使用されます。 詳細については、「Hyperscale アーキテクチャ」を参照してください。
SQL Database では、3 つの可用性モデルのそれぞれで、ローカル冗長性とゾーン冗長オプションがサポートされています。 ローカル冗長性はリージョンの障害に対する回復性を提供し、ゾーン冗長は、リージョン内の可用性ゾーンの停止から保護することで回復性をさらに向上させます。
次の表は、サービス レベルに基づく可用性オプションを示しています。
サービス レベル | 高可用性モデル | ローカル冗長可用性 | ゾーン冗長可用性 |
---|---|---|---|
General Purpose (仮想コア) | リモート ストレージ | はい | はい |
Business Critical (仮想コア) | ローカル ストレージ | はい | はい |
Hyperscale (仮想コア) | ハイパースケール | はい | はい |
Basic (DTU) | リモート ストレージ | はい | いいえ |
Standard (DTU) | リモート ストレージ | はい | いいえ |
Premium (DTU) | ローカル ストレージ | はい | はい |
ローカル冗長可用性
ローカル冗長可用性は、データベースをローカル冗長ストレージ (LRS) に格納することに基づいています。これにより、プライマリ リージョンの 1 つのデータセンター内でデータが 3 回コピーされ、小規模なネットワークや電源障害などのローカル障害が発生した場合にデータが保護されます。 LRS は、コストが最も安い冗長オプションであり、他のオプションと比較して持続性は最も低くなります。 ただし、データセンター内で火災や洪水などの大規模な障害が発生した場合、LRS を使用しているストレージ アカウントのすべてのレプリカが失われたり、回復不能になったりする可能性があります。 そのため、ローカル冗長可用性オプションを使用するときにデータをさらに保護するには、データベースのバックアップに回復性の高いストレージ オプションを使用することを検討してください。 これは、データ ファイルとバックアップの両方に同じストレージが使用される Hyperscale データベースには当てはまりません。
ローカル冗長可用性は、すべてのサービス レベルのすべてのデータベースで使用できます。
Basic、Standard、General Purpose サービス レベル
Basic、Standard、General Purpose サービス レベルでは、サーバーレスとプロビジョニング済みの両方のコンピューティングで、標準のリモート記憶域可用性モデルを使用します。 次の図は、計算レイヤーとストレージ レイヤーが分離されている4 つの異なるノードを示しています。
リモート記憶域可用性モデルには、次の 2 つのレイヤーがあります。
- ステートレス コンピューティング レイヤーは、データベース エンジン プロセスを実行し、アタッチされた SSD 上の
tempdb
やmodel
データベース、メモリ内のプラン キャッシュ、バッファー プール、列ストア プールなどの一時的なデータとキャッシュ データのみが含まれています。 このステートレス ノードは、データベース エンジンの初期化、ノードの正常性の制御、他のノードへのフェールオーバーを必要に応じて実行する Azure Service Fabric によって操作されます。 - ステートフル データ レイヤー。データベース ファイル (
.mdf
および.ldf
) は Azure Blob Storage に保存されています。 Azure Blob Storage には、ビルトインのデータ可用性と冗長性の機能があります。 データベース エンジン プロセスがクラッシュした場合でも、ログ ファイル内のすべてのレコードやデータ ファイル内のすべてのページが保持されることを保証します。
データベース エンジンまたはオペレーティング システムがアップグレードされた場合、あるいは障害が検出された場合、Azure Service Fabric は常に、ステートレス データベース プロセスを十分な空き容量がある別のステートレス計算ノードに移行します。 Azure Blob Storage 内のデータは移行による影響を受けず、データ/ログ ファイルは、新しく初期化された データベース エンジン プロセスにアタッチされます。 このプロセスでは高可用性が保証されますが、新しい データベース エンジン プロセスはコールド キャッシュを使用して起動されるため、負荷の高いワークロードでは移行中にパフォーマンスの低下が発生する可能性があります。
Premium、Business Critical サービス レベル
Premium および Business Critical サービス レベルでは、ローカル記憶域可用性モデルを使用します。1 つのノード上で、計算リソース (データベース エンジン プロセス) とストレージ (ローカルに接続されている SSD) が統合されます。 高可用性は、追加ノードにコンピューティングとストレージの両方をレプリケートすることで実現されます。
基になるデータベース ファイル (.mdf/.ldf) は、非常に低い待機時間の IO をワークロードに提供するために、アタッチされている SSD ストレージ上に配置されています。 高可用性は、SQL Server Always On 可用性グループと同様のテクノロジを使用して実装されます。 クラスターには、読み取り/書き込みの顧客ワークロードにアクセス可能な単一のプライマリ レプリカと、データのコピーを格納する最大 3 つのセカンダリ レプリカ (計算とストレージ) が含まれます。 プライマリ レプリカは常にセカンダリ レプリカへ順番に変更をプッシュし、各トランザクションをコミットする前に、十分な数のセカンダリ レプリカにデータが保持されるようにします。 このプロセスは、何らかの理由でプライマリ レプリカまたは読み取り可能なセカンダリ レプリカがクラッシュした場合に、フェールオーバー先となる完全に同期されたノードが常に用意されている状態を保証します。 フェールオーバーは、Azure Service Fabric によって開始されます。 セカンダリ レプリカが新しいプライマリ レプリカになると、クォーラムを維持するのに十分な数のレプリカがクラスターに確保されるように、別のセカンダリ レプリカが作成されます。 フェールオーバーが完了すると、Azure SQL 接続は新しいプライマリ レプリカまたは読み取り可能なセカンダリ レプリカに自動的にリダイレクトされます。
その他の利点としては、ローカル記憶域可用性モデルには、セカンダリ レプリカの 1 つに読み取り専用の Azure SQL 接続をリダイレクトする機能が含まれています。 この機能は、読み取りスケールアウトと呼ばれます。追加料金なしで 100% の追加のコンピューティング容量を提供し、分析ワークロードなどの読み取り専用の操作をプライマリ レプリカからオフロードします。
ハイパースケール サービス レベル
Hyperscale サービス レベルのアーキテクチャについては、「分散機能アーキテクチャ」を参照してください。
Hyperscale の可用性モデルには、次の 4 つのレイヤーが含まれます。
- ステートレス コンピューティング レイヤーは、データベース エンジンプロセスを実行し、アタッチされた SSD 上のカバーしない RBPEX キャッシュおよび
tempdb
やmodel
データベース、メモリ内のプラン キャッシュ、バッファー プール、列ストア プールなどの、一時的なデータとキャッシュ データのみ が含まれています。 このステートレス レイヤーには、プライマリ計算レプリカと、必要に応じて、フェールオーバー ターゲットとして機能できる多くのセカンダリ計算レプリカが含まれています。 - ページ サーバーによって形成されるステートレス ストレージ レイヤー。 このレイヤーは、計算レプリカで実行されているデータベース エンジン プロセス用の分散ストレージ エンジンです。 各ページ サーバーには、アタッチされた SSD 上のカバーする RBPEX キャッシュ、メモリにキャッシュされたデータ ページなど、一時的なデータとキャッシュされたデータのみが含まれます。 各ページ サーバーでは、負荷分散、冗長性、高可用性を提供するためのアクティブ/アクティブ構成にペアのページ サーバーがあります。
- ステートフルなトランザクション ログのストレージ レイヤー。ログ サービス プロセス、トランザクション ログのランディング ゾーン、およびトランザクション ログの長期保存を実行する計算ノードによって形成されます。 ランディング ゾーンと長期保存では Azure Storage を使用します。これにより、トランザクション ログの可用性と冗長性が提供され、コミットされたトランザクションのデータの持続性が確保されます。
- ステートフルなデータ ストレージ レイヤー。Azure Storage に格納され、ページ サーバーによって更新される、データベース ファイル (.mdf/.ndf) が含まれます。 このレイヤーでは、Azure Storage のデータの可用性と冗長性の機能を使用します。 これにより、Hyperscale アーキテクチャの他のレイヤーのプロセスがクラッシュした場合や、計算ノードで障害が発生した場合でも、データ ファイル内のすべてのページが保持されることが保証されます。
すべての Hyperscale レイヤー内の計算ノードは、Azure Service Fabric で実行されます。これにより、各ノードの正常性が制御され、必要に応じて使用できる正常なノードへのフェールオーバーが行われます。
Hyperscale の高可用性の詳細については、「ハイパースケールでのデータベースの高可用性」を参照してください。
ゾーン冗長可用性
ゾーン冗長可用性は、データベースをゾーン冗長ストレージ (ZRS) に格納し、プライマリ リージョンの 3 つの Azure 可用性ゾーンにデータをコピーすることに基づいています。 各可用性ゾーンは、独立した電源、冷却装置、ネットワークを備えた独立した物理的な場所です。
ゾーン冗長可用性は、DTU ベースの購入モデルの Basic および Standard サービス レベルには含まれておらず、仮想コア購入モデルの General Purpose、Premium、Business Critical、Hyperscale サービス レベルのデータベースで使用できます。
General Purpose サービス レベル
General Purpose サービス レベルのゾーン冗長構成は、仮想コア購入モデルでサーバーレスとプロビジョニング済みの両方のコンピューティングに提供されます。 この構成では、Azure Availability Zones を利用して、Azure リージョン内の複数の物理的な場所にデータベースをレプリケートします。 ゾーン冗長を選択することで、アプリケーション ロジックを変更することなく、データセンターの壊滅的な障害などの大規模な障害に対する回復性を、新規および既存のサーバーレスおよびプロビジョニング済みの汎用単一データベースやエラスティック プールに持たせることができます。
General Purpose レベル向けのゾーン冗長構成には、次の 2 つの層があります。
- ステートフル データ レイヤー。データベース ファイル (.mdf/.ldf) は ZRS (ゾーン冗長ストレージ) に保存されています。 ZRS を使用すると、データとログのファイルは、物理的に分離された 3 つの Azure 可用性ゾーン間で同期的にコピーされます。
- ステートレス計算レイヤー。sqlservr.exe プロセスを実行しており、一時的なデータとキャッシュ データのみ (
tempdb
、アタッチされた SSD 上のmodel
データベース、およびメモリ内のプラン キャッシュ、バッファー プール、列ストア プールなど) が含まれています。 このステートレス ノードは、sqlservr.exe の初期化、ノードの正常性の制御、および他のノードへのフェールオーバーを必要に応じて実行する Azure Service Fabric によって操作されます。 ゾーン冗長のサーバーレスおよびプロビジョニング済み General Purpose データベースの場合、予備の容量があるノードをフェールオーバーのために他の Availability Zones ですぐに使用できます。
ゾーン冗長による General Purpose サービス レベル向けの高可用性アーキテクチャを、次の図に示します。
ゾーン冗長を使用して General Purpose データベースを構成する場合は、次の点を考慮してください。
- General Purpose レベルのゾーン冗長構成は、次のリージョンでのみ一般提供されます。
- (アジア太平洋) オーストラリア東部
- (アジア太平洋) 東アジア
- (アジア太平洋) 東日本
- (アジア太平洋) 韓国中部
- (アジア太平洋) 東南アジア
- (ヨーロッパ) フランス中部
- (ヨーロッパ) 北ヨーロッパ
- (ヨーロッパ) 西ヨーロッパ
- (ヨーロッパ) 英国南部
- (中東) カタール中部
- (北米) 米国東部
- (北米)米国東部 2
- (北米) 米国中南部
- (北米)米国西部 2
- (南アメリカ) ブラジル南部
- ゾーン冗長可用性の場合、既定以外のメンテナンス期間を選択することは、現在、一部のリージョンでのみ可能です。
- ゾーン冗長構成は、スタンダード シリーズ (Gen5) ハードウェアが選択されている場合にのみ SQL データベースで利用できます。
- ゾーン冗長は、DTU 購入モデルの Basic および Standard サービス レベルでは使用できません。
Premium および Business Critical サービス レベル
既定では、ローカル記憶域可用性モデル用のノードのクラスターは、同じデータセンター内に作成されます。 Azure Availability Zones を導入すると、SQL データベースでは同じリージョン内のさまざまな可用性ゾーンに対する Premium または Business Critical データベースのさまざまなレプリカを配置できます。 単一障害点をなくすため、制御リングも複数のゾーンで 3 つのゲートウェイ リング (GW) として複製できます。 特定のゲートウェイ リングへのルーティングは Azure Traffic Manager によって制御されます。 Premium または Business Critical サービス レベルでのゾーン冗長構成では、追加のデータベース冗長を作成しないため、追加料金なしで使用できます。 ゾーン冗長構成を選択すると、アプリケーション ロジックを変更することなく、データセンターの壊滅的な障害などの大規模な障害に対する Elastic Pool の回復性を、Premium または Business Critical のデータベースに持たせることができます。 また、既存の Premium または Business Critical のデータベースや Elastic Pool をゾーン冗長構成に変換することもできます。
ゾーン冗長データベースでは、離れた距離に位置するさまざまなデータセンターにレプリカがあるため、ネットワーク待ち時間が長くなるとトランザクションのコミット時間が増大し、一部の OLTP ワークロードのパフォーマンスに影響を及ぼす可能性があります。 いつでもゾーン冗長設定を無効にして単一ゾーン構成に戻ることができます。 このプロセスは通常のサービス対象のアップグレードと同様に、オンライン操作です。 プロセスの最後に、データベースや Elastic Pool がゾーン冗長リングから単一ゾーン リングに (または逆方向に) 移行されます。
ゾーン冗長による高可用性アーキテクチャを、次の図に示します。
ゾーン冗長を使用して Premium または Business Critical データベースを構成する際、次の点を考慮してください。
- Business Critical レベルを使用している場合、ゾーン冗長構成は Gen5 ハードウェアが選択されている場合のみ使用できます。
- ゾーン冗長データベースがサポートされているリージョンの最新情報については、「リージョン別のサービスのサポート」を参照してください。
- ゾーン冗長可用性の場合、既定以外のメンテナンス期間を選択することは、現在、一部のリージョンでのみ可能です。
ハイパースケール サービス レベル
Hyperscale サービス レベルでは、データベースのゾーン冗長を構成できます。 詳しくは、「Hyperscale データベースのゾーン冗長構成」をご確認ください。
この構成を有効にすると、すべての Hyperscale レイヤーににおける Availability Zones 間のレプリケーションを通じて、ゾーン レベルの回復性が確保されます。 ゾーン冗長を選択することにより、アプリケーション ロジックを変更することなく、データセンターの壊滅的な障害など、大規模な障害に対する Hyperscale データベースの回復性を高めることができます。 Availability Zones を持つすべての Azure リージョンは、ゾーン冗長 Hyperscale データベースをサポートします。
次の制限が適用されます。
- ゾーン冗長構成は、データベースの作成時にのみ指定できます。 この設定は、リソースがプロビジョニングされた後は変更できません。 データベースのコピー、ポイントインタイム リストア、または geo レプリカの作成を使用して、既存の Hyperscale データベースのゾーン冗長構成を更新します。 これらのアップデート オプションのいずれかを使用する際に、ターゲット データベースがソースとは異なるリージョンにある場合、またはターゲット データベースのバックアップ ストレージの冗長性がソース データベースと異なる場合、コピー操作はデータ操作のサイズになります。
- ゾーン冗長可用性の場合、既定以外のメンテナンス期間を選択することは、現在、一部のリージョンでのみ可能です。
- Standard シリーズ (Gen5) ハードウェアだけがサポートされています。
- 名前付きレプリカは現在サポートされていません。
- 現在、Azure portal を使用してデータベースを Hyperscale に移行する際に、ゾーン冗長を指定する方法はありません。 ただし、既存のデータベースを別の Azure SQL データベースサービス レベルから Hyperscale に移行する際に、Azure PowerShell、Azure CLI、REST API を使用してゾーン冗長を指定することはできます。 Azure CLI の例を次に示します。
az sql db update --resource-group "myResourceGroup" --server "myServer" --name "myDB" --edition Hyperscale --zone-redundant true
- Hyperscale のゾーン冗長構成を有効にするには、少なくとも 1 つの高可用性コンピューティング レプリカとゾーン冗長または geo ゾーン冗長のバックアップ ストレージの使用が必要です。
master
データベースのゾーン冗長可用性
Azure SQL Database でのサーバーは、データベースのコレクションの中央管理ポイントとして機能する論理コンストラクトです。 サーバー レベルでは、ログイン、Azure Active Directory 認証、ファイアウォール規則、監査規則、脅威検出ポリシー、自動フェールオーバー グループを管理できます。 ログインやファイアウォール規則など、これらの機能の一部に関連するデータは、master
データベースに格納されます。 同様に、一部の DMV (sys.resource_stats など) のデータも、master
データベースに格納されます。
ゾーン冗長構成のデータベースが論理サーバーに作成されると、サーバーに関連付けられている master
データベースも自動的にゾーン冗長になります。 これにより、ゾーンの障害が発生しても、ログインやファイアウォール規則などの master
データベースに依存する機能は引き続き使用できるため、データベースを使用するアプリケーションは影響を受けなくなります。 master
データベースをゾーン冗長にするのは非同期プロセスであり、バックグラウンドで完了するまでに時間がかかります。
サーバー上のどのデータベースもゾーン冗長でない場合、または空のサーバーを作成する場合は、サーバーに関連付けられている master
データベースはゾーン冗長ではありません。
Azure PowerShell、Azure CLI、または REST API を使って、master
データベースの ZoneRedundant
プロパティを確認できます。
次のコマンド例を使って、master
データベースの "ZoneRedundant" プロパティの値を確認します。
Get-AzSqlDatabase -ResourceGroupName "myResourceGroup" -ServerName "myServerName" -DatabaseName "master"
アプリケーションの障害回復性のテスト
高可用性は、データベース アプリケーションに対して透過的に機能する Azure SQL データベースプラットフォームの基礎となる部分です。 しかし、計画済みまたは計画外のイベント時に開始された自動フェールオーバー操作がアプリケーションに与える影響をテストしてから、運用環境にデプロイする必要があると Microsoft は認識しています。 特別な API を呼び出してデータベースや Elastic Pool を再起動することにより、手動でフェールオーバーをトリガーできます。 ゾーン冗長のサーバーレスまたはプロビジョニング済み General Purpose データベースまたはエラスティック プールの場合、API 呼び出しによって、クライアント接続が、古いプライマリの可用性ゾーンとは異なる可用性ゾーン内の新しいプライマリにリダイレクトされます。 そのため、フェールオーバーが既存のデータベース セッションにどのように影響するかをテストするだけでなく、ネットワーク待機時間の変化によってエンドツーエンドのパフォーマンスを変化させるかどうかを確認することもできます。 再起動操作は侵入的なもので、大量に行うとプラットフォームに負荷をかける可能性があるため、各データベースまたは Elastic Pool に対しては、15 分ごとに 1 つのフェールオーバー呼び出しのみが許可されます。
Azure SQL データベースの高可用性とディザスター リカバリーの詳細については、「HA/DR チェックリスト」を参照してください。
フェールオーバーは、PowerShell、REST API または Azure CLI を使用して開始できます。
デプロイの種類 | PowerShell | REST API | Azure CLI |
---|---|---|---|
データベース | Invoke-AzSqlDatabaseFailover | データベース フェールオーバー | Azure CLI から REST API 呼び出しを呼び出すために az rest が使用できます |
エラスティック プール | Invoke-AzSqlElasticPoolFailover | エラスティック プールのフェールオーバー | Azure CLI から REST API 呼び出しを呼び出すために az rest が使用できます |
重要
フェールオーバー コマンドは、ハイパースケール データベースの読み取り可能なセカンダリ レプリカでは使用できません。
まとめ
Azure SQL データベースの特徴は、Azure プラットフォームと緊密に統合される、ビルトインの高可用性ソリューションです。 障害の検出と復旧に Service Fabric を、データ保護に Azure BLOB ストレージを、フォールト トレランスを高めるために Availability Zones を活用しています。 さらに、SQL データベースでは、データ同期とフェールオーバーのために、SQL Server から Always On 可用性グループのテクノロジーを活用しています。 これらのテクノロジーを組み合わせることで、アプリケーションでは混合ストレージ モデルを最大限に活用して、高要件の SLA にも対応できます。
次のステップ
- Azure 可用性ゾーンの詳細
- Service Fabric の詳細
- Azure Traffic Manager の詳細
- 高可用性およびディザスター リカバリーのためのその他のオプションについては、ビジネス継続性に関するページを参照してください。