Предположим, у меня есть два маршрутизатора, настроенных в конфигурации главный / подчиненный.
Они выглядят примерно так (адреса не настоящие)
123.123.123.10 <===> [eth0] Router 1 (10.1.1.2) [eth1] ===> +----------+
| 10.1.1.1 | ===> LAN
172.123.123.10 <===> [eth0] Router 2 (10.1.1.3) [eth1] ===> +----------+
10.1.1.1 - это маршрут по умолчанию для сети (10.1.1.0). Что немного отличается в этой конфигурации от других, которые я видел, так это то, что у меня нет внешнего виртуального IP-адреса. Кроме того, адреса 10.1.1.1 в действительности являются общедоступными IP (здесь не показаны частные). Это скорее настройка маршрутизатора, чем настройка брандмауэра, поэтому я здесь не использую NAT.
Теперь проблема, с которой я столкнулся, заключается в том, что я не вижу способа настроить UCARP или VRRP для мониторинга как eth0, так и eth1 и переключения на резервный маршрутизатор, если любой из них выйдет из строя. Я вижу, что если Router1 является ведущим и я отключу eth0 от router1, он не переключится на маршрутизатор 2. Однако это произойдет, если вместо этого я отключу eth1 от маршрутизатора 1.
Я вижу, что в VRRP есть группа кластеров, но кажется, что для ее работы вам нужно иметь виртуальные экземпляры ip или vrrp, а не назначенные им реальные интерфейсы.
Надеюсь, мое объяснение понятно. Как мне обойти это?
Чтобы ответить на свой вопрос. В конце концов я нашел ответ в небольшом задокументированном файле конфигурации. (Жалко, что документация keepalived настолько устарела, но продукт все еще находится в разработке и работает очень хорошо)
vrrp_instance default {
virtual_router_id 1
interface eth2
priority 50
track_interface {
eth0
eth1
}
virtual_ip_address P
10.1.1.1/24 brd 10.1.1.255 dev bond0 label bond0:vrrp
}
#... other config ...
}
Ключевым моментом здесь является track_interface. В нем говорится, что keepalived будет отслеживать состояние канала eth0 и eth1 при выборе отката. Это переведет узел в состояние отказа.