Задание по настройке балансировки Round Robin в VMware vSphere

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

К примеру, я точно помню, что настраивал Round Robin для своего кластера и своей СХД HP EVA пару лет назад.

Однако, текущий вывод скрипта по балансировке показывает, что это далеко не так:

Get-Cluster cluster| Get-VMHost | Get-ScsiLun -LunType disk | group multipathpolicy

Count Name                      Group
----- ----                      -----
    7 RoundRobin                {
   93 MostRecentlyUsed          {

А вот так 🙂

Поэтому родилась идея запускать задание, которое будет выполняться раз в неделю и выставлять политику балансировки для дисковых устройств.

Если рассмотреть вывод команды Get-ScsiLun -LunType disk | fl, то там есть два параметра, к которым можно привязаться: это vendor и model дискового устройства. Соответственно, если вы используете несколько СХД с различными рекомендуемыми настройками, то вам потребуется настраивать хитрую логику работы скрипта. На текущий момент я использую в качестве СХД HP 3Par7200 и HP EVA 6000. С обеими СХД рекомендуется использовать политику балансировки Round Robin.

EVA 6000:

Vendor        : HP
Model         : HSV200

3PAR:

Vendor        : 3PARdata
Model         : VV

Нам остается запрограммировать логику скрипта, меняющую политику балансировки для дискового устройства с такими параметрами.

(get-date -format dd.MM.yyyy) | out-file C:\scripts\multipath\log.txt -append -encoding unicode
connect-viserver vCenter
Get-Cluster Cluster| Get-VMHost | Get-ScsiLun -LunType disk | %{if(($_.multipathpolicy -eq "MostRecentlyUsed")-and((($_.vendor -eq "HP")-and($_.model -match "HSV200"))-or(($_.vendor -eq "3PARdata")-and($_.model -match "VV")))){
$_.runtimename | out-file C:\scripts\multipath\log.txt -append -encoding unicode
set-ScsiLun -scsilun $_ -MultipathPolicy RoundRobin
}
}
Данный скрипт помимо смены режима балансировки еще и сделает пометку о том, какое дисковое устройство было изменено и когда.

Теперь этот скрипт готов для запуска в виде задания.

Создаем задание и указываем в строке для запуска следующую команду:

C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe -psc "C:\Program Files\VMware\Infrastructure\vSphere PowerCLI\vim.psc1" -c ". \"C:\scripts\multipath.ps1\""

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

Напоследок повторим скрипт, анализирующий тип балансировки:

 Count Name                      Group
----- ----                      -----
  100 RoundRobin                {
Запись опубликована в рубрике 5.1, 5.5, Hardware, HP, VMware, vSphere с метками . Добавьте в закладки постоянную ссылку.

8 комментариев: Задание по настройке балансировки Round Robin в VMware vSphere

  1. drpooh говорит:

    А вроде же можно задавать правило дефолтное для определенного устройства/вендора с политикой балансировки по умолчанию как раз для таких случаев. Например:
    esxcli storage nmp satp set –s VMW_SATP_CX –P VMW_PSP_RR

  2. A.Vakhitov говорит:

    Можно, но эту же настройку придется повторить на всех серверах. И при добавлении нового сервера ставить себе галочку «ага, не забыть выполнить вон тот скрипт конфигурации»…

  3. NoOne говорит:

    А еще для HP EVA в «HP ENTERPRISE VIRTUAL ARRAY FAMILY WITH VMWARE VSPHERE 4.0 , 4.1 AND 5.0 CONFIGURATION BEST PRACTICES» (http://www.vmware.com/files/pdf/techpaper/hp-enterprise-virtual-array-family-vsphere-configuration.pdf, где-тго был такой же для 5.5 вроде бы, сходу не нашел..) есть:
    esxcli nmp roundrobin setconfig -t iops -I 1 -d naa.xxxxxxxxx

    Используете?
    И еще, у нас MSCS кластер с RR на HP EVA при переключении дисков с узла на узел (с хоста на хост) не всегда снимал резервацию SCSI-3 PR, и ресурс не поднимался.

  4. A.Vakhitov говорит:

    Думал ставить IOPS=1, но командлет воспринимать не захотел.
    Спорная рекомендация.
    Лучшие практики считают, что настройка «маст хэв». Duncan Epping — что нет или надо еще подумать
    http://www.yellow-bricks.com/2010/03/30/whats-the-point-of-setting-iops1/
    Да и вообще, положа руку на HCL, EVA 6000 не поддерживается с VMware vSphere 5.0 🙂
    Поэтому я решил на эту настройку забить…
    С кластером все неоднозначно.
    До относительно недавнего времени для кластеров была рекомендация делать MRU.
    http://kb.vmware.com/kb/2052238
    In vSphere 5.5, round robin policy is now supported for disks engaged in MSCS clustering.

    However, these restrictions apply:
    •Supported on Windows 2008, Windows 2012 and Windows 2012 R2 server guest operating systems only.

    •Supported on Cluster Across Boxes (CAB) and N+1 configurations (виртуальные машины на разных хостах). Cluster in a box uses Virtual Reservations.
    •Shared disk (Quorum OR Data) must be provisioned to guest in pass-through RDM mode only.
    •Windows 2012 and Windows 2012 R2 cluster validation may fail with «resource busy» error while using PSP_RR. This error can be ignored.

  5. NoOne говорит:

    •Windows 2012 and Windows 2012 R2 cluster validation may fail with «resource busy» error while using PSP_RR. This error can be ignored.

    Вот этого пункта не помню.. или не было его там тогда, когда ставили и настраивали MSCS на VMware. Видимо из-за этого же и при переключении ресурсов (а не только при cluster validate) проиходит ошибка. Поэтому так и остался MRU. Пробовали прорваться через кейс, но, как Вы правильно заметили, HCL дал от ворот поворот.

    (Из-за этого же кстати закрыли долгий кейс в полгода. Когда VMware подключала разные уровни поддержки, и добрались до глубинных проблем внутри, на последнем уровне отметили — о, а вы ж не в HCL. И хотя поведение ESXi не совсем правильное, кейс закрыли и предложили открыть Feature Request… пока руки до него не дошли, Но это совсем другая история :))

  6. NoOne говорит:

    И да, за ссылку iops=1 спасибо, чуть позже почитаю 🙂

  7. Алексей говорит:

    $esxcli.storage.nmp.psp.roundrobin.deviceconfig.set($null,$null,$device.CanonicalName,1,”iops”,$null)

  8. A.Vakhitov говорит:

    Алексей, простите, но не врубился 🙂

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *