去年の暮れの話ですが、メンテナンスの祭にkeepalivedでフェイルオーバーがうまく機能せずに一部の自社のサービスが死に掛けるという自体に陥りました。
いくつかあるVIPをひとつのインスタンスで管理していたんですが、
その中でも特定のIPだけフェイルオーバーに失敗して疎通しなくなるといった症状でした。
ip addr show の結果ではちゃんとVIPは渡されています。
すべてのVIPがだめというわけではなく、一部だけというのもくせものでした。
新拠点にサービスを部分的に投入していく段階であったり、ケチるために思いつきでアクティブ/アクティブ構成だったり、
新しく引いた回線、試験導入して日が浅いハードウェア、少し前にスイッチ故障があり、そのせいでインターナルのサーバのARPテーブルが混乱していたりと、かなり複雑な状況でした。
長ったらしい検証を語るのもめんどくさいので結論を言うと、上位UC●Mのスイッチがkeepalivedがフェイルオーバー時にARPテーブルを更新させるために送信しているGARPを無視して、フェイルオーバーする前のmacアドレスを保持したままという現象でした。
上位スイッチはARPテーブルが変わらないので、フェイルオーバー前のmacアドレス宛に通信を試みようとしますが、
実サーバは送られてきたmacアドレスはあっていても、もうすでにVIPを持っていないのでパケットを破棄してしまいます。
そして年越しもありましたが、一ヶ月ちかく放置されているので、Linuxで無理やり仮想macを実装する方向にむかいます。