The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

FreeBSD: управление загрузкой 2-х каналов, отказоустройчивость и балансировка нагрузки (freebsd balance traffic interface ipfw netgraph policy ifconfig)


<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>
Ключевые слова: freebsd, balance, traffic, interface, ipfw, netgraph, policy, ifconfig,  (найти похожие документы)
From: Михаил Сгибнев <mixa(@).dreamcatcher.ru> Date: 2006-09-11 10:52:11 Subject: FreeBSD: управление загрузкой 2-х каналов, отказоустройчивость и балансировка нагрузки
Original

Перевод: Сгибнев Михаил

Поздравьте меня - мне удалось реализовать схему подключения к 2-м каналам с возможностью управления пропускной способностью, отказоустойчивостью и объединением каналов. Для тех кто заинтересовался, привожу некоторые основы. Возможно, вы захотите модифицировать сценарии и изменить значения балансировки.

Установка

Все что нам потребуется: После длительного изучения материала, я пришел к выводу, что необходимо использовать ipfw prob, ipfw fwd и divert для разделения natd. В двух словах, natd с alias_address связвывается с соответствующим внешним IP.

Первый вариант правил ipfw выглядел следующим образом: Эта схема не работает по двум причинам: К сожалению, keep-state создает динамическое правило используя только IP адрес, порт источника/назначения и интерфейс. Это не может нам помочь, так как я бы хотел создать правило, помнящее, какие пакеты попадают под skipto 8500, но keep-state (динамическое правило для этой сессии) посылает пакеты напрямую, видя только правило allow. Поскольку в таком случае пакеты не проходят через nat, мы их обратно уже никогда не получим.

Рабочим, хоть и не самым элегантным решением будет следущее:

Файл rc.conf должен содержать следущие строки: Я обнаружил, что команда fwd не отрабатывала правильно, пакеты не выходили с нужного интерфейса. Я решил передавать их так как надо, хотят они того или нет (довольно грубо, как вы увидите). Используя ng_one2many на первом внешнем интерфейсе и сконфигурив его на "перелавать все", я получил, что все пакеты, исходящие с первого интерфейса, отправляются и со второго. В результате родился следующий сценарий: (Да я знаю, что это может быть сделано намного лучше - пока это работает!!!) Темные электрические силы не давали работать, пока в качестве маршрута по умолчанию был указан 192.168.8.1 (через интерфейс, к которому непосредственно подключен $ext_if1). Как только шлюзом был указан $ext_gw2 - все заработало.

Правила IPFW: Работа всей конструкции достигается за счет отправки пакета по обоим интерфейсам, что приводит к загрузке каналов лишним трафиком.

Теперь нам необходимо обеспечить отказоустойчивость. Мной опять был написан представленный ниже сценарий и добавлен в crontab на выполнение раз 2 минуты. Из всего этого можно сделать систему управления пропускной способностью, если добавить правила к ipfw, которые определят вероятность 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8 с каждым правилом, связанным с разными наборами правил ipfw. Тогда необходимо анализировать ответы утилиты ping (необходимо среднее значение нескольких пакетов) для определения среднего времени доступа по разным раршрутам и установка соответствующего набора правил ipfw с соответствующим значением ipfw prob. В теории все должно работать.

Regards Graham

<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>

Обсуждение [ RSS ]
  • 1, VVS (??), 14:20, 22/02/2010 [ответить]  
  • +/
    Даа... Я в шоке.. Мануалы читать не пробовал?
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру