GARPを無視するスイッチ

去年の暮れの話ですが、メンテナンスの祭にkeepalivedでフェイルオーバーがうまく機能せずに一部の自社のサービスが死に掛けるという自体に陥りました。

いくつかあるVIPをひとつのインスタンスで管理していたんですが、
その中でも特定のIPだけフェイルオーバーに失敗して疎通しなくなるといった症状でした。
ip addr show の結果ではちゃんとVIPは渡されています。

すべてのVIPがだめというわけではなく、一部だけというのもくせものでした。

新拠点にサービスを部分的に投入していく段階であったり、ケチるために思いつきでアクティブ/アクティブ構成だったり、
新しく引いた回線、試験導入して日が浅いハードウェア、少し前にスイッチ故障があり、そのせいでインターナルのサーバのARPテーブルが混乱していたりと、かなり複雑な状況でした。

長ったらしい検証を語るのもめんどくさいので結論を言うと、上位UC●Mのスイッチがkeepalivedがフェイルオーバー時にARPテーブルを更新させるために送信しているGARPを無視して、フェイルオーバーする前のmacアドレスを保持したままという現象でした。

上位スイッチはARPテーブルが変わらないので、フェイルオーバー前のmacアドレス宛に通信を試みようとしますが、
実サーバは送られてきたmacアドレスはあっていても、もうすでにVIPを持っていないのでパケットを破棄してしまいます。

そして年越しもありましたが、一ヶ月ちかく放置されているので、Linuxで無理やり仮想macを実装する方向にむかいます。

コメントを残す

メールアドレスが公開されることはありません。


*