Skip to content

VIP Response Inconsistency in DSR Architecture with Follow-Port Configuration

  1. override-port が使えない環境で、port 80 でヘルスチェックするためには follow-port が必要
    • 監視対象の仮想ポート(例:VIP の vport 80)の サービスポートに追従させる設定(=follow-port)。
    • 任意の別ポートに強制する override-port が使えないなら、サービスと同じ 80 番でチェックするように follow-port を使う。
  2. follow-port を使うには、follow-port 先の port 定義が必要
    • 追従対象となる vport(例:VIP:80)や、サーバ側の service port(80)が オブジェクトとして定義済みであることが前提。
  3. DSR 環境では、server port にヘルスチェックを定義しただけでは lo チェックが働かない
    • DSR は 返信経路がサーバから直接クライアントへ戻るため、サーバ側に VIP を受けるための lo0(ループバック)に VIP アドレスを持たせるなどの内在条件が必要。
    • 単にアプリ(HTTP)応答があるだけでは、DSR としての可用条件(lo0 への VIP 設定・ ARP/ルーティング抑止 等)を満たしているかは判定できない。
  4. VIP に vport 80 が必要
    • 当然ながら、クライアントが TCP/80 で到達するための **仮想サーバ(VIP:80)**が正しく存在し、follow-port の対象ともなる。

実際の挙動(問題となるケース)

Section titled “実際の挙動(問題となるケース)”
  • サーバに lo0 が付いていなくても status.html が読めればサービスインしてしまう
  • lo0 にアドレスが設定されている・いないにかかわらずサーバは Up 状態でサービスイン状態
  • VIP にサービスインしてしまうが、lo0 が付いていないので、VIP に対するリクエストには応答しないため事故

つまり

  • ヘルスチェックが アプリ層(HTTP/80)だけを見て Up にしてしまう。
  • DSR に必要な ループバック設定(lo0 に VIP or 受け付け用アドレス) がないため、実トラフィックは 戻り応答不可/ブラックホールになり、VIP 的にはサービスイン済みなのに応答しないという 不一致が発生。
slb server server01 10.10.10.11
port 80 tcp
health-check http-get-status
conn-limit 20000
port 443 tcp
health-check follow-port 80 tcp
conn-limit 20000
!
slb server server02 10.10.10.12
port 80 tcp
health-check http-get-status
conn-limit 20000
port 443 tcp
health-check follow-port 80 tcp
conn-limit 20000
!
slb service-group vip01-443 tcp
member server01:443
member server02:443
!
slb virtual-server vip01 10.10.10.13
ha-group 1
port 443 tcp
service-group vip01-443
no-dest-nat
ha-conn-mirror
!