PaaSのHA設計
ASCII羽野:まず、AzureのHAについて教えてください。
NEO:Azureのようなパブリッククラウドの場合、ハードウェア単体で見ると可用性の高くない安価なコモディティハードウェアを使っています。代わりに、データセンター内に実装されたソフトウェアが、死活監視、ソフトウェア障害時の再起動、ハードウェア障害時の正常動作しているハードウェアへの移動といった処理を実行しています。
たとえば、PaaSのAzure SQL Databaseは、デフォルトで(読み書き可能な)プライマリデータベースが1つ、(プライマリデータベースのレプリケーション先となる読み書き不可の)セカンダリデータベースが2つ以上あり、それらのセットが論理的に1つのデータベースとして見えています。
これらの論理データベースのセットはAzureの特定リージョン内に配置されており、プライマリデータベースに障害が発生した場合は、セカンダリデータベースの1つがプライマリデータベースへ昇格され、セカンダリデータベースが1つ追加されます。もともとのプライマリデータベースに接続済みだったデータベースクライアントは切断されますが、再度接続を試みると、新しいプライマリデータベースに接続できるようになります。このような処理がAzureのソフトウェア実装によって自動で実行され、HAを提供しています。
NEO:別のPaaSであるAzure App ServiceのHA設計も見てみましょう。App Serviceでは、Webアプリケーションなどを特定のAzureリージョンに配置する「App Serviceプラン」という料金プランがあります。App Serviceは基本的にステートレスなので、内部で動作するインスタンス数を増やすことで簡単にスケールアウトできます。
Azureはインスタンスの死活監視をしており、特定のインスタンスに障害が発生したら、そのインスタンスを正常なインスタンスに置き換え、手前で動作しているロードバランサーのルーティング先のインスタンス群の情報を更新します。
ASCII羽野:PaaSのAzure SQL DatabaseやAzure App Serviceは、Azureが自動でHAを提供しているのですね。ではIaaSのHAはどうでしょうか。
IaaSのVMでは「可用性セット」と「Managed Disk」でHAを高める
NEO:IaaSのVMの構成パターンには、「単一インスタンスVM」と「可用性セットに属する複数インスタンスのVM」という2通りがあります。
可用性セットは、論理的に同じ機能を提供している複数のVMをグループ化したもの。たとえば、「同じWebアプリをホストしているWebサーバーが動作している5つのVM」や、「マスター/スレーブ型レプリケーションが構成されたデータベースが動作している2つのVM」などです。
可用性セットを使っている場合、セット内のVMはそれぞれ異なる障害ドメイン(異なるサーバーラック)に配置されます。これは、サーバーラック全体にわたる障害が発生した場合に可用性セット内のすべてのVMに障害が発生しないようにする仕組みです。
ASCII羽野:可用性セットを使えば、VMのHAはOKでしょうか。
NEO:2月にGAした新サービス「Managed Disk」を使うことでよりHAを高めることができます。
VMのディスクはAzure Storageというストレージサービスに格納されています。Managed Diskを使わない場合は、Azure Storageのストレージアカウントを作成し、作成済みのストレージアカウント上のVHDファイルをディスクとして参照する形で、VMを作成していました。Azureリージョン内には複数のAzure Storageクラスター(スケールユニット)があり、ストレージアカウントは特定のStorageクラスターに配置されます。この運用では、特定のStorageクラスター全体にわたる障害が発生すると、可用性を維持できないという課題がありました。実は、3月8日に東日本リージョンで発生した障害も、特定のStorageクラスター全体にわたる障害でした。
新しいManaged Diskを使うと、ユーザーはVM作成時にストレージアカウントを作る必要がありません。Azure側が、性能、可用性を考慮して自動的にディスクを配置します。可用性セットに属しているVMの場合、VMの障害ドメインに従って、ディスクも複数のStorageクラスターに分散配置されます。
この場合、Storageクラスター全体にわたる障害が発生しても、可用性セット内のすべてのVMのディスクに障害がおよぶことがないので、より可用性の高い構成になります。高可用性の求められるシステムでは、可用性セットとManaged Diskを使うことで、Azureリージョン内のHAを高めることができます。
ASCII羽野:3月にAzure国内リージョンで発生した一連の障害は、ユーザーがリージョン内のHAを高めておけばサービス停止を回避できたのでしょうか。
NEO:3月8日の東日本リージョンの障害、3月31日の2回目の東日本リージョン障害では、IaaSのVMに関しては、前述の可用性セットとManaged Diskを使っていればサービス停止はなかったはずです。内部でAzure Storageに依存しているPaaSに関しては、西日本リージョンなどの別リージョンへDRを構成していない限りサービス停止は避けられませんでした。3月28日の西日本リージョンの障害でも、DR構成が必要でした。
ASCII羽野:ではAzureのDRについて教えてください。
NEO:代表的なサービスとしてAzure Storage、Azure SQL Database、Azure App Serviceの3つを取り上げて、DR構成の取り方を説明しましょう。