Azure Storageのフェールオーバー
NEO:Azure Storageには、「GRS(地理冗長ストレージ)」、「RA-GRS(読み取りアクセス地理冗長ストレージ)」などいくつかの冗長化オプションがあります。
GRSでは、プライマリリージョンで3つのレプリカを持ちます。さらにペアになるセカンダリリージョン(東日本リージョンに対しては西日本リージョン、またはその逆)に非同期でレプリケーションを行い、セカンダリリージョンでも3つのレプリカを持ちます。リージョン内のレプリカへの書き込みは同期的に行われます。
リージョン間レプリケーションは非同期なので、プライマリリージョンでの更新がセカンダリリージョンにレプリケーションされるまでに遅延があります。GRSでは、15分未満の遅延を目標にしています。
GRSでは、通常時はセカンダリリージョンのストレージアカウントは読み書き不可です。Azureでは、特定のAzureリージョンのAzure Storageで大規模な障害が発生し、復旧に長時間かかると予想される場合に限り、マイクロソフトが、GRS(および後述のRA-GRS)が構成されたストレージアカウントのフェールオーバーを行います。フェールオーバーが行われた後は、セカンダリリージョン上のストレージアカウントが読み書き可能になります。
ただし、数時間程度のAzure Storage障害では、マイクロソフトはストレージアカウントのフェールオーバーを行いません。今回、東日本リージョン、西日本リージョンで発生した一連の障害でもフェールオーバーは行っていません。ユーザーが自分でフェールオーバーを実行できる機能を実装する計画がありますが、提供時期は未定です。
一方、より上位のオプションRA-GRSは、これまで説明したGRSの機能に加えて、通常時にセカンダリリージョンのストレージアカウントに読み取り専用でアクセスできます。
GRSの場合、プライマリリージョンでのAzure Storage障害や災害がおこっても、(マイクロソフトがフェールオーバーを行わない限りは)セカンダリリージョンでできることはありません。RA-GRSの場合、システムを読み取り専用にデグレードして、セカンダリリージョンでサービスを継続することができます。
また、セカンダリリージョンでRA-GRSのストレージアカウントのデータを、セカンダリリージョンに別途作成したストレージアカウントへコピーすることで、デグレードせずにサービスを提供することもできるでしょう。この場合、障害発生後にデータをコピーするのか、通常時に定常的に更新データをコピーするようにするか、データ量や更新頻度などをもとに検討する必要があります。
ASCII羽野:Azure Storageのフェールオーバーはめったに行われないのですね。マイクロソフトの公式サイト「Azure Storageの停止が発生した場合の対処方法」では、最初の選択肢として「復旧を待つ」が推奨されています。Azureストレージサービスの障害では、基本的には復旧またはフェールオーバーを待ち、数時間のサービス停止が許容されないシステムではセカンダリリージョンでサービス継続が可能な「RA-GRS」を選択しておくとよさそうです。
Azure SQL Databaseでは「アクティブ地理レプリケーション」でDR構成に
NEO:Azure SQL DatabaseのDRでは、「アクティブ地理レプリケーション」という機能を活用できます。
前述のように、Azure SQL Databaseの論理データベースは、特定のリージョン内に配置された1つのプライマリデータベースと3つ以上のセカンダリデータベースから構成されています。
アクティブ地理レプリケーションを使うと、プライマリの論理データベースが動作しているAzureリージョンとは別のリージョンに、最大4つのセカンダリ論理データベースを作成できます(同じリージョン内に作成も可能)。
Azure Storageと異なり、Azure SQL Databaseのアクティブ地理レプリケーションでは、新たなプライマリ論理データベースの指定(フェールオーバー)は、ユーザー自身がAzureポータル、PowerShell、REST APIなどを使って行うことができます。プライマリを死活監視し、障害や災害を検知したらデータベースのフェールオーバーを行う処理をユーザーが自分で実装することで、DRを実現できます。
アクティブ地理レプリケーションのレプリケーションは非同期で、5秒未満の遅延があります。そのため、フェールオーバーの際はプライマリで障害/災害が発生した直後5秒の更新が失われる可能性があります。
ASCII羽野:Azure SQL Databaseには、もともとアクティブ地理レプリケーションというDRのメニューが用意されているのですね。最後に、Azure App ServiceのDRについて教えてください。