F5 BIG-IPでノードが死んだときにsorryサーバにiruleで飛ばす

メーカー製品

httpのプロファイルでsorryに飛ばす方法はあるけど、いろんなサーバで使いまわしてるプロファイルなのでiruleでできないか試してみた。設定は簡単で、後述のiruleファイルをVirtualServerに適用するだけ。

設定の前に

  • 要件
    • どのサーバへのアクセスに対しても、接続不可の際に同じsorryコンテンツを表示
    • sorryコンテンツを表示した際にURLは元のサーバ表記のまま
  • 補足
    • sorryサーバ側で表示するコンテンツは同じものという前提があったので、sorryサーバのvirtualhostは一つでいい。(というか数百URLへの対応なので、これ以外嫌って拒否った)
    • 顧客のURL表示を変えたくなかったため、リダイレクトではなく別のpoolへ飛ばすという手法を選んだ。よってsorryサーバが同一のBIG-IP配下内にいない場合はこの手法は使えない

iruleの内容

when HTTP_REQUEST {
  if {[active_members [LB::server pool]] < 1 } {
    pool sorry.piteki.com-http
  }
}

赤字の部分に飛ばし先であるsorryサーバ用のpool名を記載

終わりに

今回この設定をしててオモシロイこと(?)に気づいた。VirtualServerは割り当ててるPoolのメンバーが全て死んだとき、「Offline」(赤色のひし形)になるが、iruleの中で参照しているpoolが生きている場合には「Offiline」にはならず、「Available」(緑色のマル)のままだった。ぱっと見でステータス状態がVirtualServerではわからないので、この仕様はどうなのかなーっていう気はしたが、まぁ考えても仕方ない。仕様なのだから。

コメント