Тестируем и мониторим MSTP в неоднородной сети

Введение


С ростом любой сети перед администратором рано или поздно встают, среди прочего, три проблемы — риск случайных падений из-за обрывов линий связи, появление колец в дереве коммутаторов и нехватка производительности отдельных линий.

Для борьбы с этими видами зла человечество, как известно (в частности, из нескольких статей на хабре, Википедии и много еще откуда) придумало и использует различные версии Spanning-Tree протокола. Общая идея которого сводится к тому, что коммутаторы в сети с более-менее произвольной связностью по некоторым правилам коллегиально принимают решение о том, какие линки между ними для пересылки каких пакетов использовать.

Pro и Contra


Стоит отметить, что время от времени народ задумывается на предмет того, а надо ли оно вообще ( тут, к примеру). Разные мысли по этому поводу сводятся (ок, насколько мне известно) к трем идеям:

  1. А давайте везде ставить дублированные линки и всяческие LAG/LACP аггрегированные пары проводов
  2. А ну его, второй уровень, будем все маршрутизировать на третьем
  3. А давайте жить на реальных или виртуальных стеках коммутаторов


Понятно, что для каждой конкретной сети есть свои «design considerations» и лишних пару-тройку раз подумать никогда не повредит, но определенные минусы у обоих подходов имеют место быть. Первый удорожает инфраструктуру в реальных условиях при необходимости поддерживать отказоустойчивость. Пример — есть десять коммутаторов в потенциальном «кольце». И уже проложенная оптика. Дешевая, 4 жилы. Если хочется до каждого построить два независимых линка, которые потом дружить в какой-нибудь аггрегированный интерфейс — придется воротить либо кучу новой стройки, либо укладывать в одно волокно несколько длин волн, что так же не дешево. А если «все маршрутизировать», то коммутаторы придется менять на маршрутизаторы (утрирую, но смысл остается) и иметь себе увеличение задержек на ровном месте. Увы.

Рабочие и надежные распределенные (до 80 км, кажется) стеки коммутаторов есть у Juniper-а. Но стоят — как самолет. Отбой.

Опыт, сын ошибок трудных


Почитав, посмотрев на все это хозяйство, решили мы попробовать это запустить. Причем судя по первому впечатлению от прочтения различных мануалов все было весьма радужно — настрой как надо и оно более-менее само разберется и полетит.
В арсенале имелись Cisco-2960 и Dlink различных видов. Счастья хотелось в виде MSTP на пару-тройку VLAN-ов. Стенда не было, все попробовали собрать на живой сети (ночью, при минимальной нагрузке и т.п.). Почему именно MSTP — потому, что какой-никакой, а стандарт. Есть шанс завести систему из оборудования разных вендоров без больших потерь. И обеспечить частичное использование заблокированных линков, опять же.

С первого заходу не получилось — Cisco перестраивает MSTP довольно долго и малейшая ошибка в расстановке VLAN по разным Instance-ам приводит к тому, что система не взлетает и с вероятностью теряет управляемость.

Поняли, что Spanning Tree без мониторинга и быстрого представления о том, в каком состоянии оно сейчас находится — грош цена, как RAID-у, например.

Стенд


Откатили конфигурацию, поставили в ядро стек из Cisco 3750, что сняло вопросы с производительностью пары 2960-х и на заметное время отодвинуло проблемы с пропускной способностью, оставив только вопрос резервирования линий.

Собрали стенд из 3-х 2960 и 2-х dlink-ов, отцепленный от основной сети, и начали играться.

Инструменты


Сначала на одной из Cisco были выделены порты под управление всеми остальными коммутаторами, а на них управляющие интерфейсы были прицеплены к отдельному VLAN-у, который не планировалось гонять в MSTP, чтобы на время экспериментов не терять связность с оборудованием.

Выяснено, что некоторые модели dlink поддерживают весьма ограниченное количество MST Instance-ов, что затрудняет жизнь, но не делает ее невозможной. Имеющиеся в нашем хозяйстве умеют до 7-ми, увы.

Далее были написаны сркиптики на perl + Net::Telnet, умеющие две ключевые вещи:

  1. Автоматически и единообразно настраивать коммутаторы разных моделей
  2. Снимать информацию, достаточную для отображения состояния дерева


Если вдруг кому пригодится, приведу в качестве примера минимальные команды для dlink-ов

config stp version mstp
config stp mst_config_id name %cfname revision_level %revision
create stp instance_id 1
config stp instance_id 1 add_vlan %inst1vlans
create stp instance_id 2
config stp instance_id 2 add_vlan %inst2vlans
create stp instance_id 3
config stp instance_id 3 add_vlan %inst3vlans
create stp instance_id 4
config stp instance_id 4 add_vlan %inst4vlans
create stp instance_id 5
config stp instance_id 5 add_vlan %inst5vlans
create stp instance_id 6
config stp instance_id 6 add_vlan %inst6vlans
config stp ports 1:1-1:26 state enable
enable stp
config stp trap new_root enable
config stp trap topo_change enable

(Конкретно этот пример — для условно-стекируемых длинков. Для нестекируемых — номера портов будут без ":")

и для cisco:

conf t
no spanning-tree mst configuration
spanning-tree mode mst
spanning-tree mst configuration
 name %cfname
 revision %revision
 instance 1 vlan %inst1vlans
 instance 2 vlan %inst2vlans
 instance 3 vlan %inst3vlans
 instance 4 vlan %inst4vlans
 instance 5 vlan %inst5vlans
 instance 6 vlan %inst6vlans
exit
exit


Вместо %cfname подставляем имя конфигурации, вместо %revision — соответственно, revision (натуральное число от единицы и выше).
%inst1vlans — список тегов VLAN для первого instance-а, через запятую.

Для тонкой настройки — чтобы реально включилась балансировка, трафик разлегся по линкам и т.п. — надо пройти по портам и понастраивать приоритеты. Это лучше руками.

Как на это смотреть?


Было бы вообще идеально, если бы можно было дергать разные коммутаторы по SNMP и видеть в более-менее одних табличках более-менее одинаковые данные. Но, несмотря на стандартность протоколов (и SNMP и MSTP вроде как стандартизованы), у всех вендоров свои представления о прекрасном и халявы такой нет. Или по крайней мере не нашлось. Cisco почему-то данные по CIST отдает, а по остальным MST Instance-ам — нет. Почему — не понятно ни разу…

Пришлось браться за напильник и изобретать велосипед заново. А именно — программу, которая лазает все тем же telnet-ом по коммутаторам и снимает с них данные, парсит и отображает. Для отображения такого рода данных идеально (на мой субъективный вкус, конечно), подходит graphviz — ему можно скормить на вход текстовый файлик простого формата, а он тебе и граф разложит, и стрелочки нарисует, и даже гиперссылки вставит, если попросить ласково.

Получилось примерно такое:



Команды для получения информации, соответственно, для Dlink-ов:

show stp ports %port


и для Cisco:

show spanning-tree interface Gi %device/%port detail


Подводные камни


Spanning tree имеет право сходиться до минуты и это нормально.

Базовая настройка должна быть идентичной.

Чтобы на всех коммутаторах были все instance-ы, нужно, чтобы на них были и все VLAN-ы. (на картинке выше, правда, есть коммутаторы, на которых не все vlan-ы!)

Средствами Spanning Tree (без служебных Instance-ов, создаваемых исключительно для исследовательских целей) невозможно определить в какой именно порт коммутатора A включен коммутатор B, а в какой — коммутатор C если A во всех MST instance-ах ближе к Root-у чем и B и C.

Резюме


Заставить работать стандартизированные протоколы можно, если действовать аккуратно, не торопясь и следя за руками и за оборудованием.

Similar posts

Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 10

    +1
    Что у вас за сеть такая, требующая семи инстансов?
      0
      Да не шибко большая, под три сотни коммутаторов, но решение хотелось получить достаточно гибким, чтобы было при любых обстоятельствах, за что подергать.
        0
        Три сотни коммутаторов. В одном L2 сегменте. Обалдеть.

        Процитирую:
        А ну его, второй уровень, будем все маршрутизировать на третьем
          0
          Это управление ими в одном L2. А абоненты распиханы по VLAN-ам так, что в одном VLAN и свичей и абонентов относительно немного.
    • UFO just landed and posted this here
        0
        Сегодня начали заливать на реальные коммутаторы. Выяснилось, что dlink-и нормально работают с MSTP только в более-менее свежих прошивках. А для некторых (точнее-для 3326gsr) работоспособных прошивок просто нет.
        Cisco, в свою очередь, долго прочухивается на mstp, если трогаешь ее конфиг или ей приходится как-то заметно перестраивать конфигурацию.
        Когда будет какое-то заметное покрытие сети — отпишу отдельным постом впечатления.
        Отлаживать, ловить и лечить проблемы удобно, только если добавлять коммутаторы по одному и следить за каждым шагом.
        • UFO just landed and posted this here
            0
            Сегодня аккуратненько запустили на пять свичей под нагрузкой. 4x Dlink-3120 + 1 Cisco 3750 (стек). Живет.
            Выяснились дополнительное чудо —

            при умолчальных настройках (maxage — время, в течение которого BPDU считается валидным = 20 секунд) иногда dlink-и все-таки возомневают себя рутами. Ненадолго, но прилетают topology change. Установили в 40 секунд, перестало.
          • UFO just landed and posted this here
              0
              Замечено следующее — если в инстансе меняется рут (что да происходит на раз при добавлении нового свича, если не вкрутить приоритеты превентивно) — циска на заметное время кладет интерфейсы. Что нормально.
              С длинками (уже на двух моделях) замечено, что в старых прошивках хотя и есть все команды для конфигурации и диагностики MSTP, но если он не Root, то в отличных от 0-го instance-ах он начинает считать, что Root port на самом деле Master port. Что, понятное дело, при большом количестве свичей (больше трех, думается мне) обязано привести к кольцам и глюкам.

        Only users with full accounts can post comments. Log in, please.