Paramétrer les datastores en Round Robin

Selon les systèmes de stockage, il peut être nécessaire de configurer le multipathing des datastores en mode Round Robin pour une meilleure gestion des I/O.
Et dans ce cas, il peut aussi s’avérer nécessaire de configurer le nombre d’opérations disque à effectuer sur le path en cours avant de passer au path suivant.

Si les baies sont joignables via deux points de connexion (ou plus) disposant de leur propre mémoire cache, il vaut mieux laisser une valeur assez élevée (par exemple 1000) pour que des requêtes successives bénéficient des infos mises cache par les requêtes précédentes. Mais s’il s’agit simplement d’un serveur de stockage joignable par 2 IPs et qu’on veut équilibrer les flux, autant mettre la limite à 1, car le cache utilisé ne dépend pas du chemin pris.

Généralement le mode de multipathing et la valeur à utiliser sont à valider avec les responsables du stockage.

Le script ci-dessous vérifie la configuration de chaque datastore sur chaque ESXi, et la modifie si nécessaire.
Il indique pour chaque host si ses datastores sont déjà configurés ou s’il doit le modifier.


Variables

Deux variables sont initialisées dans les 2 premières lignes.

$EsxHosts : contient la liste des hosts ESXi à contrôler.
Elle est initialisée par une requête pour lister par exemple un host, les hosts d’un cluster, ou tous les hosts connus du vCenter.

$EsxHosts = Get-VMHost host01.infra.local
$EsxHosts = Get-Cluster | Get-VMHost | Sort-Object -Property Name
$EsxHosts = Get-VMHost | Sort-Object -Property Name

$Limit : Indique le nombre d’I/O à effectuer sur un path avant de passer au suivant.

$Limit = 1

Script

$EsxHosts = Get-VMHost | Sort-Object -Property Name
$Limit = 1
Foreach ($EsxHost in $EsxHosts) 
{
   Write-Host $EsxHost.Name -ForegroundColor Red
   $EsxCli = $EsxHost | Get-EsxCli
   $Devices = $EsxHost | Get-ScsiLun -LunType "disk" -CanonicalName eui*
   Foreach ($Device in $Devices)
   {
      if ($Device.MultipathPolicy -eq "RoundRobin")
      {
         if ($EsxCli.storage.nmp.psp.roundrobin.deviceconfig.get($Device).IOOperationLimit -eq $Limit)
         {
            Write-Host "- Datastore $Device already configured as RoundRobin with $Limit as Limit." -ForegroundColor Green
         }
         else
         {
            Write-Host "- Datastore $Device already configured as RoundRobin. Now configuring $Limit as Limit..." -ForegroundColor Yellow
            $Result = $EsxCli.storage.nmp.psp.roundrobin.deviceconfig.set($null,$null,$Device.CanonicalName,$Limit,"iops",$null)
         }
      }
      else
      {
         Write-Host "- Configuring datastore $Device as RoundRobin with $Limit as Limit..." -ForegroundColor Yellow
         $Result = $Device | Set-ScsiLun -MultipathPolicy "RoundRobin"
         $Result = $EsxCli.storage.nmp.psp.roundrobin.deviceconfig.set($null,$null,$Device.CanonicalName,$Limit,"iops",$null)
      }
   }
}

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *