LVS-DRに適さないトポロジでUnicast Floodが発生

LVS-DRで同一セグメント内のロードバランスというよくある構成でUnicast Floodが発生しました。
同じような症状は前から出ていたんですが原因が掴めずじまいでした。今回、急遽スイッチを増設したサーバからトラフィックを流したところ、関係ないサーバのトラフィックが跳ね上がり、調べたところUnicast Floodだということがわかりました。
そのときのトラフィックです。

tcpdumpしてみたところ、ユニキャストがブロードキャストされるというわけのわからない現象でしたが、Unicast Flood自体はあるあるのようです。

原因ですが、スイッチを増やしたことと、LVS-DRによりMACアドレスを学習できなかったホスト宛のパケットを、スイッチが全ポートに送信していたせいでした。
とりあえず全ポートに送信することによって誰かが受け取ってくれるということだと思います。
たしかにグラフを見るまでは通信も正常で、まったく異常に気づきませんでした。
このまま放置していたらスイッチが負荷で発狂していたかもしれません。

復習もかねて図にしてみました。

L2くらいになるとスイッチの個性が結構でますね。
CiscoはUnicast Flooding Blockなる機能があるそうです。

LVS-DRのほかにルーティングやスパツリの設定ミスでも起こるようです。
MACアドレステーブルのタイムアウトをオフにすれば解決すると思ったんですが、Procurveは極端に長い時間に設定はできても、無期限はできませんでした。

しょうがないので、クライアント側からリアルサーバ宛にcronで定期的にpingを打って、対岸のスイッチにMACアドレスを学習させるようにしました。
根本的な解決にはなっていませんが、とりあえずしのぎの運用だったし、今はよしとしました。

ネットワークはやはりトポロジが肝だということが改めてわかりました。
超常現象も知れば納得ですね。