httpdの瞬断を許容する

(12/13追記)
全然ダメだった…

Apacheのlogrotate時の再起動でWeightを0にされても困るので(メールがバンバン飛ぶのも困る)、MISC_CHECKで瞬断を許容するようにしてみる。

  • keepalivedのバージョンを1.1.19にする
    • 1.1.18にはMISC_CHECKでreloadするとバランサから外されるという恐ろしいバグがある
    • 結構クリティカルなバグだと思うんだけど、1.1.18で混入したのかなぁ?
    • あと、1.1.19のkeepalived.specは、バージョンが1.1.18になっているので直した方がよいと思います
  • てきとーなチェックスクリプトを用意する
#!/bin/sh
URL=$1
WGET=/usr/bin/wget

RETRY=3
TIMEOUT=3
WAIT=3

function check {
  $WGET --spider -T $TIMEOUT -O - "$URL"

  if [ $? -eq 0 ]; then
    exit 0
  fi
}

for i in `seq $RETRY`; do
  check
  sleep $WAIT
done

exit 1
  • MISC_CHECKを設定
  real_server  192.168.10.12 80 {
    weight 1
    inhibit_on_failure
    MISC_CHECK {
      misc_path "/usr/local/bin/keepalived_check_http http://192.168.10.12/test.html"
      misc_timeout 25
    }
    • いったんバランサから外れたら30秒復帰しないけど、瞬断で外される方が怖いし…
    • misc_timeoutは ( wgetのtimeout 3s + sleep 3s ) * 3回 = 18s、残りはバッファ

rb_get_retryは直さないのかなー

追記

別にスクリプト作る必要なかった 間違い

wget --spider -t 3 -T 3 -O - http://192.168.10.12/test.html