понедельник, 3 марта 2008 г.

В догонку к балансировке.

Балансировка оказалась не так проста, как казалось на первый взгляд.
Три недели прошло как в картечном дыму :) Борьба за работающую балансировку продолжалась и днем и ночью и даже во сне. Впрочем, все по порядку.

После проведения всех соответствующих настроек я воскликнул: "Ура, я поднял балансировку!". И не обращая внимания на всякого рода мелочи, типа периодического отвала аськи собрался и рванул домой.
И вот тут началось саме интересное. Приехав домой, и плотно поужинав, я решил подключиться к своему железу дабы еще раз посозерцать достигнутое. Однако меня ждало жуткое разочарование. Жутчайшие тормоза навалились на попытку подключения. Потери доходили до 90%. Я почуял неладное. Кое ка подключился и отключил ее. И, о чудо, потери пропали. ЧТО ЭТО БЫЛО?, подумал я. И погрузился в тяжелые думы.
В итоге, все оказалось намного интересней и сложней.

Сама по себе балансировка
Сама по себе балансировка - штука довольно простая. И вместе с тем довольно хитрая. Она включается, когда к одной и той же точке назначения есть более одного equal cost маршрута. А вот дальше начинается самое интересное. Дальше все зависит от механизма свичинга, который используется в данный момент. Бывает 2 типа балансировки: per-packet и per-destination.

CEF
Поддерживает per-packet и per-destination типы.
Оказалось что эта технология свичинга пакетов не поддерживает диалер интерфейсы. Верней, поддерживает но при определенных условиях и в определенных IOS. Самое странное, что в документации на мою версию (C2800NM-ADVSECURITYK9-M), Version 12.4(9)T1, сказано, что Dialer CEF поддерживается, однако мои Dialer интерфейсы дальше punt adjucency так и не пошли :(. Чтобы CEF использовал диалер интерфейс в своем механизме балансировки необходимо убрать статические маршруты через этот интерфейс. А на самом интерфейсе сказать ppp ipcp default route, хотя на моем IOS эта команда выглядела как ppp ipcp route default. На обоих Dialer интерефейсах я ее прописал. Убрал статические маршруты. Однако ничего не изменилось. Аська продолжает отключаться, пакеты пропадать. В таблице adjucency мои Dialer интерфейсы находятся в состоянии punt adjucency, что сигнализирует о том, что CEF не отрабатывает на этих интерефейсах, а решение о свичинге принимается следующим механизмом свичинга. При настройках по умолчанию этим механизмом является Fast Swiching.

Fast Swiching
Поддерживает per-destination тип.
Оп, пакеты попали сюда. Тут все несколько проще чем в CEF. На основе таблицы маршрутизации строится таблица свичинга по префиксам. Решение применяется а основе этой таблицы. Если же этот механизм отключен, используется следующий тип.

Process Swiching
Самый простой механизм, умеющий только per-packet балансировку.

Резюмируя написанное - при тех условиях, которые сложились в моем случае ни один из этих типов работать не будет. Верней при настройках по умолчанию. Единственный способ - заставить трафик уходить с того интерфейса на который он пришел. Но этого я сделать так и не смог. Причина проста, железяка сама принимает решение о том, через какой интерфейс ей выкинуть пакет. И этот интерфейс не всегда совпадает с тем интерфейсом, через который инициализировалась сессия.

Комментариев нет: