web-dev-qa-db-ja.com

ハートビートフェイルオーバーが発生した後にarpが失敗する

私はLVSベースのロードバランサーを持っていますが、これは問題なく機能しています。ハートビートを使用して2台のサーバーで実行され、フェイルオーバーを提供します。

システムに2番目のIP範囲のサポートを追加しましたが、フェイルオーバーが発生すると、引き継ぐサーバーは、その範囲のルートを削除して再度追加するまで、この2番目の範囲のIPをARPできません。

フェイルオーバー直後にアクティブなロードバランサーに表示される内容の詳細は次のとおりです。

# arp 

foo1.example.com  ether   00:20:ED:1A:0C:82   C                     eth0
foo2.example.com  ether   00:1E:C9:B0:F6:FE   C                     eth0
bar1.example.com          (incomplete)                              eth0

# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
2.2.2.128  *               255.255.255.192 U     0      0        0 eth0
1.1.1.0   *               255.255.255.0   U     0      0        0 eth0
default         1.1.1.1   0.0.0.0         UG    100    0        0 eth0

そのため、2.2.2。*ネットブロックにあるbar1.example.comをARPすることはできません。

私が見つけたのは、ネットブロックのルートを削除して追加すると問題が解決するということです

ip route del 2.2.2.128/26 dev eth0
ip route add 2.2.2.128/26 dev eth0

Bar1.example.comにpingを実行してARPルックアップをトリガーすると、ARPキャッシュに次のように表示されます。

bar1.example.com  ether   00:22:19:51:71:E4   C                     eth0

ここで何が起こっているのか、またはハートビートデーモンにこのルートの削除とテイクオーバーの実行時に再追加を実行させる方法を知っている人はいますか?

1
Paul Dixon

スイッチが古いARPマッピングを長時間保持し続けることがあります。 Linuxで「arping-U」を使用して、アップストリームスイッチにキャッシュをフラッシュするように指示する必要がありました。

2
Tim Howland

IPをリソースとしてどのように指定していますか? IPAddrリソーススクリプトを使用していますか?フェイルオーバー時にARPを再ブロードキャストしない場合、以前にVIPと通信していた機器は、ARPテーブルに古い物理アドレスを持ちます。

0
Warner