среда, 4 июня 2014 г.

Ethernet Fabric от Brocade ч. 1

                   Ethernet  Fabric   от   Brocade  ч. 1


Решил рассказать про успешный опыт использования этой технологии , тем более что складывается впечатление ,  что в России она совсем не распространена

Для  начала  -  для чего это надо
Начинать придется издалека - с основ , которые сейчас основательно забыты под ворохом  навершанных плюшек и костылей .
Небольшой ликбез  в общем
Сеть Ethernet  изначально создавалась как сеть с негарантированной достакой пакетов .То есть
а. пакеты могут теряться
б. время  доставки пакетов в общем случае может быть любым

Пункт а.  решается переповторами в вышестоящих протоколах
Пункт б.  для большинства  приложений не особо важен , где важен решался тупо увеличением скорости сети  10Mb->100Mb->1Gb-10Gb

Все это общеизвестно , однако отметим еще одно важное обстоятельство -  Ethernet создавался  как протокол доступа точка-точка (MAC-MAC)   в  одном  разделяемом  множеством точек  сегменте  (изначально коаксиале). Это означает  что Ethernet  подразумевает один путь между точками  и не может работать по нескольким сегментам . Это означает также , что одна точка посылает свой пакет второй  не зная  где она собственно находится .
Усложним схему  - добавим Ethernet swith L2
В этом случае  свич  конечно знает , на каких портах находятся MAC адреса и пересылают пакеты по этой таблице .
Усложним схему до более реальной - свичей несколько .
Если свич не знает некий   MAC адрес то  он отправляется  другому  - может требуемое устройство там .
Проблема в том  , что свичи не могут знать , отправляли ли  они этот пакет перед этим .  В результате возникает хорошо известная проблема зацикливания пакетов  в случае нескольких свичей , если они не дай бог соединились кольцом .

Пакеты будут бесконечно бегать по треугольнику , свичи перегрузятся и сеть перестанет работать .
Для  решения такой проблемы был придуман костыль STP , блокирующий порты .
Казалось , бы все замечательно .
Но - время срабатывания STP  не моментальное  , и сеть на какое-то время становится полностью .  Само собой ,  невозможность передавать Ethernet пакеты  по нескольким путям ограничивает скорость и понижает надежность .

Все дублирующие линки будут положены . ( картинки сперты из материалов Brocade)

Со всеми этими недостатками особо не парились , пока Ethernet сети использовались для офиса и Интернета и пока не появился 10g в локальных сетях .
Тут же возник соблазн использовать 10g  для замены FC SAN и появилась технология  FCOE .
Очеь быстро выяснилось , что на обычном Ethernet более-менее серьезный дисковый ввод-вывод работает плохо .

Причины очевидны - даже при просмотре потокового видео задержки в 3-5 мс  особо не заметны , а вот для нагруженного сервера это заметно очень сильно .Особенно  если эти задержки хаотичны и происходят на записи редологов.

64 bytes from 10.0.2.120  : icmp_seq=1265. time=0.603 ms
64 bytes from 10.0.2.120  : icmp_seq=1266. time=0.529 ms
64 bytes from 10.0.2.120  : icmp_seq=1267. time=4.103 ms
64 bytes from 10.0.2.120  : icmp_seq=1268. time=0.450 ms
64 bytes from 10.0.2.120  : icmp_seq=1269. time=0.573 ms

Более того , некоторые решения/приложения требуют минимальных задержек просто при  передаче данных , без всякого IO .

Одним из таких решений является Oracle Standby in Max. availability mode .
Standby (очень грубо )  является зеркалом оракловой базы , изменения
передаются то сети . В случае задержек передачи в указанном режиме
Primary  начинает автоматически подтормаживать , чтобы сохранить синхронность . Само собой это крайне негативно сказывается на работе приложений , завязанных на эту базу .
С указанной ситуаций , к сожалению , пришлось столкнуться .
Primary и Standby соединялись локалькной сетью с скоростью 1Gb
Такой скорости более чем достаточно для передачи , но периодические увеличения задержек  крайне негативно влияли на работу
На рисунке - характерный пик ожиданий на базе
Отмечу , что локальная сеть собрана совершенно правильно , мощности Cisco хватает с избытком .
Но  задержки , возникающие в обычной ethernet - неизбежны .

пятница, 13 декабря 2013 г.

Про сжатие трафика

Как я уже упоминал , у нас есть удаленный DRC  Oracle standby , куда накатываются изменения локальной базы . Недавно решили развернуть еще одну базу в DRC , гораздо большего обьема .
Сразу было понятно , что передать всю базу ХХ терабайт  стандартным путем нереально  , время только передачи   получалось более месяца . В таком варианте  накатывать изменения было уже бессмысленно  - переданные данные уже устарели бы.

Отмечу , что к DRC проложены 2 канала - широкий основной и узкий резервный .
Возникла  мысль  передавать данные по двум каналам одновременно , чтобы использовать свободную полосу основного канала + резервный .
Гугление выявило два варианта  -  SCTP и Multipath TCP
Тут же выяснилось , что несмотря на описания , SCTP  не умеет передавать данные одновременно. Вроде есть патч , но все это в состоянии глубокой альфы .
С MTCP оказалось интереснее . Пачти под  дебиан и шапку в наличии и вроде как рабочие . Поставили , начали пробовать .
Действительно , трафик идет по обоим каналам и собирается в конечной точке . Вот только скорость передачи по двум каналам получается меньше чем по одному узкому ..... Короче , с производительностью беда .

Поскольку  с параллельной передачей вышел облом , самым разумным показалось сжимать трафик  на лету  дабы минимизировать обьем передаваемых данных .
Неспешное гугление показало , что продуктов со сжатием трафика немало , но почти все привязаны к протоколу . В 90% случаев - HTTP + RDP и тому подобное . Для наших целей это не подходит совершенно , нужен  компрессор IP траффика . Ближе всего в этому софтовые VPN  с опцией сжатия .

В итоге оказалось три кандидата -
OpenVPN
tincd
vtun
Последний  ранее использовался , но результаты были не очень и сам продукт давно заброшен .

Начали с свежего tincd . Скачал , поставил, настроил , сталь гонять трафик . Результат оказался крайне неутешительным -  при потоке более 100 Мбит  клиент и сервер сразу стали жрать 100% CPU
Причем даже без сжатия !  

С OpenVPN  оказалось интереснее . В принципе , он позволял передавать поток с большой скоростью + сжимать его . Вот только стабильных результатов мы так и не достигли . По непоняитным причинам передача файла сегодня проходила со скоростью 270Мбит , а завтра - 120 .
Многочисленные  попытки разобраться ничего не дали .

Пришлось вернуться к vtun , он по крайней мере работал стабильно . После небольшого числа тестов удалось найти  рабочую конфигурацию и начать передачу данных в DRC .
Примерный порядок получившейся  скорости передачи и сжатия виден на картинке -


Зеленый график - это то что прошло по каналу , синий - реальный .
В итоге  - передача и накат изменений заняли менее  трех недель .

пятница, 9 августа 2013 г.

вторник, 2 июля 2013 г.

T54 vs T44

Продуктовая база переехала с Т44 на Т54  , быстрее чем ожидалось .
Все в руках всевышнего ....
Итого - загрузка CPU , user


                      Т44            Т54
Среднее        16-18%      6%
Пиковое        49%           16%

напомню что
Т44  2998 MHz  SPARC-T4   256 потоков
Т54  3600 MHz  SPARC-T5   512 потоков

понедельник, 1 июля 2013 г.

пятница, 21 июня 2013 г.

Т5 - первые впечатления

Получили новую железку 
support@theta:~$ prtdiag -v | more
System Configuration:  Oracle Corporation  sun4v SPARC T5-4
Memory size: 1047552 Megabytes
CPU ID Frequency Implementation         Status
------ --------- ---------------------- -------
0      3600 MHz  SPARC-T5               on-line 



Меряем попугаи -
Т44 md5 for 3s on 8192 size blocks:                        105596
Т54 md5 for 3s on 8192 size blocks:                        363128
X5680@ 3.33GHz  md5 for 3s on 8192 size blocks: 252229