У меня есть балансировщик нагрузки на основе LVS, который работает нормально. Он работает на двух серверах, используя тактовый сигнал для переключения при отказе.
Я добавил в систему поддержку второго диапазона IP-адресов, но когда происходит аварийное переключение, сервер, который берет на себя управление, не может ARP-IP в этом втором диапазоне, пока я не удалю и не добавлю маршрут для этого диапазона.
Вот некоторые подробности того, что я вижу на активном балансировщике нагрузки сразу после отработки отказа:
# 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
поэтому я не могу ARP-адрес bar1.example.com, который будет находиться в сетевом блоке 2.2.2. *
Я обнаружил, что удаление и добавление маршрута для сетевого блока устраняет проблему.
ip route del 2.2.2.128/26 dev eth0
ip route add 2.2.2.128/26 dev eth0
Если я инициирую поиск ARP, выполнив pinging bar1.example.com, кеш ARP теперь покажет
bar1.example.com ether 00:22:19:51:71:E4 C eth0
Кто-нибудь знает, что здесь происходит, или знает, как я мог бы заставить демон сердцебиения выполнять удаление и повторное добавление этого маршрута, когда он выполняет захват?
Иногда коммутатор слишком долго сохраняет старое сопоставление ARP; Мне пришлось использовать "arping -U" под Linux, чтобы указать вышестоящему коммутатору очистить кеш.
Как вы указываете IP в качестве ресурса? Вы используете IPAddr
ресурсный скрипт? Если вы не ретранслируете ARP при аварийном переключении, оборудование, ранее разговаривавшее с VIP, будет иметь старый физический адрес в таблице ARP.