CDP:Routing-Based HAパターン

提供:AWS-CloudDesignPattern
移動: 案内, 検索
寄贈したアーキテクト

ルーティングによる接続先の透過的な切り替え

目次

解決したい課題

 複数の同機能のサーバーを用意して冗長構成を採ることは一般的だが、フェイルオーバー時の接続先の切り替えはさまざまな方法が存在する。

 同一セグメント(サブネット)のネットワーク内なら仮想IPアドレスの付け替えなどで比較的容易に実現できるが、セグメント(サブネット)、あるいはデータセンターを越えたサーバーへのフェイルオーバーでは、その方法での実現は難しくなり、他の方法を考える必要も出てくる。

 例えば、DNSを用いた名前解決での切り替えなどはよく使われる。しかし、「ダウンタイムをTTLより短くできない」、「DNSサーバーというコンポーネントが増えてしまう」などのデメリットを考慮する必要がある。

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

 セグメント(サブネット)やデータセンターを越えたサーバーへのフェイルオーバーは、クラウド環境でも同様の問題を抱える。

 しかしクラウドによっては、複数データセンターを特に意識せず扱えるものもあり、その場合はデータセンター間のフェイルオーバーの難易度は下がるはずである。

 また、クラウドが提供しているAPIでネットワークのルーティングを操作できる場合、フェイルオーバーの手段としてルーティングの切り替えも容易に利用できる。[関連ブログ 1]

実装

 仮想プライベートクラウドであるVPCは、ネットワークのルーティングを設定できる(ルートテーブル)。加えて、そのルーティングをAPIで操作することもできる。

 このAPI を利用すれば、ルーティングを切り替えることによるフェイルオーバーを容易に実現できる。

  • 冗長化したEC2(ec2-1/ec2-2)の"Source/Dest. Check" を無効にする。
    • このとき、二つのEC2 を別のAZ に配置していると、データセンターレベルの冗長化になる。(Multi-Datacenterパターン)
  • 冗長化したEC2(ec2-1/ec2-2)の宛先となる仮想IPアドレス(192.168.1.1)を決める。
  • 上記のEC2(ec2-1/ec2-2)と通信する必要があるEC2が配置されるサブネットのルーティングを調整する。
    • 192.168.1.1/32宛てのルーティングを上記のEC2(ec2-1/ec2-2) のどちらかにする。
  • 冗長化されたEC2(ec2-1/ec2-2)が192.168.1.1宛てのトラフィックを受信できるようにOS のネットワーク設定を調整する。
  • ルーティングを切り替えるスクリプトを用意し、アクティブなEC2で障害が発生したら、そのスクリプトを実行してフェイルオーバーさせる。
    • "Corosync & Pacemaker"を利用することで、障害を自動的に検知し、自動フェイルオーバーさせることも可能。[関連ブログ 2]

構造

ytmxmAAlDNow0uxQ-11578.png

利点

  • サブネット(AZ)をまたいで冗長化されたEC2のフェイルオーバー(接続先の切り替え)を行うことができる。
    • AZを分けると必然的にサブネットもわかれるので、AZをまたいだフェイルオーバーにも利用できる。
  • フェイルオーバー(接続先の切り替え)に要する時間は非常に短い。

注意点

  • "Source/Dest. Check"を無効にするのはNATとして利用するEC2に対して行うことが多く、このように利用すると誤解を招きやすい。
    • 復旧時に"Source/Dest. Check"を無効にし忘れる可能性が高くなる。
  • VPCのネットワーク範囲以外のIPアドレスを利用するため、VPC/DirectConnect経由/VPCPeeringによるVPC間通信の場合ではアクセスできない。
  • AWSのAPIを利用するので、インターネットへのアウトバウンド通信(HTTPS)が必要となる。
  • 仮想IPアドレスの管理を別途しなければならない(AWSコンソールの情報としては出てこない)。

その他

関連ブログ

  1. c9日記 の「VPCでアベイラビリティゾーン越しにプライベートIPを共有する(Source/Descチェック外し)」( http://d.hatena.ne.jp/c9katayama/20111225 )
  2. suz-lab - blog の「"Corosync & Pacemaker"で"Routing-Based HAパターン"」( http://blog.suz-lab.com/2013/02/corosync-pacemakerrouting-based-ha.html )
個人用ツール
名前空間
変種
操作
CDPメニュー
ツールボックス