Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[C# / WMware API] Datastore -> Host -> FC Paths??

Pagina: 1
Acties:

  • Paul
  • Registratie: September 2000
  • Laatst online: 22-11 19:27
Hola,

zitten hier mensen die een beetje bekend zijn met de VMware vSphere API?

TL;DR: Ik heb een VMware vSphere datastore, die is aan een host gekoppeld, die koppeling gaat over een bepaald pad. Hoe krijg ik die gegevens via de VMware.VIM API boven water?

Lange versie:

Ik zal eerst beginnen met uitleggen wat ik wil. We hebben een fiberchannel SAN met een active/passive oplossing richting de disk arrays, de IBM System Storage SAN Volume Controller zoals het ding voluit heet.

Daarin maken we mirrored vDisks, deze vDisks hebben een preferred node. Benader je de vDisks over een andere dan de preferred node dan zorgt dit voor overbodig inter-node verkeer. Dit voorkom je door in VMware de Multipathing voor je datastores op 'Fixed' in te stellen en het juiste path als 'preferred' in te stellen. Dit alles volgens best practices, op aanbevelen van de leverancer en de fabrikant etc etc.

Nu hebben we nogal wat hosts, en ook behoorlijk veel vDisks. Om te controleren of alle instellingen (er zitten nog wat meer haken en ogen aan die je juist in moet stellen / wilt balanceren maar die heb ik al getackeld) goed staan heb ik een programma gemaakt in C# dat (o.a.) de vSphere API aanroept en een hele rits dingen controleert, zowel op VMware als op de SVC.

De vraag die nog open staat is hoe ik van de naam die een datastore heeft in vCenter Server op een host bij de bijbehorende HostMultipathInfoLogicalUnit kom.

In het de VMware vSphere PowerCLI geïnstalleerd en in mijn C#-project de referentie VMware.Vim toegevoegd. VS zegt dat dit versie 5.1.0.0 is, dat kan kloppen want dat was ook de versie van de PowerCLI.

Er zijn echter heel veel namen en nummertjes die her en der te vinden zijn maar ik krijg niks gevonden dat ik aan elkaar kan linken... Zo kun je bijvoorbeeld bij de Datastore -> DatastoreHostMounts in de HostMountInfo het path vinden, maar dat is weer een ander path dan er in HostSystem -> HostConfigManager -> HostStorageSystem staat...

Via Datastore.info.vmfs.extent kom je bij een [url=http://pubs.vmware.com/vsphere-51/index.jsp#com.vmware.wssdk.apiref.doc/vim.host.ScsiDisk.Partition.html]HostScsiDiskPartition met daarin een diskName, maar die is weer nergens terug te vinden als je bij de HostStorageSystem gaat kijken...

In de GUI is het betrekkelijk simpel te vinden, maar welke API er dan achter hangt, geen idee 8)7

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


  • FireDrunk
  • Registratie: November 2002
  • Laatst online: 17:57
Even voor de duidelijkheid, je hebt een vDisk in een reguliere VMFS datastore die via 2 paden over Fiber Channel gepresenteerd word. Dit VMFS volume word dus 2 keer gepresenteerd met dezelfde data, hierdoor ziet ESX dat het om een redundant pad gaat.

Jij wil weten op welk pad een vDisk momenteel actief is?

Edit: Ik zoek me de blubber, maar ik kan nergens een voorbeeld/config optie vinden waarin vDisks een eigen pad hebben, dus ik zal je wel niet begrijpen.

Ik was altijd in de veronderstelling (en diverse bronnen bevestigen dat) dat alleen een complete datastore multipathing kan ondersteunen. En dan zelfs alleen het device wat daaronder licht. Dus het iSCSI, of Fibre Channel volume.

En daar kan je toch gewoon de Path informatie van ophalen?

Edit2:
Even kort door de bocht, en geen idee of het de info levert die jij nodig hebt, maar dit zou moeten werken...

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Add-PSSnapin "VMware.VimAutomation.Core"
$esxhost = "10.0.0.1"

connect-viserver -Server $esxhost

foreach($hba in (Get-VMHostHba -VMHost $esxhost -Type "FibreChannel"))
{
    $target = ((Get-View $hba.VMhost).Config.StorageDevice.ScsiTopology.Adapter | where {$_.Adapter -eq $hba.Key}).Target
    $luns = Get-ScsiLun -Hba $hba  -LunType "disk" -ErrorAction SilentlyContinue
    Write-Host $hba.Device "Targets:" $target.Count "Devices:" $luns.Count "Paths:" $nrPaths
    foreach ($lun in $target.Lun)
    {
        Write-Host "- Name:" $lun.Lun " SCSI Lun:" $lun.scsiLun
    }
}

[ Voor 74% gewijzigd door FireDrunk op 22-05-2013 10:33 ]

Even niets...


  • Paul
  • Registratie: September 2000
  • Laatst online: 22-11 19:27
Yup. In dit geval zijn het 4 paden, maar dat maakt voor het concept niet uit. Een vDisk / volume is de naam die de SVC er aan geeft, in VMware zijn dat devices of extents :)

Ik ben al iets verder, een Datastore heeft een of meer Extents. Extent.DiskName is de CanonicalName van een ScsiLun, ScsiLun.Key komt weer overeen met de property Key van HostStorageSystem.StorageDeviceInfo.MultipathInfo.Lun. Deze laatste tenslotte heeft een array van paths...

Eens kijken of ik die aan elkaar gekoppeld krijg.

Edit: Scherm niet te lang (~3 uur) open laten staan, dan krijg je geen edits mee :+

Een lijstje met paden is zo gevonden inderdaad. Het probleem zit in het achterhalen van de datastore die daar bij hoort. Of andersom, welke paden er bij een datastore(hostmount) horen.

Binnen de vSphere client open je 'Configuration' van een host -> 'Storage' -> Datastore -> Properties (Random plaatje van internet). Daar zit een knopje 'Manage paths', die info (maar dus vooral ook de samenhang) zoek ik :)

[ Voor 44% gewijzigd door Paul op 22-05-2013 12:41 ]

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


  • FireDrunk
  • Registratie: November 2002
  • Laatst online: 17:57
Als je wil weten welke VMDK's op een HBA Path leven, moet je die referentie er toch gewoon even bij pakken?

Get-Datastore -RelatedObject <scsiLunid>

Gok ik?

Even niets...


  • Paul
  • Registratie: September 2000
  • Laatst online: 22-11 19:27
Mogelijk (niet geprobeerd), maar helaas werkt de PowerCLI niet iets anders dan de VMware.Vim API.

Maar, ik ben er uit :) Het zijn wel redelijk wat loopjes in loopjes geworden, maar in hoofdlijnen is het:
[ul]• foreach de datastores, als het een VMFS-datastore is haal dan de Extents waar deze op staat op
• foreach de hosts
[ul]• foreach de ScsiLuns
  • foreach de eerder opgehaalde Extents
  • Als Extent.DiskName gelijk is aan ScsiLun.CanonicalName sla dan ScsiLun.Key op
• foreach de MultipathInfoLogicalUnits
  • foreach de eerder opgehaalde Extents
  • Als de opgeslagen Key overeen komt met MILU.Lun vraag dan de MILU.Paths op
• Doe iets met je datastore-path-combi

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock