2.6 Web アプリケーションシステムの構築例
ここでは、Web/App サーバーと DB サーバーの 2 台から成る簡易的な Web アプリケーションシステムをクラウド上に構築する例を考えます。複数のアベイラビリティゾーンを用いたアクティブ-スタンバイ型の構成により、障害対策についても考慮した設計を行ないます。
2.6.1 複数アベイラビリティゾーンによる冗長構成
複数のアベイラビリティゾーンを利用する際は、仮想ネットワークとの関係を正しく理解する必要があります。この部分は、AWS と OpenStack で考え方が異なるので注意が必要です。
まず、AWS の場合は、リージョン内に複数の VPC を用意すると、VPC ごとに独立した仮想ネットワークが構成されます。この際、仮想ネットワークの内部では、アベイラビリティゾーンごとに仮想スイッチ(サブネット)を用意する必要があります。
たとえば、「AZ-1」と「AZ-2」の 2 つのアベイラビリティゾーンを利用する場合、図2.22 のような構成になります。各アベイラビリティゾーンには、用途ごとにネットワークを分離するため、「DMZ」「Web-DB」「Admin」の 3 種類の仮想スイッチ(サブネット)が用意されています。
Web アプリケーションの利用者は、「DMZ」を経由して Web/App サーバーにアクセスし、Web/App サーバーは、「Web-DB」を経由して DB サーバーにアクセスします。また、システム管理者がそれぞれのサーバーにログインする際は、いったん管理用サーバーにログインした後、「Admin」を経由して各サーバーにログインします。それぞれの仮想マシンインスタンスには、上記のアクセスのみが許可されるようにセキュリティグループを適用します。
「AZ-1」と「AZ-2」には同じ構成のシステムが用意されており、普段は「AZ-1」のシステムを利用します。「AZ-1」全体が停止するような障害が発生した場合、利用者には、アクセス先を「AZ-2」のシステムに切り替えてもらいます。DNS の登録を変更して、これまでと同じ URL で「AZ-2」のシステムを利用することも可能です。また、このような機能をロードバランサーを使って実装することも可能です。
一方、OpenStack の場合、仮想ネットワークは、複数のアベイラビリティゾーンにまたがって用意されるので、図 2.23 のような構成になります。「AZ-1」と「AZ-2」で同じ仮想スイッチを共有しています。
この場合も、それぞれのアベイラビリティゾーンで同じ構成のシステムが用意されている点は変わりませんが、「AZ-1」から「AZ-2」に利用システムを切り替える際は、フローティング IP の付け替えで対応することができます。
外部から接続する必要のある Web/App サーバーには、フローティング IP が付与されていますが、普段は、「AZ-1」の Web/App サーバーのみにフローティング IP を付与しておきます。そして、利用システムを「AZ-2」に切り替える際は、「AZ-1」の Web/App サーバーに付与していたフローティング IP を「AZ-2」の Web/App サーバーに付け替えます(図2.24)。これにより、外部からは同じ IP アドレスのままで、利用するシステムが「AZ1」から「AZ-2」に切り替わることになります。
2.6.2 仮想ストレージによるデータ保護
DB サーバーが保存するデータのバックアップについて考えます。まず、DB サーバーの仮想マシンインスタンスが障害停止した場合でもデータが消失しないよう、仮想ストレージのボリュームを接続して、ここにデータベースの内容を保存するようにします。また、ボリュームそのものが破損した場合、あるいは、データベースの操作ミスでデータを破壊した場合に備えて、ボリュームの内容をオブジェクトストレージに定期的にバックアップします。
ただし、ボリュームのバックアップは、オブジェクトストレージに対して物理的にデータを転送するため、ボリュームの容量によっては長時間かかることがあります。バックアップ中は、ボリュームを仮想マシンインスタンスから取り外しておく必要があるため、この間、データベースは利用できなくなってしまいます。
データベースの利用をすぐに再開したい場合は、一度、スナップショットを作成して、スナップショットから複製したボリュームに対してバックアップを実施すると良いでしょう(図2.25)。スナップショットを作成する際はボリュームを仮想マシンインスタンスから取り外す必要がありますが、スナップショットの取得は短時間で完了するので、すぐにボリュームの利用を再開することができます。
この他には、仮想マシンインスタンスにバックアップ保存用のボリュームを追加で接続しておき、データベースソフトウェアの機能でバックアップファイルをそちらに出力するという運用方法もあります。そのうえでさらに、バックアップ保存用のボリュームをオブジェクトストレージにバックアップしておきます。
また、使用するシステムを「AZ-1」から「AZ-2」に切り替える際は、「AZ-2」のデータベースに最新のデータをリストアする必要があります。仮想マシンインスタンスと同様に、仮想ストレージのボリュームもアベイラビリティゾーンごとに分かれて存在するので、「AZ-1」で使用していたボリュームを「AZ-2」の仮想マシンインスタンスに接続することはできません[※9]。オブジェクトストレージに保存した最新のバックアップを「AZ-2」に用意したボリュームにリストアして、「AZ-2」の DB サーバーに接続して利用します。最近のデータベースは、複数の DB サーバー間でネットワーク経由でデータを同期する仕組みを持っているので、このような機能を利用して、各アベイラビリティゾーンでデータベースの内容を常に同一に保つという方法もあります(図 2.26)。
※9 2.1.3 項で説明したように、OpenStack の場合は、異なるアベイラビリティゾーンのボリュームと仮想マシンインスタンスの接続が許可される構成を取りえます。ただし、すべての環境で利用できるわけではありません。