マルチAZ構成は「止まらないWebサービス」を実現する基本ですが、実務では“どう組むか”より“どう判断するか”で差が出ます。特に重要なのは次の3点です。
・データ整合性(どこまで強く一致させるか)
・コスト(どこで跳ねるか)
・レイテンシ(AZ間通信の影響を許容できるか)
単にAZを分けるだけでは、セッション不整合やファイル不一致、想定外のコスト増といった問題が発生します。
本記事では、マルチAZのメリットに加え、「強整合 / 結果整合の考え方」と「どこで破綻しやすいか」を軸に、実務で迷いやすい設計ポイントを整理します。短時間で全体像と判断基準を掴める内容に絞っています。
マルチAZ構成にする場合の考慮ポイント

マルチAZ構成例
マルチAZ構成では、同等の機能を持ったサーバーを複数リージョンへ分散配置させることになります。サーバーが複数あることで、1台構成のときには問題にならなかったことが課題になってきます。
マルチAZ構成を組む時の最も大きな課題は「データの整合性」です。システムの特性にもよりますが、WEBサーバーなど同等の機能を持ったサービス間では同じデータを保持する必要があります。
データの整合性を確保しつつ、最適なコストで環境構築するためには、次のようなデータの整合性について考慮する必要があります。
・データベース
・セッション情報
・画像等の静的ファイル
・プログラムファイル
・ログ
以降で、各データの整合性についての考慮点を説明していきます。
セッション情報

セッション情報の保存場所
ユーザーのログイン情報など、一時的な情報をセッション情報といいます。セッション情報は、読み書き頻度が高いため、WEBサーバー内のメモリに保存されることが多くあります。
セッション情報をメモリ上に保存している場合、WEBサーバーが1台の時は問題無く動作しますが、複数台になると都合が悪い自体が発生します。ログイン時に作成されたセッション情報はログアウトまで参照され続けなければなりません。しかしながら、ログイン時と次の遷移で別のサーバー上で処理が行われた場合、セッション情報が存在せずにログイン状態が維持されない事態が発生します。
それを回避するためには大きく分けて二つの方法があります。
・ELBで振り分けサーバーの固定を行う(StickySession)
・ElastiCacheなどインメモリのデータベースを使う
画像等の静的ファイル

EFSで静的コンテンツを共有
画像などの静的コンテンツの共有方法も検討する必要があります。静的コンテンツが増えるタイミングは2つ考えられます。
・WEBサービスの利用者がアップロード
・管理者がアップロード
複数のWEBサーバー間で同じコンテンツを参照する必要があります。しかも、サービス利用者がアップロードする可能性があるので、参照だけでなく更新も同時に行えることが重要です。
AWSでは、ファイル共有サービスとして「Amazon Elastic File System(EFS)」が用意されています。EFSはEC2とNFSマウントが可能です。EFSを利用することで、WEBサーバー間で同一ファイルの参照・更新を行うことが可能です。
ただし、NFSマウントは、あまり性能が良くない。という課題があります。そのため、頻繁に読み書きが発生するファイルを保存する場合は注意が必要です。特に、プログラムファイルやログファイルはトラブルになることが多くあります。
プログラムファイル

lsyncdでプログラムを同期
プログラムをEFS上に置いた場合、アクセスが増えてくると性能の問題を引き起こすケースがあります。そのため、EFS以外の方法でファイル共有を検討する必要があります。
通常、プログラムを更新するのは管理者のみです。プログラムを更新する場合はマスタとなるサーバーを更新し、他のサーバーには自動同期させる。という運用ルールを決めることで、対応が可能です。マスタとなるサーバーで更新されたプログラムは、「lsyncd」等のミドルウェアを使い、自動的に他のWEBサーバーに反映させます。
他にも手動ですべてのWEBサーバーのコンテンツを更新する方法や、git等を使ってデプロイする方法も考えられるので、自社に合ったやり方を選択しましょう。
プログラムファイル
ログファイルの保存も検討が必要です。通常は、WEBサーバー自体に保存しておいても問題はありません。しかしながら、AutoScaling等を利用する場合は、サーバーの縮退とともにログも削除されてしまいます。それでは都合が悪い場合は、ログの保存場所も検討しましょう。
ログファイルにもよりますが、アクセスログなどは高頻度の読み書きが発生します。EFSなどに出力してしまうと、性能の問題を引き起こします。そのため、CloudWatchLogsやAmazon S3へ保存する方法がおススメです。
マルチAZにした場合のコスト
マルチAZにすることで、シングルAZと比較すると当然コストも上がってきます。ELB等要素が増えていきますが、おおむねシングルAZの2倍程度の費用感と考えておけば問題ありません。
なぜマルチAZ構成にするのか?
アベイラビリティゾーン (Availability Zone) とは、「1つの AWSリージョン内でそれぞれ切り離され、冗長的な電力源、ネットワーク、そして接続機能を備えている 1つ以上のデータセンター」のことです。マルチAZ環境をAWS登場以前に実現しようと思うと、複数のデータセンターを借り、データセンター間の専用線接続を行うなど、非常に手間とコストがかかるものでした。AWSの登場により、劇的に導入しやすくなり、次のようなメリットを享受することができます。
関連するFAQ
Q. マルチAZ構成とは何ですか?
A. 同一リージョン内の複数AZにシステムを分散配置し、1つのAZ障害時もサービス継続できるようにする構成です。
Q. 設計で一番重要なポイントは何ですか?
A. データ整合性の設計です。強整合(常に一致)にするのか、結果整合(最終的に一致)で許容するのかによって、構成・コスト・性能が大きく変わります。
Q. どこで不整合や障害が起きやすいですか?
A. 典型例は以下です。
・セッション:サーバー分散でログイン状態が消える
・ファイル:サーバー間で内容がズレる
・ログ:Auto Scalingで消失
これらは共有基盤(ElastiCache、EFS、CloudWatch等)での設計が必要です。
Q. コストはどこで増えますか?
A. 主に以下です。
・AZ間データ転送
・冗長化されたRDSやEC2
・ロードバランサ(ELB)
・EFSやNAT Gatewayなどの常時課金リソース
単純に「2倍」ではなく、データ転送とマネージドサービスで跳ねやすいのが実態です。
Q. よくある失敗パターンはありますか?
A. 代表的なものは次の通りです。
・Sticky Session前提でスケールしない
・EFSに何でも載せて性能劣化
・ログをローカル保存して消失
・整合性要件を決めずに構築して後から破綻
Q. マルチAZが向かないケースはありますか?
A. レイテンシがシビアなシステムでは、AZ間通信がボトルネックになります。その場合はシングルAZ+別戦略(バックアップやDR)を検討する方が適切です。
まとめ
ディーネットがサーバ構築する場合の、マルチAZの考慮点をご紹介しました。
マネジメントコンソールから簡単にマルチAZ構成を組むことはできますが、適材適所でサービスの使い分けが必要なことがお分かりいただけたかと思います。
お客様の要件にあった環境構築を提供しますので、お困りの場合はディーネットまでご相談ください。
