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

Как преодолеть ограничение iSCSI в 1 Гбит между ESXi и VNXe

У меня большие проблемы с моей сетью iSCSI, и я не могу заставить ее работать так быстро, как могла.

Так что я испробовал практически все, чтобы получить полную производительность от моей SAN, привлекая специалистов VMware и EMC.

Краткое описание моего оборудования: 3x HP DL360 G7 / vSphere 5.5 / 4 встроенных сетевых адаптера / 4 PCIe Intel NIC для iSCSI 2x HP 2510-24G 1x EMC VNXe 3100/2 процессора хранения, каждый с 2 ​​выделенными сетевыми картами iSCSI / 24x 15k SAS RAID10 / 6 дисков SAS RAID6 7.2k

Я применил передовой опыт и равномерно разместил пулы хранения на обоих iSCSI-серверах. Я создал 2 сервера iSCSI, по одному на каждый процессор хранения. См. Изображение для моей конфигурации iSCSI.

iSCSI-трафик разделяется через VLAN (запретить для других VLAN), я даже пробовал это с другим коммутатором HP серии 29xx. Управление потоком включено (тоже пробовал отключать), Jumbo отключен. Нет никакой маршрутизации.

На хостах ESX используются все сетевые карты iSCSI, так как я использовал настройку Round Robin для каждого хранилища данных. Я также попробовал это с политикой смены пути 1 IO, так как многие другие, похоже, таким образом достигли производительности. Я тоже пробовал внутренние сетевые карты (Broadcom), но разницы нет. На коммутаторах я вижу, что порты используются очень равномерно, на стороне ESX и стороне VNXe. У меня идеальная балансировка нагрузки, ОДНАКО: в сумме я не могу преодолеть 1 Гбит. Я понимаю, что VNXe оптимизирован для нескольких подключений, и Round Robin тоже в этом нуждается, но даже когда я использую vMotion для хранения между 2 хостами и 2 хранилищами данных (с использованием разных серверов iSCSI), я вижу прямую линию около 84 Мбит / s через веб-интерфейс Unisphere. Я так часто вижу эту строку с одним и тем же значением, что не могу поверить, что мои диски не справились бы с большей нагрузкой или задачи были недостаточно требовательными. Становится еще лучше: имея только один кабель на каждом хосте и каждом процессоре хранения, я добиваюсь ОДНОЙ производительности. Так что у меня много избыточности, но никакой дополнительной скорости.

Поскольку я видел, как многие люди говорят о своей производительности iSCSI, я отчаянно пытаюсь выяснить, что не так с моей конфигурацией (которая была протестирована и проверена обученными людьми из VMware и EMC). Благодарю за каждое мнение!

РЕДАКТИРОВАТЬ:

Да, я настроил vMotion на использование нескольких сетевых адаптеров. Кроме того, хранилище vMotion всегда проходит через адаптеры iSCSI, а не через адаптеры vMotion. Я приложил скриншоты своей конфигурации.

Я знаю, что Storage vMotion не является эталоном, однако мне приходилось делать много этого в последние несколько дней, и верхний предел всегда составлял около 80 МБ / с. Пул из 6 дисков SAS по 15 тыс. 600 ГБ в массиве RAID 10 легко сможет обеспечить гораздо больше, не так ли? Я сделал для вас тест IO Meter - попробовал некоторые из них, самый быстрый был 256 КБ при 100% чтении. Получил 64,45 МБ / с - примерно такая же скорость у меня и Unisphere. Это виртуальная машина, которая хранится в пуле из 6 дисков SAS по 15 тыс. 300 ГБ (RAID 10), что практически не вызывает каких-либо других действий в это время суток.

РЕДАКТИРОВАТЬ2:

Извините за повторяющиеся имена пользователей, но я написал этот вопрос на работе, и он не использовал мое имя пользователя, которое я уже получил на Stock Overflow. Однако вот скриншот, показывающий мои настройки Round Robin. Это одинаково на всех хостах и ​​во всех магазинах.

Создайте правило SATP для поставщика хранилища с именем EMC, установите политику пути как Round Robine и IOPS по умолчанию с 1000 до 1. Это будет постоянство при перезагрузках, и это правило будет применяться каждый раз, когда будут представлены новые LUN ​​EMC iSCSI. Чтобы это применимо к существующим логическим модулям EMC iSCSI, перезагрузите хост.

esxcli storage nmp satp rule add --satp="VMW_SATP_DEFAULT_AA" \
  --vendor="EMC" -P "VMW_PSP_RR" -O "iops=1"

Я поигрался с изменением IOPS от 1 до 3 и обнаружил, что лучше всего работает на одной виртуальной машине. Тем не менее, если у вас много виртуальных машин и много хранилищ данных, 1 может быть не оптимальным ...

Убедитесь, что для каждого интерфейса VNXe установлено значение 9000 MTU. Кроме того, для vSwitch с вашими интерфейсами iSCSI должно быть установлено значение 9000 MTU вместе с каждым VMKernel. На своем VNXe создайте два сервера iSCSI - один для SPA и один для SPB. Первоначально свяжите по одному IP-адресу для каждого. Затем просмотрите сведения о каждом сервере iSCSI и добавьте дополнительные IP-адреса для каждого активного интерфейса для каждого SP. Это даст вам желаемую производительность циклического перебора.

Затем создайте как минимум два хранилища данных. Свяжите одно хранилище данных с iSCSIServer-SPA, а другое - с iSCSIServer-SPB. Это гарантирует, что один из ваших SP не будет простаивать.

Наконец, все интерфейсы на стороне ESX, которые используются для iSCSI, должны перейти в отдельный vSwitch со всеми интерфейсами как активными. Однако вам понадобится VMkernel для каждого интерфейса на стороне ESX в этом назначенном vSwitch. Вы должны переопределить порядок переключения vSwitch для каждого VMKernel, чтобы иметь один активный адаптер, а все остальные - неиспользуемые. Это мой сценарий развертывания, который я использовал для подготовки хостов ESX. Каждый хост имеет в общей сложности 8 интерфейсов: 4 для LAN и 4 для трафика iSCSI / VMotion.

  1. Выполните конфигурацию ниже

а. # DNS esxcli network ip dns search add --domain = mydomain.net

esxcli network ip dns server add --server = X.X.X.X

esxcli network ip dns server add --server = X.X.X.X

б. # установить соответствующее обновление имени хоста

Имя хоста системы esxcli установлено --host = server1 --domain = mydomain.net

c. # добавить аплинки в сеть vSwitch0 esxcli vswitch standard uplink add --uplink-name = vmnic1 --vswitch-name = vSwitch0

esxcli network vswitch standard uplink add --uplink-name = vmnic4 --vswitch-name = vSwitch0

esxcli network vswitch standard uplink add --uplink-name = vmnic5 --vswitch-name = vSwitch0

d. # создать vSwitch1 для хранения и установить MTU равным 9000

esxcli network vswitch standard add --vswitch-name = vSwitch1

Стандартный набор vswitch сети esxcli --vswitch-name = vSwitch1 --mtu = 9000

е. # добавить аплинки к vSwitch1

esxcli network vswitch standard uplink add --uplink-name = vmnic2 --vswitch-name = vSwitch1

esxcli network vswitch standard uplink add --uplink-name = vmnic3 --vswitch-name = vSwitch1

esxcli network vswitch standard uplink add --uplink-name = vmnic6 --vswitch-name = vSwitch1

esxcli network vswitch standard uplink add --uplink-name = vmnic7 --vswitch-name = vSwitch1

f. # установить активную сетевую карту для vSwitch0

esxcli network vswitch standard policy failover set --vswitch-name = vSwitch0 --active-uplinks = vmnic0, vmnic1, vmnic4, vmnic5

грамм. # установить активную сетевую карту для vSwitch1

esxcli network vswitch standard policy failover set --vswitch-name = vSwitch1 --active-uplinks = vmnic2, vmnic3, vmnic6, vmnic7

час # создать группы портов для iSCSI и vmkernels для ESX01, а не для ESX02

esxcli network vswitch standard portgroup add --portgroup-name = iSCSI-vmnic2 --vswitch-name = vSwitch1

esxcli сетевой IP-интерфейс добавить --interface-name = vmk2 --portgroup-name = iSCSI-vmnic2 --mtu = 9000

esxcli сетевой IP-интерфейс ipv4 set --interface-name = vmk2 --ipv4 = 192.158.50.152 --netmask = 255.255.255.0 --type = static

vim-cmd hostsvc / vmotion / vnic_set vmk2

esxcli network vswitch standard portgroup add --portgroup-name = iSCSI-vmnic3 --vswitch-name = vSwitch1

esxcli сетевой IP-интерфейс добавить --interface-name = vmk3 --portgroup-name = iSCSI-vmnic3 --mtu = 9000

esxcli сетевой IP-интерфейс ipv4 set --interface-name = vmk3 --ipv4 = 192.158.50.153 --netmask = 255.255.255.0 --type = static

vim-cmd hostsvc / vmotion / vnic_set vmk3

esxcli network vswitch standard portgroup add --portgroup-name = iSCSI-vmnic6 --vswitch-name = vSwitch1

esxcli сетевой IP-интерфейс добавить --interface-name = vmk6 --portgroup-name = iSCSI-vmnic6 --mtu = 9000

esxcli сетевой IP-интерфейс ipv4 set --interface-name = vmk6 --ipv4 = 192.158.50.156 --netmask = 255.255.255.0 --type = static

vim-cmd hostsvc / vmotion / vnic_set vmk6

esxcli network vswitch standard portgroup add --portgroup-name = iSCSI-vmnic7 --vswitch-name = vSwitch1

esxcli сетевой IP-интерфейс добавить --interface-name = vmk7 --portgroup-name = iSCSI-vmnic7 --mtu = 9000

esxcli сетевой IP-интерфейс ipv4 set --interface-name = vmk7 --ipv4 = 192.158.50.157 --netmask = 255.255.255.0 --type = static

vim-cmd hostsvc / vmotion / vnic_set vmk7

я. # создать группы портов для iSCSI и vmkernels для ESX02, а не для ESX01

esxcli network vswitch standard portgroup add --portgroup-name = iSCSI-vmnic2 --vswitch-name = vSwitch1

esxcli сетевой IP-интерфейс добавить --interface-name = vmk2 --portgroup-name = iSCSI-vmnic2 --mtu = 9000

esxcli сетевой IP-интерфейс ipv4 set --interface-name = vmk2 --ipv4 = 192.168.50.162 --netmask = 255.255.255.0 --type = static

vim-cmd hostsvc / vmotion / vnic_set vmk2

esxcli network vswitch standard portgroup add --portgroup-name = iSCSI-vmnic3 --vswitch-name = vSwitch1

esxcli сетевой IP-интерфейс добавить --interface-name = vmk3 --portgroup-name = iSCSI-vmnic3 --mtu = 9000

esxcli сетевой IP-интерфейс ipv4 set --interface-name = vmk3 --ipv4 = 192.168.50.163 --netmask = 255.255.255.0 --type = static

vim-cmd hostsvc / vmotion / vnic_set vmk3

esxcli network vswitch standard portgroup add --portgroup-name = iSCSI-vmnic6 --vswitch-name = vSwitch1

esxcli сетевой IP-интерфейс добавить --interface-name = vmk6 --portgroup-name = iSCSI-vmnic6 --mtu = 9000

esxcli сетевой IP-интерфейс ipv4 set --interface-name = vmk6 --ipv4 = 192.168.50.166 --netmask = 255.255.255.0 --type = static

vim-cmd hostsvc / vmotion / vnic_set vmk6

esxcli network vswitch standard portgroup add --portgroup-name = iSCSI-vmnic7 --vswitch-name = vSwitch1

esxcli сетевой IP-интерфейс добавить --interface-name = vmk7 --portgroup-name = iSCSI-vmnic7 --mtu = 9000

esxcli сетевой IP-интерфейс ipv4 set --interface-name = vmk7 --ipv4 = 192.168.50.167 --netmask = 255.255.255.0 --type = static

vim-cmd hostsvc / vmotion / vnic_set vmk7

j. # установить активную сетевую карту для каждого iSCSI vmkernel

esxcli network vswitch standard portgroup policy failover set --portgroup-name = iSCSI-vmnic2 --active-uplinks = vmnic2

esxcli network vswitch standard portgroup policy failover set --portgroup-name = iSCSI-vmnic3 --active-uplinks = vmnic3

esxcli network vswitch standard portgroup policy failover set --portgroup-name = iSCSI-vmnic6 --active-uplinks = vmnic6

esxcli network vswitch standard portgroup policy failover set --portgroup-name = iSCSI-vmnic7 --active-uplinks = vmnic7

k. # создать группы портов

esxcli network vswitch standard portgroup add --portgroup-name = VMNetwork1 --vswitch-name = vSwitch0

esxcli network vswitch standard portgroup add --portgroup-name = VMNetwork2 --vswitch-name = vSwitch0

esxcli network vswitch standard portgroup add --portgroup-name = VMNetwork3 --vswitch-name = vSwitch0

л. # установить VLAN на группы портов ВМ

esxcli network vswitch standard portgroup set -p VMNetwork1 --vlan-id ##

esxcli network vswitch standard portgroup set -p VMNetwork2 --vlan-id ##

esxcli network vswitch standard portgroup set -p VMNetwork3 --vlan-id ###

м. # удалить группу портов виртуальной машины по умолчанию

esxcli network vswitch standard portgroup remove --portgroup-name = "VM Network" -v = vSwitch0

п. # включить программный адаптер iSCSI

esxcli iscsi software set --enabled = true

esxcli iscsi networkportal add -A vmhba33 -n vmk2

esxcli iscsi networkportal add -A vmhba33 -n vmk3

esxcli iscsi networkportal add -A vmhba33 -n vmk6

esxcli iscsi networkportal add -A vmhba33 -n vmk7

о. # переименовать локальное хранилище данных

имя хоста> $ var =

vim-cmd hostsvc / datastore / переименовать datastore1 local-$var

п. # Определите подключаемый модуль Native Multi Path Storage Array Type для EMC VNXe 3300 и настройте циклический IOPS с 1000 до 1

esxcli storage nmp satp rule add --satp = "VMW_SATP_DEFAULT_AA" --vendor = "EMC" -P "VMW_PSP_RR" -O "iops = 1"

q. # обновить сеть

Обновление сетевого брандмауэра esxcli

vim-cmd hostsvc / сеть / обновление

  1. Настроить NTP-клиент с помощью vSphere Client для каждого хоста

а. Конфигурация -> Конфигурация времени -> Свойства -> Параметры -> Настройки NTP -> Добавить -> ntp.mydomain.net -> Установите флажок «Перезапустить службу NTP, чтобы применить изменения» -> ОК -> подождите… -> Выберите «Начать и остановить с хостом» -> ОК -> Отметьте «Клиент NTP включен -> ОК

  1. Перезагрузить хост

  2. Продолжите работу с EMC VNXe Storage Provisioning, вернитесь к этому руководству по завершении

  3. Вход в клиент vSphere для каждого хоста

  4. Обновите каждое хранилище данных до VMFS-5

а. Конфигурация -> Хранилище -> Выделить хранилище данных -> Обновление до VMFS-5

Возможно, вы не генерируете достаточно операций ввода-вывода в секунду, чтобы это действительно сработало.
Посмотри Вот о том, как изменить настройку с 1000 IOPS по умолчанию на меньшее значение. (Это зависит от симметрии, но вы можете сделать то же самое для поставщика VMWare Round Robin)

Однако я еще не уверен, действительно ли он может использовать более одной ссылки полностью параллельно только с одним хранилищем данных. Я считаю, что вам нужно провести тест IOMeter одновременно на нескольких хранилищах данных, чтобы увидеть преимущества. (Хотя не уверен на 100%)

К сожалению, я думаю, что с вашей настройкой все в порядке. Вы просто не можете использовать более 1 Гбит / с для одной виртуальной машины.

Дело в том, что вы не хотите просто использовать две (или более) сетевые карты, вы хотите использовать их одновременно, в конфигурации типа RAID-0.

802.3ad, стандарт агрегации на уровне каналов, который, я думаю, вы настроили на своих коммутаторах, обычно не может быть настроен для разделения одного соединения на разные сетевые адаптеры. Это связано с тем, как работает выбор interface-alg: он основан на MAC-адресах src и dst и / или IP / портах, и одно соединение всегда будет иметь одинаковые MAC / IP / порты.

Это не означает, что ваша установка не может выдавать более высокие числа (как tput, так и IOPS), но это накладывает жесткий предел производительности, которую может извлечь одна виртуальная машина. Попробуйте загрузить 2 или 4 экземпляра IOMeter на 2/4 разных виртуальных машины: готов поспорить, что совокупная пропускная способность будет намного выше, чем эталонный тест отдельной виртуальной машины, но ни одна машина не преодолеет ограничение в 1 Гбит / с.

Мостовое соединение Linux и некоторые высокопроизводительные коммутаторы поддерживают различные методы агрегации каналов и обеспечивают полные агрегированные сетевые интерфейсы с чередованием. Однако это имеет нетривиальные последствия для взаимодействия других коммутаторов / систем с этими "нестандартными" методами агрегирования.

В любом случае, для сети хранения вам действительно следует включить jumbo-кадры, если они поддерживаются.