Я хочу настроить кластер (из двух систем) с VIP, как это делает keepalived. В другом контексте, у меня уже есть keepalived, который хорошо работает. Однако наша сетевая команда сказала мне не вводить никаких новых MAC-адресов VRRP, поскольку это может конфликтовать с некоторыми из их собственных конфигураций VRRP.
Я также не хочу добавлять обратный прокси для этой цели. Наличие единой точки отказа, подобной этой, уничтожит цель создания VIP в первую очередь.
Есть ли способ настроить keepalived на использование конструкций уровня 3 или другой инструмент, который делал бы то же самое, не спускаясь на уровень 2?
Я понимаю, что одной из причин виртуального MAC-адреса является разрешение ARP. Кратковременные перебои в работе из-за смены MAC-адресов были бы нежелательны, но допустимы в моем сценарии.
Примеры ниже предполагают IPv4, с конфигурацией, подобной базовому примеру Red Hat здесь: узел с адресом 192.168.122.101/24, другой с адресом 192.168.122.102/24, используя VRRP instance VI_1 и VRRP VIP 192.168.122.200/24.
Это уже не будет соответствовать VRRP, потому что RFC 5798 говорит об использовании MAC-адреса VRRP в ответах ARP.
В любом случае, вы можете настроить keepalived, чтобы соответствовать политике, установленной вашей сетевой командой.
не используйте опцию use_vmac
в конфигурации экземпляра VRRP
чтобы предотвратить использование source Virtual Router MAC адресов типа 00:00:5E:00:01:XX.
можно просто удалить опцию use_vmac
,
Клиенты не будут иметь больших проблем после failover, потому что каждый раз, когда узел keepalived становится master для VRRP адреса, он начинает с объявления своего (VIP) адреса с помощью 5 DAD ARP запросов для беспричинных ARP запросов (pacemaker/corosync ведет себя так же в этом отношении), и сделает это снова 10s позже. Захват объявления изменится, например, с:
00:00:5e:00:01:33 > ff:ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), длина 42: Request who-has 192.168.122.200 (ff:ff:ff:ff:ff:ff:ff) tell 192.168.122.200, длина 28
to:
56:24:20:bf:2a:37 > ff:ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 192.168.122.200 (ff:ff:ff:ff:ff:ff:ff:ff) tell 192.168.122.200, length 28
Таким образом, вместо того, чтобы коммутатор(ы) заметил(и), что другой порт должен использоваться для достижения того же MAC адреса и обновил(и) свою базу данных пересылки, IPv4 клиенты заметят, что другой MAC адрес должен использоваться для достижения того же IPv4 адреса и обновят свои ARP таблицы.
или, если это действительно необходимо, замените его на use_ipvlan
(ценой двух дополнительных IPv4-адресов!),
для того же эффекта (и точно такого же перехвата по проводу, как в последнем примере выше).
Это может понадобиться только в том случае, если конфигурация кластера опирается на дополнительный виртуальный интерфейс, созданный keepalived на каждом узле, и необходимо избежать тщательной реконфигурации. Интерфейс ipvlan ведет себя так же, как интерфейс macvlan, за исключением того, что он будет использовать MAC-адрес из своего родительского интерфейса (и внутренне обрабатывает, как IP-пакеты должны быть мультиплексированы на нужный интерфейс).
На IPv4 эта опция требует использования дополнительного IPv4 адреса на ней. Этот адрес не должен быть адресом VRRP и не должен быть IP-адресом родительского интерфейса (иначе могут возникнуть проблемы с маршрутизацией), поэтому если он находится на том же интерфейсе/LAN, что и конфигурация сети системы, кластеру из 2 узлов теперь, вероятно, потребуется 5 адресов вместо 3: два исходных адреса, определенных системой, 2 дополнительных ipvlan адреса и адрес VRRP.
Например, один сервер будет использовать в дополнение к своему оригинальному адресу 192.168.122.101, настроенному системой:
use_ipvlan vip0 192.168.122.103
а другой в дополнение к своему 192.168.122.102:
use_ipvlan vip0 192.168.122.104
Я бы избегал этого варианта, если бы у меня был выбор.
использовать unicast_peer
блок
для предотвращения использования IPv4 VRRP многоадресного адреса 224.0.0.18 и соответствующего destination VRRP MAC многоадресного адреса 01:00:5E:00:00:12.
Это также требует отключения strict_mode
, если он установлен (или если vrrp_strict
установлен в блоке global_defs
), и не поддерживает use_ipvlan
, описанный выше (ни use_vmac
). check_unicast_src
также может быть включен для защиты от ошибки конфигурации третьей системы, а не для какой-либо безопасности.
Например, узел с адресом 192.168.122.101 может использовать:
vrrp_instance VI_1 {
...
strict_mode off
check_unicast_src
unicast_peer {
192.168.122.102
}
}
и узел с 192.168.200.102:
vrrp_instance VI_1 {
...
strict_mode off
check_unicast_src
unicast_peer {
192.168.122.101
}
}
Когда это сделано, только одноадресный трафик будет использоваться keepalived.
Обратите внимание, что удаление strict_mode
может изменить поведение брандмауэра, выполняемое keepalived.