web-dev-qa-db-ja.com

keepalivedshutdown-デーモンのシャットダウン時に「notify」フックを実行しません

私はDebian(Lenny、Squeeze)の下でかなり単純なセットアップで keepalived を実行しています。これをVRRPデーモンとして使用して、いくつかの仮想IPの2つの等しいマシン間のマスターシップを決定しています。 。すべての魔法はnotify-スクリプトで発生します。

(debianのinit-scriptを使用して)デーモンを完全に停止すると、keepalivedはバックアップまたは少なくとも障害モードのためにnotify-scriptを実行しません。これは、私が疑って必要とするものです。

Rc-scriptをいくつかの望ましくない効果で「修正」することができます-notify-scriptはrc-scriptにハードコードされ、これら2つの不要な結合と、パッチを次のDebianバージョンに移植するという混乱をもたらします。私が本当に行きたい方法ではありません...

この問題のよりクリーンな解決策のヒントはありますか?

vrrp_instance FOORRP {
  virtual_router_id 42
  interface eth0
  state BACKUP
  priority 200
  nopreempt
  authentication {
    auth_type AH
    auth_pass foobar42
  }
  notify "/usr/local/bin/vrrp-state"
  virtual_ipaddress {
    127.0.0.2
  }
}

PS:「3つのnotify_」スクリプトを使用しても何も変わりません

PPS: changelog (Release 1.1.16)には、私の問題に何らかの形で適合することが記載されています(ただし、keepalivedでlvs関連のものは使用していません)が、新しいバージョンを使用しています( 1.1.20):「keepalivedシャットダウン時に実サーバーを動作させるためにnotify_downは実行されません。」

3
Michuelnik

より多くのドキュメントを掘り下げて、最終的にそれを見つけました:

notify_stop "/usr/local/bin/vrrp-state fault"

期待どおりに動作します.... X-}

5
Michuelnik

最近このような問題に直面しましたが、これらのスクリプトを実行しないのが論理的であることがわかりました。これらのスクリプトは、マスターまたはスレーブになるなどの特定のイベントの場合に実行されます。 Keepalivedプロセスは、手動で実行する場合を除き、シャットダウンしないでください。シャットダウンする正当な理由があります。 keepalivedプロセスの失敗が心配な場合(手動でシャットダウンする場合ではない)、 monit を使用できます。これは、実行中のプロセスを監視し、誰かが失敗した場合にそれらを再起動するための優れたツールです。

前述のように、keepalivedの起動スクリプトを変更するだけで、目的のスクリプトを実行できます(他のサービスを停止するなど)。これは、keepalivedコードにパッチを適用し、自分で保守し、再インストール/アップグレードするたびに必要なパッチを再度実行するよりもクリーンだと思います。

0
Khaled