CDP:Multi-Serverパターン

From AWS-CloudDesignPattern
Jump to: navigation, search
Architect

サーバの冗長化

Contents

解決したい課題

可用性を高めるためには、様々なレイヤーでの多様な方法が存在する。例えば、単一ディスクで運用しているとディスクに故障が出る可能性があるのでRAIDを構築したり、ネットワークが利用出来なくなった場合に備え、予備の回線を用意したりする。

サーバも同様に、冗長化のために複数の物理サーバを用意する手段がある。しかしながら、単にサーバを増やすだけで冗長化構成が構築できるわけではない。またサーバ機器やロードバランサーなど、冗長化に必要な機材を用意するのはかなり費用がかかるため、費用対効果を鑑みると手が出せない場合もあるだろう。

クラウドでの解決/パターンの説明

クラウド上で動作するロードバランサを用いて、複数の仮想サーバに適宜負荷を振り分けることができる。以前はロードバランサ自体が高価なアプライアンスで、購入費用や保守費用が必要であったが、クラウドではロードバランサも従量課金できる。また単一の処理性能の高いサーバから、冗長性を考慮して処理能力が少し低いサーバを複数配置する構成に切り替えるような事もクラウドでは容易に行える。

Multi-Server自体はオンプレミスや仮想化環境でも行う事は出来たが、クラウドの特性により、以前よりも格段に行いやすくなっている。従って改めてCDPの1つとして挙げる事とした。

実装

AWSクラウドにはElastic Load Balancing(ELB)というロードバランサがあり、ELBの後ろに複数台のEC2を紐づけておき、サーバへの処理要求をELBが受け付ける構成とすることで、ELBが適宜EC2に処理を振り分けてくれる。ELBにはヘルスチェック機能(EC2が正常に稼働しているかどうかを確認する機能)がついており、正常に稼働していないEC2には、処理を振り分けないようにし てくれる。従って、1つのEC2に障害が起こった場合でも、残りのEC2を使って処理を続行することができる。

AWSクラウドでは、以下の手順で容易に冗長化構成を組む事ができる。

  • EC2インスタンスを立ち上げ、環境構築を行う
  • Stampパターンを適用して、EC2インスタンスを複数起動する
  • ELBを起動し、立ち上げた複数のEC2インスタンスを紐づける
  • ヘルスチェック機能の設定を用い、EC2インスタンスのステータス確認を行う

構造

6wNg0ISJczU5Pz1m-CC059.png

利点

  • あるEC2インスタンスに障害が起きたとしても、システム全体としては無停止で稼働させることができる
  • ELBとAuto Scalingの設定により、ある一定数のサーバ(例えば、3台)を設定して、常に3台で稼働させることを行える。こうすることで、万が一、1台に障害がおきても自動的に1台追加されて常に3台を保つように設定できる。事前に適切なAMIを指定して、必要時にそのAMIから起動するようにするなどの準備が必要である。

注意点

  • ELBは安価であるが、EC2も複数必要となるため、単一構成よりもコストは上がる
  • ミドルウェア・アプリケーションレベルで共有すべきデータがある場合は注意する。例えばセッション情報は複数のEC2間で共有する必要があるため、セッションDBを使ったセッション共有や、StickeySessionを使用する必要がある。
  • 複数サーバを運用する際には常にN+1となるように気を配る。例えば、処理能力としてサーバが3台必要なシステムでは、1台落ちても良いように、4台で運用する。
  • データベースを冗長化する場合は、データの同期の問題がある。DB Replicationのパターンを参照すること。

その他

  • Multi-Serverパターンの場合は常に冗長構成を保つことで可用性を高めているが、Floating IPパターンを用いることで、障害時に対応速度を高めるという方法もある。
Personal tools
Namespaces
Variants
Actions
Navigation
Toolbox