ロードバランサーが故障したらどうすんねん(冗長化)
問題提起
ロードバランサーの役割は、複数のサーバーにリクエストを振り分けることである。一部のサーバーに負荷が偏らないようにする必要があるし、故障したサーバーがあればそれ以外のサーバーにリクエストを振るようにする必要もある。このように、ロードバランサーを使用することによって冗長化されたシステムを構成することができる。ロードバランサー最強!
いや、ロードバランサーが故障したらどうすんねん。
ということで、ロードバランサー自体の故障に備える方法を調べてみた。なお、実装までやってみたわけではないので誤りはあるかもしれない。
対策
対策1 クラウド上のロードバランサーを使用する
クラウド上のロードバランサーなら、クラウド事業者が「良い感じ」に冗長化してくれている。クラウド最強!
対策2 ロードバランサーを複数利用する
オンプレの場合はこっち。普通にロードバランサーを複数台稼働させて冗長化を図る。
対策2-1 VRRP (Virtual Router Redundancy Protocol)
単一のグローバルIPアドレスを使いつつ冗長化する方法。VRRPはルーターを冗長化するためのプロトコルだが、ロードバランサーの冗長化にも使えるらしい。複数のロードバランサーが「稼働系(働いてるやつ)」「待機系(補欠として待機してるやつ)」に分かれる。特徴として、複数のロードバランサーが1つのグローバルIPアドレスを共有するので、DNSサーバーやクライアントから見れば1つのロードバランサーに見える。
対策2-2 DNSサーバーに複数のロードバランサーのIPアドレスを複数登録しておく
こちらは複数のロードバランサーにそれぞれ異なるグローバルIPアドレスを付与して冗長化をする方法。DNSサーバーにIPアドレスを複数登録しておけば、名前解決の際、DNSサーバーは該当するIPアドレスの一覧を返す。クライアントとしては、1つのIPアドレスにリクエストを送って失敗しても、別のIPアドレスにリクエストを送信すればよい。
基本的には「名前解決の際、故障したロードバランサーのIPアドレスは返さないようにする」的な機能は無い。
Discussion