うまいぼうぶろぐ

linuxとhttpdとperlのメモ

arpingを使ってlinux serverからGARPを投げる

bonding構成の場合、NIC障害時にホストOS自身のbonding interface(bond0: eth0 or eth1) のIPについては自分でGARPを投げるのですぐ切り替わる。

だけど、libvirt(kvm)でネットワークをブリッジ接続している仮想ゲストOSをmigrationさせる、もしくはbondingしているホストOSのNICが切れて切り替わると、SWのarpテーブルが更新されないままmigrationが終わっても通信が出来ない。(ブリッジじゃなくてもそうなるかな)

というわけでゲストOS上からGARP投げてarp テーブルを強制的に更新させれたらいいんじゃねと思ってman arping 見てたらどうやら出来そうだ。

debianのpackageは"arping"ではなくて"iputils-arping"のarping バイナリじゃないとGARPのoptionがないのでそっち入れる。

# apt-get install iputils-arping
  • garp
$ arping -A "GARPで通知したい自分のアドレス" 

cronでゲストOS上から定期的に投げるとかしといたほうがいいのかな。-c 1 とかつけて。

追記

migration時にlibvirt(kvm)がarp更新してくれないのはbugで、最新版では治ってるという噂。

さらに追記

qemu sends gratuitous ARP after migration. Check forward delay setting on your bridge interface. It should be set to zero.

live migration後にGARP投げるで、って仰ってる。bridge interfaceの設定、ifcfg-br0 などに

DELAY=0

を設定しといたらいいらしい。