antiCisco blogs


блоги по технологиям и оборудованию cisco от инструкторов

Опубликовано 10 Январь , 2011

В связи с тем, что в последнее время несколько раз приходилось настраивать, решил описать свой опыт. У вьятты есть механизм, родственный «ip sla monitor» и «track» в IOS. Настраивается в «set load-balancing wan».

Что можно делать:

  • Отслеживать состояние каналов.
  • Переключаться на резервный канал при падении связи.
  • Осуществлять балансировку между каналами.

Отслеживание состояния канала

Для отслеживания состояния сейчас предлагается два типа тестов: ping и ttl. Первый использует ICMP Echo пакеты, второй использует UDP. Оба они имеют обязательный параметр target — заведомо достижимый хост для теста. Тест ttl также имеет аргумент ttl-limit — максимальное число переходов, при котором тест считается пройденным. Тест ping имеет параметр resp-time (время ответа).

Настраиваются в «set load-balancing wan interface-health ». Например:

edit load-balancing wan
set interface-health eth0 test 10 type ping
set interface-health eth0 test 10 target 192.0.2.55

Также для интерфейса можно указать опции success-count (число успешных тестов, при котором он считается живым) и failure-count (соответственно, число тестов, после которых он считается мертвым). Для интерфейса следует указать next-hop, в противном случае балансировка может работать неправильно из-за разной метрики по умолчанию у статических и полученных по DHCP маршрутов.

Пример готового конфига:

 interface-health eth2 {
     failure-count 2
     nexthop 10.0.0.1
     test 0 {
         target 87.250.251.3
         type ping
     }
     test 1 {
         target 213.180.204.3
         type ping
     }
 }

Балансировка

После того, как настроено отслеживание состояний канала, можно настраивать правила балансировки. Делается это в «set load-balancing wan rule».

Обязательные параметры правила это входящий интерфейс (inbound-interface) и исходящие интерфейсы (interface). Входящий интерфейс может быть указан в формате <ifaceType>+ (например, eth+), который означает все интерфейсы некоторого типа.

Для исходящиъ интерфейсов можно указать параметр weight. По умолчанию балансировка производится равномерно по всем интерфейсам, если указаны веса, она производится в соотношении weight1/weight2/…

Пример готового правила:

 rule 10 {
     inbound-interface eth2
     interface eth0 {
         weight 1
     }
     interface eth1 {
         weight 10
     }
 }

Переключение на резервный канал

Если требуется не балансировка, а переключение на резервный канал при падении основного, нужно указать в правиле параметр failover. Основной и резервные интерфейсы можно указать либо с помощью параметра weight (при этом интерфейс с большим весом имеет больший приоритет), либо с помощью нескольких правил (при этом приоритет имеет правило с меньшим номером).

Также может быть полезно указать глобальную опцию «set load-balancing wan flush-connections», которая автоматически сбрасывает все соединения, идущие через интерфейс при его падении.

Классификация трафика

Особый интерес представляют опции, которые позволяют выбрать на какой именно трафик будут срабатывать правила. Критерии представлены параметрами правила protocol (протокол IP), source address (адрес источника), source port (порт источника), destination address (адрес назначения) и destination port (порт назначения, если протокол TCP или UDP).

С их помощью можно организовать PBR (хотя это и отдает грязным хаком). Для этой цели стоит включить опцию правила enable-source-based-routing.

Пример такого правила (отправляет трафик клиентов VPN через eth2, в то время как локальная сеть ходит черезз pppoe0, при его падении через pppoe0 ходят все):

 rule 10 {
     enable-source-based-routing
     failover
     inbound-interface ppp+
     interface pppoe0 {
         weight 1
     }
     interface eth2 {
         weight 10
     }
     source {
         address 172.20.0.0/24
     }
 }

Исключение трафика из балансировки

С помощью параметра правила exclude можно исключить соответствующий ему трафик (выявленный с помощью критериев из предыдущего параграфа) из балансировки или резервирования.

Неявный NAT

По умолчанию трафик, уходящий с участвующих в балансировке интерфейсов подвергается source NAT с заменой адреса источника на адрес интерфейса. Это позволяет исключить ситуации когда, например, трафик уходит с одного интерфейса, а возвращается на другой. Если такое положение вещей вас по какой-то причине не устраивает, его можно поменять глобальной опцией disable-source-nat.

Выполнение скрипта при изменении состояния интерфейса

С помощью «set load-balancing wan hook /path/to/script» можно автоматически выполнять некий скрипт при изменении состояния канала. Например уведомлять об этом администратора.

 

Опубликовано: Vyatta

 

7 комментариев “Балансировка нагрузки и резервные каналы во Vyatta”

comment rss - Trackback

  1. Dron29:

    На сколько я понял в скрипте нужно прописывать свои внешние айпи, но если я их получаю по DHCP от провайдера они постоянно меняются. что тогда делать???

  2. Dron29: Внешние адреса нигде не фигурируют. Но вот next-hop там есть, поэтому балансировку между интерфейсами без явного next-hop вроде PPP организовать проблематично.

    Если вы получаете адреса по DHCP, то next-hop у вас, скорее всего, всегда одинаковый, и проблем быть не должно.

    • У меня линк через DSL модем, сессия PPPoE. Можно кончечно заказать у прова постоянные айпи, но это будет стоить денег, притом на каждую линию …
      Напрашивается вывод что в Vyatt`е балансировка между двумя PPPoE не работает …

  3. chicago man:

    Давно здесь никто не отписывался))
    Есть вопрос… можно ли запустить тоже самое но на L2 уровне?
    Интернет подходит от двух провайдеров на Switch. Switch соединен с Vyatta транком (получается своего рода такой router on a stick)
    на Vyatta все настоено в виде: кучи vif…
    set interfaces bonding bond1 vif 10 address 1.1.1.1/24
    set interfaces bonding bond1 vif 20 address 2.2.2.1/24
    ……..

    Сам Лоад балансинг:

    set load-balancing wan ‘flush-connections’
    set load-balancing wan interface-health bond1.42 failure-count ‘5’
    set load-balancing wan interface-health bond1.42 nexthop ‘12.42.106.225’
    set load-balancing wan interface-health bond1.42 test 10 target ‘12.42.106.10’
    set load-balancing wan interface-health bond1.42 test 10 type ‘ping’
    set load-balancing wan interface-health bond1.112 failure-count ‘3’
    set load-balancing wan interface-health bond1.112 nexthop ‘12.112.101.209’
    set load-balancing wan interface-health bond1.112 test 10 target ‘12.112.101.10’
    set load-balancing wan interface-health bond1.112 test 10 type ‘ping’
    set load-balancing wan rule 10 inbound-interface ‘bond1.10’
    set load-balancing wan rule 10 interface ‘bond1.42’
    set load-balancing wan rule 10 interface ‘bond1.112’

    А теперь в чем заключается проблема. При такой конфигурации Лоад Балансих работает нормально…НО есть проблема с внутренним трафиком. Трафику из 10 vlan Vyatta дает next-hop ISP, соответственно внутри траф не ходит. Как можно решить данную проблему ?????

  4. Семен Горбунков:

    Вот кстати интересный факт, два провайдера. один со статикой и норм скоростью, другой через юсб (интертелеком) ДХЦП
    баланс работает коряво, нельзя весами определить главным ДХЦП провайдера.

    сож у кого получилось с ДХЦП корректно настроить балансинг?

  5. Семен Горбунков:

    и еще так и не понял, какой гетевей в системс нужно прописывать, если он прописывается один!

» Оставить комментарий

Вы должны войти чтобы прокомментировать.