vendredi 22 avril 2011

Multipathing vSphere

Si vous souhaitez mettre en place un réseau de stockage sur une infrastructure vSphere, vous voudrez probablement mettre en place des MTU a 9000.

Or pour réaliser une telle opération, vous devez passer par la ligne de commande VMware.

Voici une fonction PowerCLI qui vous permettra de créer vos Virtual Machine Port Group & VMKernel pour  un réseau de stockage (type iSCSI ou NFS).

Coller simplement cette fonction dans votre shell PowerCLI, puis exécutez là, par exemple via:
configureMultipathing 'MonVCenter.dom.local' 'ESX1.dom.local' 'vSwitch-STO' 'STOCKAGE' 'NFS01' 'NFS02' 'vmnic0' 'vmnic4' '192.168.20.2' '192.168.20.12' '255.255.255.0'



function configureMultipathing ($vCenter, $ESXName, $vSwitchName, $vPortGroup, $PortGroupName1, $PortGroupName2, $FirstNic, $SecondNic, $vmkIP1, $vmkIP2, $vmkMASK){
#Paramétres en entrée:
#vCenter: Adresse oou nom du vCenter
#ESXName: Nom du serveur ESX (tel que dans le vCenter)
#vSwitchName: Nom souhaité du vSwitch
#vPortGroup: Nom du Virtual Machine Port Group à créer
#PortGroupName1: Nom souhaité du premier PortGroup
#PortGroupName2: Nom souahité du second PortGroup
#FirstNic: Carte reseau a assigné au premier PortGroup
#SecondNic: Carte reseau a assigné au second PortGroup
#vmkIP1: Adresse IP du premier VMkernel
#vmkIP2: Adresse IP du second VMkernel
#vmkMASK: Masque réseau des VMkernel
#
#Description:
#Crée un vSwitch avec un MTU de 9000 [nom: vSwitchName],
#Crée 2 PortGroup [nom: PortGroupName1, PortGroupName2],
#Crée 2 VMkernel avec un MTU de 9000,
#Ajoute les adresses IP a chaque VMkernel [adresses IP: vmkIP1, vmkIP2]
#Configure le Failover Order sur chaque VMkernel (1 carte active par VMkernel)
#Crée un Virtual Machine port group [nom: vPortGroup]
#
#Exemple: configureMultipathing 'MonVCenter.dom.local' 'ESX1.dom.local' 'vSwitch-STO' 'STOCKAGE' 'NFS01' 'NFS02' 'vmnic0' 'vmnic4' '192.168.20.2' '192.168.20.12' '255.255.255.0'

#Récupération du prompt actuel et suppression
$oldPrompt = (Get-Command prompt).definition
set-item -path function:prompt -value {" "}
#Connection au vCenter
Connect-VIServer -Server $vCenter
#Recuperation de l'hote
$BaseHost = Get-VMHost -Name $ESXName
#Creation du vSwitch avec un MTU de 9000
$NewSwitch = ($BaseHost | New-VirtualSwitch -Mtu 9000 -Name $vSwitchName -Nic $FirstNic,$SecondNic)
$NewSwitch | Get-NicTeamingPolicy | Set-NicteamingPolicy -NetworkFailoverDetectionPolicy BeaconProbing
#Creation des ports group
New-VirtualPortGroup -VirtualSwitch $NewSwitch -Name $PortGroupName1
New-VirtualPortGroup -VirtualSwitch $NewSwitch -Name $PortGroupName2
New-VirtualPortGroup -VirtualSwitch $NewSwitch -Name $vPortGroup
#Creation des VMkernel avec le bon MTU
$netSys = Get-View ($BaseHost| Get-View).configManager.networkSystem
$spec = New-Object "VMware.Vim.HostVirtualNicSpec"
$spec.Ip = New-Object "VMware.Vim.HostIpConfig"
$spec.mtu = 9000
$spec.Ip.SubnetMask = $vmkMASK
$spec.TsoEnabled = $true
#Assignation des IPs
$spec.Ip.IpAddress = $vmkIP1
$spec.Portgroup = $PortGroupName1
$netSys.AddVirtualNic($spec.PortGroup,$spec)
$spec.Ip.IpAddress = $vmkIP2
$spec.Portgroup = $PortGroupName2
$netSys.AddVirtualNic($spec.PortGroup,$spec)
#Recuperation de la strategie du Teaming
$PortGroup1 = $BaseHost | Get-VirtualPortGroup -VirtualSwitch $NewSwitch -Name $PortGroupName1 | Get-NicTeamingPolicy
$PortGroup2 = $BaseHost | Get-VirtualPortGroup -VirtualSwitch $NewSwitch -Name $PortGroupName2 | Get-NicTeamingPolicy
#Reinitialisation du teaming
Set-NicTeamingPolicy -VirtualPortGroup $PortGroup1 -MakeNicUnused $FirstNic,$SecondNic
Set-NicTeamingPolicy -VirtualPortGroup $PortGroup2 -MakeNicUnused $FirstNic,$SecondNic
#Ajout de chaque carte à un VMKernel
Set-NicTeamingPolicy -VirtualPortGroup $PortGroup1 -MakeNicActive $FirstNic
Set-NicTeamingPolicy -VirtualPortGroup $PortGroup2 -MakeNicActive $SecondNic
#Validation
Clear-Host
sleep 5
$ESXName
write-host Configuration effectuée
$BaseHost | Get-VirtualSwitch -name $vSwitchName | Select-Object Name,Mtu,Nic
$BaseHost | Get-VirtualPortGroup -VirtualSwitch $NewSwitch -Name $PortGroupName1 | Get-NicTeamingPolicy | Select-Object VirtualPortGroup,ActiveNic,StandbyNic,UnusedNic,FailbackEnabled
$BaseHost | Get-VMHostNetworkAdapter | Where { $_.IP -eq $vmkIP1} | Select-Object Name,Mtu,PortGroupName
$BaseHost | Get-VirtualPortGroup -VirtualSwitch $NewSwitch -Name $PortGroupName2 | Get-NicTeamingPolicy | Select-Object VirtualPortGroup,ActiveNic,StandbyNic,UnusedNic,FailbackEnabled
$BaseHost | Get-VMHostNetworkAdapter | Where { $_.IP -eq $vmkIP2} | Select-Object Name,Mtu,PortGroupName
#Deconnexion
Disconnect-VIServer -Server $vCenter -Confirm:$false
#remise en place du prompt initial
$oldprompt | Set-Item function:prompt
}

Aucun commentaire:

Enregistrer un commentaire