Назад | Перейти на главную страницу

Узкое место пропускной способности на виртуальной машине VMWare ESX

У меня есть 2 виртуальных сервера apache с балансировкой нагрузки, которые обрабатывают пару тысяч запросов в минуту, и я пытаюсь диагностировать узкое место, которое их замедляет.

Каждый из моих веб-серверов имеет по одному виртуальному сетевому адаптеру, а их хосты VMWare имеют 7 гигабитных сетевых адаптеров на каждом из них. Все эти физические сетевые карты подключены к портам коммутатора 100 Мбит / с.

Сначала я подумал, что хосты VMWare будут объединять всю доступную им полосу пропускания и передавать ее виртуальным машинам в соответствии с требованиями. Однако сейчас мне интересно, не ошибаюсь ли я в этом.

Как мой коллега объяснил это мне, если бы у меня был только один виртуальный Сетевая карта в виртуальной машине будет привязана к одной физической сетевой карте, а не агрегировать пропускную способность всех из них - так что в моей ситуации это ограничено пропускной способностью порта коммутатора до 100 Мбит / с. это правильно?

Кроме того, будут ли два соединения со скоростью 100 Мбит / с (по одному на каждом сервере) узким местом на сайте, который обрабатывает только 1000–2000 запросов в минуту?

Что касается команды NIC, ваш коллега более или менее прав.

По умолчанию объединение сетевых адаптеров в ESX сопоставляет каждую виртуальную сетевую карту в вашей виртуальной машине с не замужем восходящий канал (физические сетевые адаптеры) на vSwitch, к которому он подключен. Конкретные политики балансировки нагрузки сетевого адаптера:

  • Идентификатор порта: весь трафик от каждой виртуальной сетевой карты сопоставляется с одним восходящим каналом в зависимости от номера порта.
  • Исходный хэш Mac: весь трафик от каждой виртуальной сетевой карты сопоставляется с одним восходящим каналом на основе хэша MAC-адреса виртуальной сетевой карты.
  • IP-хэш: для выбора восходящего канала используется хэш IP-адресов источника и назначения для IP-трафика.

Из этих трех только IP-хеширование даст эффект агрегации. ESX может управлять только выбором пути исходящего трафика, поэтому для правильного распределения входящего и исходящего трафика ваши физические коммутаторы также должны быть настроены соответствующим образом для агрегации портов (Etherchannel \ LACP).

Здесь есть очень полезная статья в базе знаний VMware. о том, как настроить различные коммутаторы (Cisco \ HP) так, чтобы распределялся как входящий трафик (где коммутатор должен решать выбор пути), так и исходящий (где ESX обрабатывает выбор пути).

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

Чтобы ответить на ваш второй вопрос - это зависит от того, сколько данных включает каждый запрос. Одно 100-мегабитное соединение может передавать около 8000 пакетов в секунду, возможно, больше, если размер полезной нагрузки намного меньше 1500 байт. Однако (массовое упрощение и игнорирование накладных расходов), если типичный запрос, например, включает 30 КБ данных, то для выполнения каждого из них потребуется 20 пакетов, поэтому сетевая карта теоретически может обрабатывать около 250 таких запросов в секунду. Если ваши запросы включают в себя 1 мегабайт трафика в среднем, вы в лучшем случае снизитесь до 7/8 запросов в секунду, а при нормальных условиях я бы сказал, что у вас все будет хорошо, если фактические цифры будут> 50% от этих показателей.

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