Оптимизации работы сервера для работы с CMS\CMF. Оптимизация агрегации ampdu asus
NIC Teaming в Windows Server 2012
Технология объединения сетевых адаптеров NIC Teaming заключается в том, что несколько физических адаптеров (NIC) объединяются в группу, в результате чего получается один единственный логический адаптер. Процесс объединения называют teaming. NIC Teaming решает две основные задачи:
• Увеличение полосы пропускания — полоса увеличивается пропорционально количеству адаптеров в группе. Например, если объединить в NIC Teaming четыре сетевых адаптера со скоростью 1 Гбит/с, то общая полоса пропускания составит 4 Гбит/с;• Отказоустойчивость — когда один адаптер выходит из строя, остальные берут на себя его функции и связь не прерывается.
NIC Teaming технология не новая, но раньше ее реализация целиком зависела от производителей сетевого оборудования. Возможность объединять сетевые адаптеры в группу средствами операционной системы появилась только в Windows Server 2012. NIC Teaming в Server 2012 позволяет объединять в группу адаптеры разных производителей, единственное ограничение — все они должны работать на одной скорости. Объединить в NIC Teaming можно до 32 сетевых адаптеров.
Включение и настройка
По умолчанию режим NIC Teaming отключен. Чтобы его активировать открываем Server Manager, заходим в свойства сервера и нажимаем ссылку Объединение сетевых карт (NIC Teaming).
В открывшемся окне жмем на кнопку Задачи (Tasks) и выбираем пункт Создать группу (New Team).
Даем группе название и выбираем добавляемые адаптеры.
Затем настраиваем дополнительные свойства группы. Поскольку от этих параметров зависит эффективность работы NIC Teaming, стоит рассмотреть их поподробнее.
Режим поддержки групп (Teaming mode) определяет режим взаимодействия группы с сетевым оборудованием:
• Не зависит от коммутатора (Switch Independent) — группа работает независимо от коммутатора, никакой дополнительной настройки сетевого оборудования не требуется. Этот режим позволяет подключать адаптеры одной тиминговой группы к разным свичам для защиты от сбоя одного из них. Выбирается по умолчанию;• Статическая поддержка групп (Static Teaming) — режим с зависимостью от сетевого оборудования. Все адаптеры группы должны быть подключены к одному коммутатору. Порты коммутатора, к которым подключены адаптеры группы, настраиваются на использование статической агрегации каналов;• LACP — также зависит от сетевого оборудования. Коммутатор настраивается на использование динамической агрегации каналов с использованием протокола Link Aggregation Control Protocol (LACP).
Режим балансировки нагрузки (Load Balancing mode) определяет, каким образом распределять сетевой трафик между адаптерами группы:
• Хэш адреса (Address Hash) — при передаче сетевого трафика на основании MAC или IP-адресов отправителя и получателя вычисляется хеш (число). Это число привязывается к определенному физическому адаптеру и в дальнейшем весь трафик от этого отправителя будет идти через этот адаптер;• Порт Hyper-V (Hyper-V Port) — в этом режиме осуществляется привязка адаптера тиминговой группы к определенному порту виртуального свича в Hyper-V. Этот режим используется в том случае, если на сервере активирована роль Hyper-V.
Резервный адаптер (Standby adapter) позволяет назначить один из адаптеров группы в качестве резервного. В нормальном состоянии резервный адаптер не используется для передачи трафика, но при выходе любого адаптера группы из строя сразу занимает его место и трафик продолжает передаваться без перерывов. Впрочем, даже без резервирования выход из строя одного адаптера в NIC Teaming не приведет к прерыванию сетевых операций, т.к. нагрузка будет автоматически распределена по оставшимся адаптерам.
Настроив свойства группы, жмем ОК. Все, группа создана. Теперь в окне «Сетевые подключения» появился еще один сетевой адаптер, который как раз и является виртуальным адаптером группы.
Если посмотреть свойства физических сетевых адаптеров, то мы увидим, что все компоненты кроме протокола мультиплексора сетевого адаптера отключены
Включить и управлять NIC Teaming можно и с помощью PowerShell. Для этого в PS есть целый модуль по имени NetLbfo.
К примеру, следующая команда создает группу Team1 из адаптеров Ethernet и Ethernet 2, включает режим Switch Independent и задает балансировку нагрузки по хешу адреса:
New-NetLbfoTeam -Name Team1 -TeamMembers ″Ethernet″,″Ethernet 2″ ` -TeamingMode SwitchIndependent -LoadBalansingAlgorithm TransportPorts
Отключение NIC Teaming
Отключение NIC Teaming произойдет, если удалить тиминговую группу. Сделать это можно в Server Manager, в окне NIC Teaming.
Также удалить группу можно через PowerShell командой Remove-NetLbfoTeam -Name Team1
Кстати, при удалении группы восстанавливаются предыдущие настройки сетевых адаптеров.
Заключение
Реализация технологии NIC Teaming в Windows Server 2012 откровенно порадовала. Она проста в настройке, не предъявляет специальных требований к оборудованию и может работать работает практически с любыми сетевыми адаптерами. В общем я за ее использование, однозначно.
windowsnotes.ru
Оптимизации работы сервера для работы с CMS\CMF
Друг попросил настроить FreeBSD на котором, он держал с десяток сайтов среди них были самописные, CMS и CMF так чтобы они эффективно использовали систему, ресурсы компьютера и выводили результат за менее короткий срок. И так в задаче нам дано FreeBSD 8.1 в которой необходимо настроить систему для улучшения отклика веб сервера и скорости выдачи запросов.
Содержание:
Узкие места
Немного теории.
Выявите обжор. Необходимо посмотреть утилитой top и выявить проблемы, связанные с загруженностью процессора и объемом используемой оперативной памяти. Если ЦП загружен на 100% (выше 5ки) и\или оперативной памяти не хватает (ПО уходят в своп), то необходимо выяснить, что потребляет все ресурсы и попытаться исправить положение. Это может быть и сам веб сервер, CMS\CMF, СУБД и тп. Может в действительности слишком мало RAM или сильно нагружен слабый процессор.
Проверьте дисковую подсистему(Разбивка HDD корректировка Swap и диагностика дисковой системы.) инструментом типа vmstat. И если вы видите, что дисковая активность неадекватна при наличии достаточного объема оперативной памяти и не загруженного ЦП значит у вас проблема ввода-вывода. Это может быть связанно с работой большого кол-ва БД, фонового выполнения тяжелых сценариев, неподходящее использование RAID для приложения с частыми операциями чтения\записи, использованием неэффективных ATA, SATA жеских дисков, контроллеров и т.п.
Убедитесь в эффективности SWAP и TMP.Системе возможно не хватает памяти и она обращается в SWAP. Бывает SWAP находится на медленном или постоянно занятом работой диске [swapinfo].Решений два:
- увеличение RAM, чтобы система не просила SWAP
- увеличение размера SWAP и возможен вариант переноса его на другой менее загруженный диск
Решение для TMP это использование [tmpfs] об этом чуть ниже.
Проблемы с WANБывает так, что канал в WAN перегружен или у вас проблемы с хостингом. Удостоверьтесь что линия связи не перегружена.Решений два:
- увеличение скорости канала связи
- сжимание передаваемых данных
ОптимизацияОптимизируйте ваши CMS\CMF для этого существуют интересные продукты, например плагины для Firefox.
Эти плагины позволят вам найти причины тормознутости ваших сайтов.К примеру YSlow сможет помочь в поисках причины, почему странички на сайте не грузятся так быстро, как хотелось бы, тогда как ЦП, память, дисковая подсистема не уперлись в потолок.
PHP
Выполнение PHP кода - большая часть обслуживания запроса и нам необходимо его ускорить. Существенное увеличение производительности можно получить кэшированием кодов операций PHP после компиляции. При каждом запросе PHP анализирует и компилирует весь код в промежуточную форму для каждого запроса. Кэширование позволяет избавится от многократного анализа и компиляции и использовать предварительно скомпилированный код.Распространенные продукты кэширования операций:
Я использую eAccelerator, и мы начнем его установку.
# cd /usr/ports/ && make search name=eaccelerator Port: eaccelerator-0.9.5.3 Path: /usr/ports/www/eaccelerator Info: An opcode cache for PHP with encoder and loader Maint: [email protected] B-deps: autoconf-2.62 autoconf-wrapper-20071109 libiconv-1.11_1 libxml2-2.7.3 m4-1.4.12,1 perl-5.8.9_2 php5-5.2.9 php5-session-5.2.9 pkg-config-0.23_1 R-deps: libiconv-1.11_1 libxml2-2.7.3 php5-5.2.9 php5-session-5.2.9 pkg-config-0.23_1 WWW: _http://eaccelerator.net/ # cd /usr/ports/www/eaccelerator && make install clean ~~~~ You have installed the eaccelerator package. Edit /usr/local/etc/php.ini and add: zend_extension="/usr/local/lib/php/20060613/eaccelerator.so" Then create the cache directory: mkdir /tmp/eaccelerator chown www /tmp/eaccelerator chmod 0700 /tmp/eacceleratorПрописываем запуск модуля в основной php.ini, но если у вас FastCGI, то у каждого хоста\юзверя будет свой файл и необходимо добавлять эту строчку в нужный php.ini.
# echo "zend_extension="/usr/local/lib/php/20060613/eaccelerator.so"" >> /usr/local/etc/php.iniЕсли вы хотите всем и сразу внедрить eAccelerator, то правильней будет добавлять здесь.
Информацию о eAccelerator можно прочитать здесь.
# cat /usr/local/share/doc/eaccelerator/README |moreМеня, например не устраивало расположение eaccelerator.cache_dir и я его поменял и тп.
# Для установки как модуля Zend: zend_extension="/usr/lib/php4/eaccelerator.so" eaccelerator.shm_size="16" eaccelerator.cache_dir="/tmp/eaccelerator" eaccelerator.enable="1" eaccelerator.optimizer="1" eaccelerator.check_mtime="1" eaccelerator.debug="0" eaccelerator.filter="" eaccelerator.shm_max="0" eaccelerator.shm_ttl="0" eaccelerator.shm_prune_period="0" eaccelerator.shm_only="0" eaccelerator.compress="1" eaccelerator.compress_level="9" # Если вы используете нити безопасной сборки PHP то вы должны использовать # "zend_extension_ts" вместо "zend_extension". # Для установки как модуля PHP: extension="eaccelerator.so" eaccelerator.shm_size="16" eaccelerator.cache_dir="/tmp/eaccelerator" eaccelerator.enable="1" eaccelerator.optimizer="1" eaccelerator.check_mtime="1" eaccelerator.debug="0" eaccelerator.filter="" eaccelerator.shm_max="0" eaccelerator.shm_ttl="0" eaccelerator.shm_prune_period="0" eaccelerator.shm_only="0" eaccelerator.compress="1" eaccelerator.compress_level="9"eaccelerator.cache_dir - Каталог, который используется для дискового кэша. Здесь eAccelerator хранит скомпилированный код, данные сессии, содержание записей пользователей. Те же данные могут храниться в общей памяти (для более быстрого доступа). Значение по умолчанию "/tmp/eaccelerator".
eaccelerator.enable - Включение или выключение eAccelerator. Включение "1" и чтобы отключить "0". Значение по умолчанию "1".
eaccelerator.optimizer - Включение или выключение внутреннего оптимизатора, которых может ускорить выполнение кода. Необходимо включить "1" и для того чтобы отключить "0". Значение по умолчанию "1".
eaccelerator.debug - Включение или выключение журнала отладки. Должно быть "1" для включения или "0" чтобы отключить. По умолчанию значение "0"
eaccelerator.check_mtime - Включение или выключение проверки изменения файлов PHP. Должно быть "1" для включения или "0" чтобы отключить. Вы должны выставить значение на "1", если потребуется проверить перекомпиляцию PHP файлов после изменения. Значение по умолчанию "1".
eaccelerator.filter - Определите, какие файлы PHP должна быть кэшированы. Вы можете указать типы шаблонов (например, "*.php *.phtml"), которое указывают направлять это в кэш или нет. Если шаблон начинается со символа "!" то это означает игнорировать файлы которые сопоставляются по следующему шаблону. Значение по умолчанию "", что означает, все PHP скрипты будут кэшироваться.
eaccelerator.shm_max - Отключает, размещения больших значений в общую память "eaccelerator_put ()" функции. Он указывает на большой допустимый размер в байтах (10240, 10K, 1М). "0" отключает лимит. Значение по умолчанию "0".
eaccelerator.shm_ttl - Когда eAccelerator не может получить в общей памяти место для нового сценария она удаляет все скрипты, которые не обращались к ней последние "shm_ttl" секунд из общей памяти. Значение по умолчанию "0", что означает - не удалять никакие файлы из общей памяти.
eaccelerator.shm_prune_period - Когда eAccelerator не может получить общей памяти для нового скрипта он должен удалить старый скрипт, если предыдущие попытки были сделаны более чем "shm_prune_period" секунд назад. Значение по умолчанию "0", что означает - не не удалять файлы из общей памяти.
eaccelerator.shm_only - Включение или выключение кэширование скомпилированных скриптов на диске. Это никак не влияет на данные сессии или содержание кэша. Значение по умолчанию "0", что означает - использовать диск и общую память для кэширования.
eaccelerator.compress - Включение или выключение сжатия кэшированного контента. Значение по умолчанию "1", что включает сжатие.
eaccelerator.compress_level - Уровень сжатия, использованный для содержимого кэша. Значение по умолчанию "9", что является максимальным значением.
eaccelerator.name_space - Эта строка для всех ключей. Она позволяет двум приложениям, которые используют одни и те же ключевые имена запускаться на том же хосте, установив это в htaccess либо в основном конфигурационном файле веб-сервера.
eaccelerator.keyseaccelerator.sessionseaccelerator.contentОпределите, какие ключи, данные сеанса и содержимого будут кэшироваться. Возможны следущие значения:"shm_and_disk" - кэш данных в общей памяти и на диске (значение по умолчанию)"shm" - данные кэша в общей памяти или на диске в общей памяти и при большом заполнением данными применяется "eaccelerator.shm_max""shm_only" - данные в кэше в общей памяти"disk_only" - данные в кэше в диске"none" - не кэшировать данные
eaccelerator.allowed_admin_path - Путь для скриптов, которым разрешено получать информацию и управление администратора.
После включения eAcceleratorа вы уже можете почувствовать разницу =)
Memcached
Часто система показывает падение производительности MYSQL, например, когда данные должны быть перемещены на более медленное устройство, например HDD и\или получены с него. Можно обойти эту ситуацию для данных, которых сохранять не нужно (например, данные о сеансе). Для этого можно использовать Memcached.
Port: pecl-memcached-0.1.4 Path: /usr/ports/databases/pecl-memcached Info: PHP extension for interfacing with memcached via libmemcached library Maint: [email protected] B-deps: ~~~ R-deps: ~~~ WWW: _http://pecl.php.net/package/memcachedMemcached не работает с CGI версией php5 и ему нужен CLI, а это убивает желание его использовать в моем примере, но вы можете его попробовать.
This port requires the CLI version of PHP, but you have alreadyinstalled a PHP port without CLI.
Mmemcached сохраняет данные в RAM и обслуживает данные с максимальной возможной скоростью недоступной HDD отсюда следует прирост производительности.
Apache
Теперь Apache...RAM - во первых отключите в Apache те модули, которые вами не используются.
MaxClients - RAM не резиновый и надо его экономить для этого будем корректировать [i]MaxClients[/i]. Воспользуемся утилитой [i]top[/i] чтобы понять сколько в среднем используется памяти для каждого запроса, у меня составило примерно 15 Mb на процесс вычислим значение, к примеру, у меня 1,5 Gb Ram.1024 Ram / 15 Ram на процесс = 70 (68,266) MaxClientsВот это значение 70 мы и выставляем в MaxClients.Но незабываем, что есть другие процессы которым тоже нужна RAM и поэтому учитывайте это при расчетах.
MaxRequestsPerChild - если RAM на сервере мало, а CPU быстрый то можно сделать так. При использовании памяти процессами, веб сервер имеет тенденцию увеличится до уровня самой требовательной к памяти страницы, которую обслуживает этот дочерний процесс, память можно вернуть установим низкое значение [i]MaxRequestsPerChild[/i] к примеру 300-400 (в зависимости от ситуации) Работа Apache несколько замедлится тк ему придется генерировать новые дочерние процессы, однако последние будут использовать меньше оперативной памяти. И в итоге мы сможем обслужить больше запросов при меньшем объеме памяти. Значение [i]0[/i] - означает, что дочерние процессы никогда не завершаются.
mod_expires - Этот модуль Apache позволяет посылать HTTP-заголовки Expires, кэшируя все статические файлы в пользовательском браузере, например в течение 2х недель либо до появления новых версий файлов. Касаемо файлов изображений, CSS, JavaScript и тп. В выводе меньший трафик и освобождение полосы пропускания.
# cat /usr/local/etc/apache2/httpd.conf |grep expires LoadModule expires_module libexec/apache2/mod_expires.soИ в .htaccess вашего CMS включите следующее.
# Requires mod_expires to be enabled. <IfModule mod_expires.c> # Разрешить истечение срока. ExpiresActive On # Кешировать все файлы сроком на 2 недели после доступа(A). ExpiresDefault A1209600 # Не кешировать динамически генерируемые страницы. ExpiresByType text/html A1 </IfModule>.htaccess - так же можно перенести директивы из .htaccess в httpd.conf. Поиск, чтение и разбор файлов .htaccess происходит при каждом запросе. С другой стороны httpd.conf читается один раз при запуске Apache. Вам будет необходимо перенести содержимое .htaccess в httpd.conf и запретить поиск файлов .htaccess в пределах корневого каталога сервера, установив AllowOverride в None
<Directory /> AllowOverride None ... </Directory>Это запретит Apache при каждом запросе проходить по дереву каталога в поисках .htaccess для его выполнения. В результате меньше работы и быстрее выполняется запрос.
FastCGI
Рекомендую использовать FastCGI в виду конечной скорости обработки. Не буду изобретать велосипед см Apache2 + php5 + mod_fastcgiПроцитирую wiki:
Интерфейс FastCGI — клиент-серверный протокол взаимодействия вебсервера и приложения, дальнейшее развитие технологии CGI. По сравнению с CGI является более производительным и безопасным.FastCGI ликвидирует множество ограничений CGI-программ. Проблема CGI-программ в том, что они должны быть перезапущены веб-сервером при каждом запросе, что приводит к понижению производительности.
Nginx
Так же на фронт можно установить и Nginx - про частичную установку его можно прочитать тут Веб сервер на много коннектов и высокую нагрузку (nginx+php-fpm+mysql)
MYSQL
Дошли и до муси. В MYSQL есть возможность кэширования часто встречающихся запросов в оперативной памяти, и при поступлении конкретного запроса в MYSQL она возвратит его непосредственно из кеша. Однако в MYSQL по умолчанию эта функция отключена. И нам необходимо править конфигурационный файл MYSQL my.cnf. Для примера добавим кэш размером в 64МБ. И на будущее с этим кэшом необходимо экспериментировать, чтобы добиться максимальной эффективности. Слишком маленький кэш приведет к тому, что кэшируемые запросы очень часто будут недействительными, а чересчур большой повлечет за собой относительно длительный поиск в кэше. Память будет неэффективно использоваться хотя, могла бы пригодится другим службам.
# Включаем кэш запросов равным 64МБ query_cache_size=64M # Для индификации ресурсоемких запросов включаем следующее. long_query_time = 5 log-slow-queries = /var/log/mysql/slow.log # Что приведет к регистрации всех запросов, # для которых требуется больше 5 секунд (порог можете менять)Создаем лог меделенных запросов.
# touch /var/log/mysql/slow.log # chown mysql:mysql /var/log/mysql/slow.logПерезапустим mysql-server
/usr/local/etc/rc.d/mysql-server restartПроверим настройку
mysql -u otor --password=***** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 692516 Server version: 5.0.77 FreeBSD port: mysql-server-5.0.77_1 Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> show variables like 'query_cache%'; +------------------------------+----------+ | Variable_name | Value | +------------------------------+----------+ | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 67108864 | | query_cache_type | ON | | query_cache_wlock_invalidate | OFF | +------------------------------+----------+ 5 rows in set (0.00 sec)Как видим мы включили кэш (query_cache_type ON) и установили размер его равным 64МБ (query_cache_size 67108864)
Изменение типа таблиц с MyISAM на InnoDB
MYSQL использует два варианта типа таблиц MyISAM и InnoDB. По умолчанию MYSQL использует MyISAM.MyISAM использует блокировку на уровне таблиц, а InnoDB на уровне строк. Блокировка очень важна для сохранения целостности базы данных она препятствует одновременному обновлению одних и тех же данных двумя разными процессами БД. Посмотрим, является ли причиной плохой производительности блокировка таблиц. Для этого посмотрим кол-во конфликтных блокировок в MySQL это Table_locks_immediate и Table_locks_waited
mysql> show status like 'Table%'; +-----------------------+-------+ | Variable_name | Value | +-----------------------+-------+ | Table_locks_immediate | 29958 | | Table_locks_waited | 0 | +-----------------------+-------+ 2 rows in set (0.00 sec)Table_locks_immediate - количество случаев, когда блокировка таблицы была получена немедленно.Table_locks_waited - когда получение блокировки таблиц сопровождалось ожиданием. Если это значение велико, то у вас проблемы =)Если у вас CMS, например Drupal то можно некоторые таблицы преобоазовать в InnoDB, например cache, watchdog, session, acceslog делается это так.
mysql> alter table cache type='InnoDB';(Для настройки производительности MYSQL можно загрузить сценарий MySQL Performance Tuning Primer Script) который позволяет корректировать переменные сервера MySQL.
TMPFS
TMPFS - нахождение tmp в RAM, что быстрей и эффективней чем бы, он располагался на диске. TMPFS появился только в 7.x версии FreeBSD.Посмотрим настройки.Для включения в ядро добавьте:
Если не хотите встраивать в ядро можете добавить модуль в loader.conf:
Переменные
gid - root группа(group) id. uid - root пользователь(user) id. mode - разрешений в восьмеричной форме. inodes - максимальное количество индексных дескрипторов. size - максимальный размер (в байтах) для файловой системы.Вручную можно примонтировать так:
mount -t tmpfs -o size=1024M tmpfs /tmpНезабудем добавить в fstab и закомментить старый слайс tmp и добавить новый.
#/dev/mirror/gm0s1f /tmp ufs rw 2 2 tmpfs /tmp tmpfs rw 0 0Совет
Для корректной работы MSQL с TMPFS вам необходимо выставить правильные права на директорию /tmp и примонтировать tmpfs или перезагрузится.
Перезагрузитесь и tmpfs вас порадует. =)
Заключение
В свете вышесказанного и при применении даже некоторой части рекомендованного здесь вы увидите как ваш веб сервер "оживет". Ну, если этого не произошло или вы не добились значительных результатов, то видимо вам пришло время закупать более мощное железо и не выдумывать "изощренные" методы оптимизации.
Дополнительные материалыwww.ignix.ru
Link aggregation - Windows + Intel + ANS + LACP
OS: Microsoft Windows 2003 Standart SP2.Hard: Intel PRO/1000 PF Dual Port Server Adapter.Задача: обеспечить высокий уровень надёжности передачи данных через сетевые адаптеры "Intel PRO Dual Port Server Adapter" для сервера под управлением "Microsoft Windows 2003" вкупе с увеличением пропускной способности каналов в соответствии со спецификацией IEEE 802.3ad (LACP).
Как я уже упоминал в заметке, Microsoft не поддерживает агрегирование каналов передачи данных на уровне системы, полагая (видимо), что проще отдать разработку таких решений тем, кто сможет и захочет это сделать, снимая с себя ответственность за потенциально нестабильную работу на массе оборудования, протестировать которое весьма и весьма трудоёмкая задача.
Подавляющее большинство производителей современных серверов устанавливают сетевые адаптеры, основанные на наборе микросхем компаний "Broadcom" и "Intel". Предположим, что у нас на борту сетевая карта "Intel PRO Dual Port Server Adapter" и мы хотели ли бы установить оригинальные драйверы, а так же специализированное программное обеспечение, позволяющее настроить агрегирование каналов.
Для начала определяем, какое именно оборудование мы пытаемся запустить в работу:
Adapter Teaming. Intel. Microsoft Windows 2003: Выясняем идентификаторы модели и модификации устройства.
Vendor (производитель) и Device (устройство) идентификаторы следующие:VEN_8086 & DEV_105E
С идентификаторами модели и модификации устройства идём на сайт производителя и выясняем, что мы имеем:Имеем мы следующее:D53756-xxxIntel® PRO/1000 PF Dual Port Server AdapterEXPI9402PF / EXPI9402PFBLK2xLC, 1000Full, PCI-e, 82571GB / VendorID:8086, DevID:105E
Идём по предложенным ссылкам и скачиваем пакет драйверов для устройства в комплекте со специализированным программным обеспечением ANS (Advanced Networking Services), предназначенным, в частности, для агрегированных адаптеров:Network Adapter Drivers for Windows Server 2003* - Installs Ethernet drivers. Includes Intel® PROSet for Windows Device Manager*, advanced networking services (ANS) for teaming and VLANs, and SNMP.
Далее, естественно, запускаем инсталлятор и проходим этапы подготовки, явно указывая при этом на необходимость установки специализированного программного обеспечения ANS (Advanced Networking Services):Adapter Teaming. Intel. Microsoft Windows 2003: Выбираем установку ANS в комплекте с драйверами адаптера.
Некоторое время наблюдаем модальное окошко, пока умная программа шустрит и делает то, что ей положено:Adapter Teaming. Intel. Microsoft Windows 2003: Идёт процесс инсталляции драйверов для сетевых адаптеров Intel.
Итак, драйверы установлены. Проводим предварительную подготовку сетевых адаптеров. Следует иметь в виду то, что расширенный функционал, предоставляемый драйверами и специализированными приложениями Intel для сетевых адаптеров, вроде ANS и VLAN, доступен только с консоли RDP #0 или с физического терминала.Прежде всего, для всех сетевых интерфейсов, задействованных в объединении, необходимо установить единые значения для ряда параметров. Следует в явном виде указать скорость и режим передачи данных, например: "100 Mb & Full" (естественно, на стороне коммутатора необходимо заранее обеспечить работу интерфейсов в аналогичном режиме):
Adapter Teaming. Intel. Microsoft Windows 2003: Явно определяем параметры сетевого адаптера.
Далее следовало бы отключить поддержку "Checksum Offload", "Receive Side Scaling" и "NetDMA" (всё это - функционал "Scalable Networking Pack", предназначенный для оптимизации обработки "прямых" потоков данных), но утилита ANS от Intel оказалась самой умной из всех ранее мною используемых для агрегирования и сама отлично справляется со всеми этими настройками. Кому интересно, что к чему, может почитать эту заметку - не вижу смысла здесь повторяться.Переходим на вкладку настройки агрегирования любого задействованного нами сетевого адаптера. Инициируем создание нового группового подключения:
Adapter Teaming. Intel. Microsoft Windows 2003: Инициируем создание агрегированного виртуального сетевого интерфейса.
Выбираем произвольное говорящее имя для создаваемого виртуального сетевого интерфейса:Adapter Teaming. Intel. Microsoft Windows 2003: Указываем произвольное имя для вирутального интерфейса.
Явно указываем, какие именно сетевые адаптеры будут объединены:Adapter Teaming. Intel. Microsoft Windows 2003: Явно указываем, какие сетевые адаптеры будут агрегированны.
Выбираем тип агрегирования, в нашем случае это 802.3ad (LACP):Adapter Teaming. Intel. Microsoft Windows 2003: Выбираем тип агрегирования.
В самом простом случае - это всё. После нажатия кнопки "Finish" будет создан новый виртуальный групповой интерфейс и сброшены TCP/IP параметры подчинённых интерфейсов. Если в сети налажен DHCP, то групповой интерфейс получит параметры автоматически (IP, mask, gayeway, DNS), в противном случае - настраиваем его вручную:Adapter Teaming. Intel. Microsoft Windows 2003: Общий вид списка сетевых интерфейсов после осуществления агрегирования.
Естественно, с момента инициирования создания нового группового соединения (с сопутствующим сбросом TCP настроек задействованных сетевых интерфейсов) и до момента настройки TCP/IP на новом виртуальном интерфейсе сетевое взаимодействие будут невозможным. Кроме того, как это водится, операционная система Microsoft Windows запросит перезагрузку, обнаружив "новое устройство".Ясно, что необходимо обеспечить поддержку LACP на всех сторонах сетевого взаимодействия. Как это сделать для Cisco Catalyst я писал здесь. После того, как поддержка LACP обеспечена на обеих взаимодействующих сторонах, можно подключать второй сетевой линк (или третий, если будет угодно):
Adapter Teaming. Intel. Microsoft Windows 2003: Состояние задействованных в агрегировании сетевых адаптеров.
Чем больше линков сгруппируем, тем большую надёжность и суммарную пропускную способность получим:Adapter Teaming. Intel. Microsoft Windows 2003: Состояние агрегированного сетевого интерфейса.
www.umgum.com
Простая лаба по LACP или агрегирование портов.
Хай. Сегодня вкратце разберемся, что такое агрегация портов на коммутаторе и для чего она нужна. Допустим есть такая топология:
Два коммутатора L3, ферма серверов подключена к одному, пользователи к другому. Для обеспечения доступности серверов и повышения пропускной способности между коммутаторами можно использовать агрегацию каналов. То есть, мы берем три физических интерфейса на коммутаторе и объединяем их в один как-бы логический интерфейс. При использовании разных протоколов, мы получим разные настройки. В данном случае будем использовать протокол LACP (еще есть проприетарный PAGP и статическое агрегирование). LACP позволяет избежать петель и использовать до 16 каналов (8 standby). Порты для агрегации должны иметь одинаковые настройки, то есть одинаковый транк-статус, одинаковую скорость, дуплекс и пр. Кроме того они должны быть физически одинаковы, то есть если берем с одной стороны порты FastEthernet, а с другой GigaEthernet, то работать агрегация не будет.Итак, у нас в топологии мы берем с каждой стороны порты Fa0/1, Fa0/2 и Fa 0/3. Серверы у нас в VLAN 200 и пользователи в VLAN 100.Создаем логический интерфейс на обоих коммутаторах:
interface Port-channel 1description ETHERCHANNELswitchport trunk allowed vlan 100,200switchport trunk encapsulation dot1qswitchport mode trunk
Теперь на портах для нашей агрегации производим такие настройки, так же на обеих сторонах:
interface FastEthernet0/1channel-protocol lacpchannel-group 1 mode activeswitchport trunk allowed vlan 100,200switchport trunk encapsulation dot1qswitchport mode trunk!interface FastEthernet0/2channel-protocol lacpchannel-group 1 mode activeswitchport trunk allowed vlan 100,200switchport trunk encapsulation dot1qswitchport mode trunk!interface FastEthernet0/3channel-protocol lacpchannel-group 1 mode activeswitchport trunk allowed vlan 100,200switchport trunk encapsulation dot1qswitchport mode trunk
Некоторые моменты:channel-protocol lacp – указывает какой мы используем протокол.channel-group 1 mode active – указываем номер логического интерфейса и опция ACTIVE означает, что мы включили LACP принудительно, несмотря что у нас там на другой стороне, в то время как настройка PASSIVE – будет означать, что канал заработает, как только придет сообщение протокола LACP. А если указать опцию DESIRABLE, то вместо протокола LACP заработает протокол PAGP.
Проверяем наш агрегированный канал:
Switch A#sh etherchannel summary Flags: D – down P – in port-channelI – stand-alone s – suspendedH – Hot-standby (LACP only)R – Layer3 S – Layer2U – in use f – failed to allocate aggregatoru – unsuitable for bundlingw – waiting to be aggregatedd – default port
Number of channel-groups in use: 1Number of aggregators: 1
Group Port-channel Protocol Ports——+————-+———–+———————————————-
1 Po1(SU) LACP Fa0/1(P) Fa0/2(P) Fa0/3(P)
Видно, что использован протокол LACP. И все три физ. интерфейса объединены в логический.
P.S. даже такие вещи уровня CCNP делаются в обычном Packet tracer. В GNS3 пытался, но там можно только статический etherchannel.
www.itkitchen.net
Агрегация каналов (Link aggregation, trunking)
В процессе своей работы я заменил 2 сервера на один. В итоге у меня в наличие оказалось 2 кабель канала, две сетевые карты 3com по 100мб каждая, один сервер и свитч D-Link DES-3028. И я задумал увеличить пропускную способность сервера путем создания агрегации каналов.
Содержание:
Введение
Агрегация каналов (англ. Link aggregation, trunking) или IEEE 802.3ad — технология объединения нескольких физических каналов в один логический. Это способствует не только значительному увеличению пропускной способности магистральных каналов коммутатор—коммутатор или коммутатор—сервер, но и повышению их надежности. Хотя уже существует стандарт IEEE 802.3ad, многие компании еще используют для своих продуктов патентованные или закрытые технологии.
Главное преимущество агрегации каналов в том, что радикально повышается скорость — суммируется скорость всех используемых адаптеров. В случае отказа адаптера трафик посылается следующему работающему адаптеру, без прерывания сервиса. Если же адаптер вновь начинает работать, то через него опять посылают данные.
Использование в параллель несколько Ethernet-адаптеров выглядит так. Допустим есть два адаптера Ethernet: eth0 и eth2. Их можно объединить в псевдо-Ethernet-адаптер eth4. Система распознает эти агрегированные адаптеры как один. Все агрегированные адаптеры настраиваются на один MAC-адрес, поэтому удалённые серверы обращаются с ними как с одним адаптером. eth4 можно настроить на один IP адрес, как любой Ethernet адаптер. Из-за этого программы обращаются к нему как к самому обычному адаптеру, скорость которого в два раза выше.
Для реализации на FreeBSD мы будем использовать lagg - агрегация линков и интерфейс отказоустойчивый линков. Интерфейс lagg позволяет агрегировать нескольких сетевых интерфейсов, как один виртуальный интерфейс, тем самым обеспечивается отказоустойчивость и увеличение высокоскоростной связи.Интерфейс lagg может быть создан с помощью команды ifconfig laggN create. Вы можете использовать различные типы агрегирования протоколов, указанной с помощью параметра proto laggproto. Дочерние интерфейсы могут быть добавлены с помощью laggport child-iface option и удалены с помощью параметра -laggport child-iface option.
Типы агригации
В настоящее время драйвер поддерживает агрегирования протоколов
- failover (по умолчанию)
- fec
- lacp
- loadbalance
- roundrobin
Протоколы определяют, какие порты используются для исходящего трафика или конкретный порт принимает входящий трафик. Состояние интерфейса используется для проверки линка является ли он активным или нет.
Режимы работы:Failover [failover] - Это режим по умолчанию. В этом режиме один из портов является мастер портом и все данные, получаются через этот порт. В случае отказа мастер порта будет использован следующий активный порт.
Cisco® Fast EtherChannel® - Cisco FAST EtherChannel [fec] - это статическая настройка и не согласовывает агрегацию или обмена кадрами и не следить за линком. Если коммутатор поддерживает LACP, то следует использовать LACP вместо FEC.
FEC балансировка исходящий трафик через активных портов, на основе информации, заголовка хешированного протокола и принимает входящий трафик через любой активный порт. Хеш-значение включает Ethernet адреса источника и назначения и если таковые имеются то и VLAN тег, IPv4/IPv6 адреса источника и назначения.
LACP [lacp]- IEEE® 802.3ad Link Aggregation Control Protocol (LACP) и протокол маркера. LACP проведет согласования и набор агрегатных линков в одну или несколько Link Aggregated Groups (LAG). Каждый LAG состоит из портов с одинаковой скоростью и установленной full-duplex операцией. Трафик будет сбалансированным через порты в LAG с наибольшим общей скоростью, в большинстве случаев будет существовать только один LAG, который будет содержать все порты. В случае возникновения изменений в физического подключения каналов связи LACP будет быстро изменять работу к новой конфигурации.LACP балансировка исходящего трафика через активные порты, на основе информации, заголовка по хешированному протоколу и принимает входящий трафик с любого активного порта. Хеш-значение включает Ethernet адреса источника и назначения и, если таковые имеются, VLAN тег и IPv4/IPv6 адреса источника и назначения.
Loadbalance [loadbalance] - Является псевдонимом FEC режим.
Round-robin [roundrobin] - Распространяет исходящий трафик, с помощью планировщика циклически через все активные порты и принимает входящий трафик из любого активного порта. Этот режим является нарушением кадра Ethernet и следует использовать с особой осторожностью.
None [none] - Этот протокол предназначен чтобы ничего не делать: он отключает любой трафик без отключения lagg интерфейса.
Настройка
Для начало необходимо подключить модуль есть два варианта.1. в loader.conf добавить строчку if_lagg_load="YES" и перезагрузится или вручную подгрузить модуль.
# echo 'if_lagg_load="YES"' >> /boot/loader.conf # reboot Если вы хотите без перезагрузки системы то выполните следующее:2. или включить поддержку lagg в ядро и пересобрать его с последующей перезагрузкой
Пример LACP
Создадим 802.3ad линк агрегирования с помощью LACP с двумя em интерфейсами:
# ifconfig lagg0 create # ifconfig em0 up # ifconfig em1 up # ifconfig lagg0 laggproto lacp laggport em0 laggport em1 \ 192.168.1.1 netmask 255.255.255.0Пример Failover
Создадим отказоустойчивый режим который можно использовать для перехода на вторичный интерфейс при потери связи на основном интерфейсе. Создадим и настроим интерфейс lagg0, с em0 как основной интерфейс и em1 как дополнительный интерфейс:
# ifconfig lagg0 create # ifconfig lagg0 up laggproto failover laggport em0 laggport em1Интерфейс будет выглядеть следующим образом, и основные различия будут в MAC-адресе и имени устройства:
# ifconfig lagg0 lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=8<VLAN_MTU> ether 00:05:5d:71:8d:b8 media: Ethernet autoselect status: active laggproto failover laggport: em1 flags=0<> laggport: em0 flags=5<MASTER,ACTIVE>Трафик будет передано и полученных по em0. Если связь теряется на em0 то em1 становится активным линком. Если связь восстанавливается на интерфейсе мастера то снова em0 станет активным линком.
Пример Failover роуминга
В следующем примере используется активный отказоустойчивый интерфейс для настройки роуминга между проводными и беспроводными сетями, используя два сетевых устройств. И всякий раз, когда проводной master интерфейс не подключен, беспроводной интерфейс будет использоваться:
# ifconfig em0 up # ifconfig ath0 nwid my_net up # ifconfig lagg0 laggproto failover laggport em0 laggport ath0 \ 192.168.1.1 netmask 255.255.255.0Стартап
Настроим запуск агрегации LACP при перегрузки системы:
# echo 'ifconfig_xl0="up"' >> /etc/rc.conf # echo 'ifconfig_xl1="up"' >> /etc/rc.conf # echo 'cloned_interfaces="lagg0"' >> /etc/rc.conf # echo 'ifconfig_lagg0="laggproto lacp laggport xl0 laggport xl1 192.168.0.1 netmask 255.255.255.0"' >> /etc/rc.conf # rebootПроверим
# ifconfig xl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=9<RXCSUM,VLAN_MTU> ether 00:04:79:66:4b:ae media: Ethernet autoselect (100baseTX <full-duplex>) status: active lagg: laggdev lagg0 xl1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=8<VLAN_MTU> ether 00:04:79:66:4b:ae media: Ethernet autoselect (100baseTX <full-duplex>) status: active lagg: laggdev lagg0 lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384 inet6 fe80::1 prefixlen 64 scopeid 0x3 inet6 ::1 prefixlen 128 inet 127.0.0.1 netmask 0xff000000 lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500 options=8<VLAN_MTU> ether 00:04:79:66:4b:ae inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255 media: Ethernet autoselect status: active laggproto lacp laggport: xl1 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING> laggport: xl0 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>Свитч
Настроим работу коммутатор 2го уровня D-Link DES-3028.
DES-3028:4#config lacp_port 1-2 mode active DES-3028:4#create link_aggregation group_id 1 type lacp DES-3028:4#config link_aggregation group_id 1 master_port 1 ports 1-2 state enableЗаключение
Смотрим systat и скорость копирования.
/0 /1 /2 /3 /4 /5 /6 /7 /8 /9 /10 Load Average | /0% /10 /20 /30 /40 /50 /60 /70 /80 /90 /100 root idle: cpu0 XXXXXXXXXXXXXXXXX root irq19: xl1 XXXXXXXXXXXXX ftp proftpd XX root irq18: xl0 XXXX В итоге обе сетевые карты работают, скорость определенно возрастает с нашим настроением =).Есть ограничения в работе агрегации см. ITworld.com - Link Aggregation with 802.3ad.
- Все порты при агрегации должны быть одного типа (CAT-5E/6, SM или MM и тп).
- Порты должны действовать на одной скорости.
- Агрегировать канал можно до скорости 8-гигабит/сек.
- Свитч может поддерживать 802.3ad. (но можно и без этого если сетевые карты такой режим поддерживают)
Ссылки
Дополнительные материалыwww.ignix.ru