vasil.german Posted November 11, 2019 (edited) · Report post Коллеги, доброго времени суток! C LB дело имею впервые. Постараюсь изложить все максимально подробно. И так, стоит задача отбалансировать нагрузку используя Debian. Для тестирования использую средства GNS3 и LB on Debian, всего одни LB и два SRV. Routes к loopback'ам, ECMP включено по умолчанию, 2 VRF's, один VLAN для группы серверов, все максимально простенько 1. Проблема номер одни - если один из backend'ов сломался это забирает 25 минут чтобы перелить все сессии на те что продолжают работать. Если удалить ARP запись "disconected сервера" на LB то все "ре-балансируется" сразу же на остальные которые живые. PS: Я подозреваю что чего то не хватает в топологии, подскажите пожалуйста, что не так. Благодарен за любую информацию. Edited November 15, 2019 by vasil.german Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Victor Tkachenko Posted November 12, 2019 · Report post @vasil.german доброго! В данном случае следует проверить время жизни arp cache и работает ли GC, удаляющие просроченные записи. Логика работы с arp cache тут стандартная, как в Debian. По настройке таймеров arp cache и порогов GC в Cumulus Linux посмотрите оригинальную статью: https://support.cumulusnetworks.com/hc/en-us/articles/202012933-Changing-ARP-timers-in-Cumulus-Linux Вообще, если предполагается балансировка нагрузки на некоторый сервис, то следует применять специализированные балансировщики, которые отслеживают состояние сервиса на нодах, например, HAProxy или Nginx. Для корректного резервирования средствами ECMP, при выходе какого-то хоста/линка из строя, соответствующие некстхопы должны удаляться. Если в вашей схеме из строя выйдет только сам сервис, то нагрузка не уйдет на другую ноду. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
h1vs2 Posted November 12, 2019 · Report post BFD спасет отца русской демократии. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vasil.german Posted November 12, 2019 (edited) · Report post @h1vs2 Я смотрел в сторону BFD но так и не добился его работы на Debian. Пожалуйста, не могли бы Вы в 2-ох словах объяснить принцип работы BFD? Судя по N/A в таблице BFD-сессия не поднялась. @Victor Tkachenko Спасибо за ответ, это сработало, но поведение VRF не совсем пока понятное для меня, попробую объяснить: Если я ifdown\ifup swp2 (порт на котором висит SRV_1 vlan40 IP address 222.222.222.3) сессии балансируются (перебегают туда - сюда), все ОК Если я ifdown swp3 (порт на котором висит SRV_2 vlan40 IP address 222.222.222.4) то на порту swp2 tcpdump видит Request'ы who-has 222.222.222.4 tell 222.222.222.1, length 28 (ровно через 5 секунд, так как `net.ipv4.neigh.vlan40.base_reachable_time_ms = 5000` Edited November 15, 2019 by vasil.german Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vasil.german Posted November 12, 2019 · Report post http://docs.frrouting.org/en/latest/bfd.html - это может помочь Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vasil.german Posted November 12, 2019 · Report post 7 hours ago, Victor Tkachenko said: Для корректного резервирования средствами ECMP, при выходе какого-то хоста/линка из строя, соответствующие некстхопы должны удаляться. Как это реализовать, подскажите пожалуйста? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Victor Tkachenko Posted November 12, 2019 · Report post 2 часа назад, vasil.german сказал: Как это реализовать, подскажите пожалуйста? Необходимо воспользоваться протоколами динамической маршрутизации, чтобы условный сервер мог передавать информацию о своих сетях и вам не приходилось вручную указывать статические маршруты. Например, почитайте про OSPF или BGP. При падении линка соседство OSPF/BGP порвется и маршрут до 172.21.114.65/32 будет удален. В текущей схеме с использованием VRF также потребуется импортировать получаемые маршруты, что лишь усложняет задачу и понимание происходящего. Рекомендую начать со схемы без VRF (все сети в дефолтной таблице), чтобы разобраться с протоколами. 6 часов назад, vasil.german сказал: Пожалуйста, не могли бы Вы в 2-ох словах объяснить принцип работы BFD? BFD проверяет связность двух заранее известных IP-адресов. События разрыва/установки сессии BFD могут быть привязаны к сессиям протоколов маршрутизации или статическим маршрутам для их своевременного удаления/восстановления. Интервал проверки может составлять десятки миллисекунд, что позволяет существенно сократить время перестроения сети, но это может приводить и к ложным сработкам. Конкретно в случае с FRR работа BFD в связке со статическими маршрутами не реализована (Feature Request). Информация по упомянутым выше протоколам и их конфигурации в Cumulus Linux есть в официально документации. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
zhenya` Posted November 12, 2019 · Report post Нормальный хелсчек нужно делать на балансере и все.. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vasil.german Posted November 13, 2019 (edited) · Report post Спасибо Edited November 15, 2019 by vasil.german Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...