Azure Cosmos DB での高可用性High availability with Azure Cosmos DB

Azure Cosmos DB では、Cosmos アカウントに関連付けられているすべての Azure リージョンにデータが透過的にレプリケートされます。Azure Cosmos DB transparently replicates your data across all the Azure regions associated with your Cosmos account. Cosmos DB では、次の図のように、複数層のデータ冗長性が採用されています。Cosmos DB employs multiple layers of redundancy for your data as shown in the following image:

物理的パーティション分割

  • Cosmos コンテナー内のデータは、水平方向にパーティション分割されますThe data within Cosmos containers is horizontally partitioned.

  • 各リージョン内のすべてのパーティションは、すべての書き込みがレプリケートされ、レプリカの大多数によって永続的にコミットされたレプリカ セットによって保護されます。Within each region, every partition is protected by a replica-set with all writes replicated and durably committed by a majority of replicas. レプリカは、最大で 10 ~ 20 個の障害ドメインに分散されます。Replicas are distributed across as many as 10-20 fault domains.

  • すべてのリージョンで、各パーティションがレプリケートされます。Each partition across all the regions is replicated. 各リージョンには Cosmos コンテナーのすべてのデータ パーティションが含まれており、書き込みを受け入れて読み取りに対応できます。Each region contains all the data partitions of a Cosmos container and can accept writes and serve reads.

Cosmos アカウントが N 個の Azure リージョンに分散している場合は、すべてのデータの少なくとも N x 4 個のコピーが存在します。If your Cosmos account is distributed across N Azure regions, there will be at least N x 4 copies of all your data. データ アクセスの待ち時間を短くし、書き込み/読み取りスループットを Cosmos アカウントに関連付けられたリージョンにわたってスケーリングすることに加えてリージョン数 (N) を増やすと、可用性はさらに向上します。In addition to providing low latency data access and scaling write/read throughput across the regions associated with your Cosmos account, having more regions (higher N) further improves availability.

可用性に関する SLASLAs for availability

グローバル分散型データベースとしての Cosmos DB は、スループット、99 パーセンタイルの待ち時間、一貫性、および高可用性を含む包括的な SLA を提供します。As a globally distributed database, Cosmos DB provides comprehensive SLAs that encompass throughput, latency at the 99th percentile, consistency, and high availability. 次の表では、単一リージョンおよび複数リージョンのアカウントについて Cosmos DB によって提供される高可用性の保証について説明します。The table below shows the guarantees for high availability provided by Cosmos DB for single and multi-region accounts. 高可用性のために、常に、複数の書き込みリージョンが存在するように Cosmos アカウントを構成してください。For high availability, always configure your Cosmos accounts to have multiple write regions.

操作の種類Operation type 単一リージョンSingle region 複数リージョン (単一リージョンの書き込み)Multi-region (single region writes) 複数リージョン (複数リージョンの書き込み)Multi-region (multi-region writes)
書き込みWrites 99.9999.99 99.9999.99 99.99999.999
読み取りReads 99.9999.99 99.99999.999 99.99999.999

注意

実際には、有界整合性制約、セッション、一貫性のあるプレフィックス、および最終的整合性モデルに関する実際の書き込み可用性は、公開された SLA より大幅に高くなります。In practice, the actual write availability for bounded staleness, session, consistent prefix and eventual consistency models is significantly higher than the published SLAs. すべての整合性レベルについての実際の読み取り可用性は、公開された SLA よりもずっと高くなります。The actual read availability for all consistency levels is significantly higher than the published SLAs.

リージョン障害が発生した場合の Cosmos DB の高可用性High availability with Cosmos DB in the event of regional outages

リージョン障害は珍しいことではなく、Azure Cosmos DB はデータベースを常に高可用性の状態に維持します。Regional outages aren't uncommon, and Azure Cosmos DB makes sure your database is always highly available. Cosmos アカウントの構成に応じた、障害発生中の Cosmos DB の動作の詳細を次に示します。The following details capture Cosmos DB behavior during an outage, depending on your Cosmos account configuration:

  • Cosmos DB では、クライアントに対して書き込み操作が承認される前に、書き込み操作を受け入れるリージョン内のレプリカのクォーラムによってデータが永続的にコミットされます。With Cosmos DB, before a write operation is acknowledged to the client, the data is durably committed by a quorum of replicas within the region that accepts the write operations.

  • 複数書き込みリージョンで構成された複数リージョン アカウントは、書き込みと読み取りの両方について高可用性を実現します。Multi-region accounts configured with multiple-write regions will be highly available for both writes and reads. リージョン間フェールオーバーは瞬間的であるため、アプリケーションからの変更は必要ありません。Regional failovers are instantaneous and don't require any changes from the application.

  • 単一書き込みリージョンで構成された複数リージョン アカウント (書き込みリージョン障害):Multi-region accounts with a single-write region (write region outage):

    • これらのアカウントでは、書き込みリージョンの障害発生時に読み取りの高可用性が維持されます。During a write region outage, these accounts will remain highly available for reads. 書き込み要求を成功させるには、Azure Cosmos アカウントで自動フェールオーバーの有効化オプションを有効にする必要があります。For the write requests to succeed, you must turn on the enable automatic failover option on your Azure Cosmos account. このオプションを有効にすると、指定したリージョンの優先順位に従って、影響を受けるリージョンが別のリージョンにフェールオーバーされます。Enabling this option will failover the impacted region to another region in the order of region priority you’ve specified.
    • 以前に影響を受けたリージョンがオンラインに戻ると、障害発生時にレプリケートされなかった書き込みデータは競合フィードによって使用可能になります。When the previously impacted region is back online, any write data that was unreplicated when the region failed, is made available through the conflicts feed. アプリケーションは競合フィードを読み取り、そのアプリケーション固有のロジックに基づいて競合を解決した後、更新されたデータを必要に応じて Azure Cosmos コンテナーに書き戻すことができます。Applications can read the conflicts feed, resolve the conflicts based on the application-specific logic, and write the updated data back to the Azure Cosmos container as appropriate.
    • 以前影響を受けた書き込みリージョンが復旧すると、自動的に読み取りリージョンとして利用可能になります。Once the previously impacted write region recovers, it becomes automatically available as a read region. 復旧したリージョンに書き込みリージョンとして切り替えることができます。You can switch back to the recovered region as the write region. リージョンは Azure CLI または Azure portal を使用して切り替えることができます。You can switch the regions by using Azure CLI or Azure portal. 書き込みリージョンを切り替えている間、またはその後に、データや可用性の損失が発生することはありません。アプリケーションは高可用性を維持します。There is no data or availability loss before, during or after you switch the write region and your application continues to be highly available.
  • 単一書き込みリージョンで構成された複数リージョン アカウント (読み取りリージョン障害):Multi-region accounts with a single-write region (read region outage):

    • これらのアカウントでは、読み取りリージョンの障害発生時に読み取りおよび書き込みの高可用性が維持されます。During a read region outage, these accounts will remain highly available for reads and writes.
    • 影響を受けたリージョンは自動的に書き込みリージョンから切断され、オフラインとしてマークされます。The impacted region is automatically disconnected from the write region and will be marked offline. Azure Cosmos DB SDK は、読み取り呼び出しを、優先リージョンの一覧にある次の使用可能なリージョンにリダイレクトします。The Azure Cosmos DB SDKs will redirect read calls to the next available region in the preferred region list.
    • 優先リージョンの一覧にあるいずれのリージョンも使用可能でない場合、呼び出しは自動的に現在の書き込みリージョンに戻ります。If none of the regions in the preferred region list is available, calls automatically fall back to the current write region.
    • 読み取りリージョン障害を処理するアプリケーション コードは、変更する必要はありません。No changes are required in your application code to handle read region outage. 最終的に、影響を受けたリージョンがオンラインに戻ったとき、以前影響を受けた読み取りリージョンは現在の書き込みリージョンと自動的に同期され、読み取り要求に再び対応できるようになります。Eventually, when the impacted region is back online, the previously impacted read region will automatically sync with the current write region and will be available again to serve read requests.
    • それ以降の読み取りは、アプリケーション コードを変更しなくても、回復したリージョンにリダイレクトされます。Subsequent reads are redirected to the recovered region without requiring any changes to your application code. フェールオーバー中も、以前に障害が発生したリージョンの再参加中も、読み取り一貫性の保証は引き続き Cosmos DB によって遵守されます。During both failover and rejoining of a previously failed region, read consistency guarantees continue to be honored by Cosmos DB.
  • 単一リージョンのアカウントは、リージョンの障害の後で可用性を失う場合があります。Single-region accounts may lose availability following a regional outage. 常に高可用性を確認するために、Cosmos アカウントで少なくとも 2 つのリージョン (可能であれば、少なくとも 2 つの書き込みリージョン) を設定することを常にお勧めします。It's always recommended to set up at least two regions (preferably, at least two write regions) with your Cosmos account to ensure high availability at all times.

  • Azure リージョンが永久に回復不可能になるという、まれで不運な状況でも、複数リージョン Cosmos アカウントが [厳密] の既定の整合性レベルで構成されていれば、データ損失は発生しません。Even in a rare and unfortunate event when the Azure region is permanently irrecoverable, there is no data loss if your multi-region Cosmos account is configured with the default consistency level of Strong. 永久に回復不可能な書き込みリージョンが発生した場合、有界整合性制約の整合性で構成された複数リージョン Cosmos アカウントでは、潜在的なデータ損失期間は整合性制約期間 (K または T) に制限されます。セッション、一貫性のあるプレフィックス、最終的整合性の各レベルの場合、潜在的なデータ損失期間は最大 5 秒に制限されます。In the event of a permanently irrecoverable write region, for the multi-region Cosmos accounts configured with bounded-staleness consistency, the potential data loss window is restricted to the staleness window (K or T); for session, consistent-prefix and eventual consistency levels, the potential data loss window is restricted to a maximum of five seconds.

可用性ゾーンのサポートAvailability Zone support

Azure Cosmos DB は、リージョンの障害発生時に、高可用性と回復性を提供する、グローバルに分散されたマルチマスター データベース サービスです。Azure Cosmos DB is a globally distributed, multi-master database service that provides high availability and resiliency during regional outages. リージョン間の回復性に加えて、Azure Cosmos データベースに関連付けるリージョンを選択するときに、ゾーンの冗長性を有効にできるようになりました。In addition to cross region resiliency, you can now enable zone redundancy when selecting a region to associate with your Azure Cosmos database.

可用性ゾーンのサポートにより、Azure Cosmos DB では、特定のリージョン内でレプリカが複数のゾーンに配置され、ゾーンの障害発生時に、高可用性と回復性を提供することが保証されます。With Availability Zone support, Azure Cosmos DB will ensure replicas are placed across multiple zones within a given region to provide high availability and resiliency during zonal failures. この構成で待機時間とその他の SLA の変更はありません。There are no changes to latency and other SLAs in this configuration. 単一のゾーンの障害の発生時に、ゾーンの冗長性により、RPO = 0 で完全なデータの持続性を提供し、RTO = 0 で可用性を提供します。In the event of a single zone failure, zone redundancy provides full data durability with RPO=0 and availability with RTO=0.

ゾーンの冗長性は、マルチ マスター レプリケーション機能の補足機能です。Zone redundancy is a supplemental capability to the multi-master replication feature. リージョンの回復性を実現するために、ゾーンの冗長性だけに依存することはできません。Zone redundancy alone cannot be relied upon to achieve regional resiliency. たとえば、リージョンの障害またはリージョン全体への低待機時間アクセスの発生時には、ゾーン冗長性だけでなく、複数の書き込みリージョンを使用することをお勧めします。For example, in the event of regional outages or low latency access across the regions, it’s advised to have multiple write regions in addition to zone redundancy.

Azure Cosmos アカウントに複数リージョンの書き込みを構成すると、追加のコストを必要とせずに、ゾーン冗長性を実現できます。When configuring multi-region writes for your Azure Cosmos account, you can opt into zone redundancy at no extra cost. それ以外の場合、ゾーン冗長性のサポートの料金に関する後述の注意事項を参照してください。Otherwise, please see the note below regarding the pricing for zone redundancy support. リージョンを削除し、ゾーン冗長性を有効にしてそれを戻すことによって、Azure Cosmos アカウントの既存のリージョンでゾーン冗長性を有効にできます。You can enable zone redundancy on an existing region of your Azure Cosmos account by removing the region and adding it back with the zone redundancy enabled.

この機能は、次の Azure リージョンで使用できます。This feature is available in following Azure regions:

  • 英国南部UK South
  • 東南アジアSoutheast Asia
  • East USEast US
  • 米国東部 2East US 2
  • 米国中部Central US
  • 西ヨーロッパWest Europe
  • 米国西部 2West US 2

注意

1 つのリージョンの Azure Cosmos アカウントに対して可用性ゾーンを有効にすると、アカウントにリージョンを追加することと同等の課金が発生します。Enabling Availability Zones for a single region Azure Cosmos account will result in charges that are equivalent to adding an additional region to your account. 価格の詳細については、価格のページAzure Cosmos DB における複数リージョンのコストに関する記事を参照してください。For details on pricing, see the pricing page and the multi-region cost in Azure Cosmos DB articles.

次の表に、さまざまなアカウント構成の高可用性機能をまとめています。The following table summarizes the high availability capability of various account configurations:

KPIKPI 可用性ゾーンがない単一リージョン (非 AZ)Single region without Availability Zones (Non-AZ) 可用性ゾーンがある単一リージョン (AZ)Single region with Availability Zones (AZ) 可用性ゾーンがある複数リージョン書き込み (AZ、2 リージョン) - 最も推奨される設定Multi-region writes with Availability Zones (AZ, 2 regions) – Most recommended setting
書き込み可用性 SLAWrite availability SLA 99.99%99.99% 99.99%99.99% 99.999%99.999%
読み取り可用性 SLARead availability SLA 99.99%99.99% 99.99%99.99% 99.999%99.999%
料金Price 単一リージョン課金レートSingle region billing rate 単一リージョンの可用性ゾーンの課金レートSingle region Availability Zone billing rate 複数リージョン課金レートMulti-region billing rate
ゾーンの障害 – データ損失Zone failures – data loss データ損失Data loss データ損失なしNo data loss データ損失なしNo data loss
ゾーンの障害 - 可用性Zone failures – availability 可用性の損失Availability loss 可用性の損失なしNo availability loss 可用性の損失なしNo availability loss
読み取り待機時間Read latency リージョン間Cross region リージョン間Cross region Low
書き込み待機時間Write latency リージョン間Cross region リージョン間Cross region Low
リージョンの障害 - データ損失Regional outage – data loss データ損失Data loss データ損失Data loss データ損失Data loss

マルチ マスターと複数のリージョンで有界整合性制約の一貫性を使用すると、データの損失は、アカウントに構成された有界整合性制約に制限されます。When using bounded staleness consistency with multi master and more than one region, data loss is limited to the bounded staleness configured on your account.

複数のリージョンで強力な一貫性を構成することで、リージョンの障害発生時のデータの損失を回避できます。Data loss during regional outage can be avoided by configuring strong consistency with multiple regions. このオプションには、可用性とパフォーマンスに影響を与えるトレードオフが伴います。This option comes with tradeoffs that impact availability and performance.
リージョンの障害 - 可用性Regional outage –availability 可用性の損失Availability loss 可用性の損失Availability loss 可用性の損失なしNo availability loss
スループットThroughput X RU/秒 プロビジョニング スループットX RU/s provisioned throughput X RU/秒 プロビジョニング スループットX RU/s provisioned throughput 2X RU/秒 プロビジョニング スループット2X RU/s provisioned throughput

この構成モードでは、2 つのリージョンがあるため、可用性ゾーンがある単一のリージョンと比較した場合に、2 倍のスループットの量が必要です。This configuration mode requires twice the amount of throughput when compared to a single region with Availability Zones because there are two regions.

注意

複数のリージョン Azure Cosmos アカウントに対して可用性ゾーンのサポートを有効にするには、アカウントでマルチマスター書き込みを有効にする必要があります。To enable Availability Zone support for a multi region Azure Cosmos account, the account must have multi-master writes enabled.

新規または既存の Azure Cosmos アカウントにリージョンを追加すると、ゾーン冗長性を有効にできます。You can enable zone redundancy when adding a region to new or existing Azure Cosmos accounts. 現在、Azure portal、PowerShell、および Azure Resource Manager テンプレートを使用した場合にのみ、ゾーン冗長性を有効にできます。Currently, you can only enable zone redundancy by using Azure portal, PowerShell and Azure Resource Manager templates. Azure Cosmos アカウントでゾーン冗長性を有効にするには、特定の場所 のisZoneRedundant フラグを true に設定する必要があります。To enable zone redundancy on your Azure Cosmos account, you should set the isZoneRedundant flag to true for a specific location. 場所プロパティ内に、このフラグを設定できます。You can set this flag within the locations property. たとえば、次の PowerShell スニペットでは、"東南アジア" リージョンのゾーン冗長性が有効になります。For example, the following powershell snippet enables zone redundancy for the "Southeast Asia" region:

$locations = @( 
    @{ "locationName"="Southeast Asia"; "failoverPriority"=0; "isZoneRedundant"= "true" }, 
    @{ "locationName"="East US"; "failoverPriority"=1 } 
) 

Azure Cosmos アカウントを作成するときに Azure portal を使用して、可用性ゾーンを有効にすることができます。You can enable Availability Zones by using Azure portal when creating an Azure Cosmos account. アカウントを作成するときは、必ず [geo 冗長性][マルチ リージョン書き込み] を有効にして、可用性ゾーンがサポートされているリージョンを選択します。When you create an account, make sure to enable the Geo-redundancy, Multi-region Writes, and choose a region where Availability Zones are supported:

Azure portal を使用して可用性ゾーンを有効にする

高可用性アプリケーションの構築Building highly available applications

  • 書き込みと読み込みの高可用性を確保するために、複数書き込みリージョンを持つ少なくとも 2 つのリージョンにまたがるように Cosmos アカウントを構成します。To ensure high write and read availability, configure your Cosmos account to span at least two regions with multiple-write regions. この構成は、SLA によって裏付けられた読み取りと書き込みの両方に対して、最も高い可用性、最も短い待ち時間、および最高のスケーラビリティを提供します。This configuration will provide the highest availability, lowest latency, and best scalability for both reads and writes backed by SLAs. 詳しくは、複数書き込みリージョンで Cosmos アカウントを構成する方法をご覧ください。To learn more, see how to configure your Cosmos account with multiple write-regions.

  • 単一書き込みリージョンで構成されている複数リー ジョンの Cosmos アカウントでは、Azure CLI または Azure portal を使用して自動フェールオーバーを有効にしますFor multi-region Cosmos accounts that are configured with a single-write region, enable automatic-failover by using Azure CLI or Azure portal. 自動フェールオーバーを有効にすると、リージョンで災害が発生するたびに Cosmos DB はアカウントを自動的にフェールオーバーします。After you enable automatic failover, whenever there is a regional disaster, Cosmos DB will automatically failover your account.

  • Cosmos アカウントの可用性が高くても、アプリケーションが高可用性を維持するよう正しく設計できていないこともあります。Even if your Cosmos account is highly available, your application may not be correctly designed to remain highly available. アプリケーションのエンド ツー エンドの高可用性をテストするには、アプリケーションのテストまたはディザスター リカバリー (DR) テストの一部として、Azure CLI または Azure Portal を使用して手動フェールオーバーを定期的に呼び出します。To test the end-to-end high availability of your application, periodically invoke the manual failover by using Azure CLI or Azure portal, as a part of your application testing or disaster-recovery (DR) drills.

  • グローバルに分散されるデータベース環境内では、リージョン全体にわたる停止が発生した場合の整合性レベルとデータ持続性の間には、直接的な関係があります。Within a globally distributed database environment, there is a direct relationship between the consistency level and data durability in the presence of a region-wide outage. ビジネス継続性計画を開発するときは、破壊的なイベントが発生してから、アプリケーションが完全に復旧するまでの最大許容時間について理解する必要があります。As you develop your business continuity plan, you need to understand the maximum acceptable time before the application fully recovers after a disruptive event. アプリケーションを完全に復旧するために必要な時間は、目標復旧時間 (RTO) と呼ばれます。The time required for an application to fully recover is known as recovery time objective (RTO). さらに、破壊的なイベントの発生後、復旧中にアプリケーションが損失を許容できる新しいデータ更新の最大期間についても理解する必要があります。You also need to understand the maximum period of recent data updates the application can tolerate losing when recovering after a disruptive event. 損失を許容できる更新の期間は、目標復旧時点 (RPO) と呼ばれます。The time period of updates that you might afford to lose is known as recovery point objective (RPO). Azure Cosmos DB の RPO および RTO を表示するには、「整合性レベルとデータ持続性」を参照してください。To see the RPO and RTO for Azure Cosmos DB, see Consistency levels and data durability

次の手順Next steps

次に、次の記事を読むことができます。Next you can read the following articles: