In my last project, I was working with Nutanix metro cluster running on VMware ESXi. Unfortunately, Nutanix and VMware vSphere don't provide any way to automatically distribute virtual machines based on datastore to site location.
One could ask why do you need to distribute or pin virtual machines to the specific datastore? The answer is quite straightforward. Let's take under the consideration following scenario.
Virtual machine components (CPU, RAM) are located on site B where reads/writes are on site A (traversing via network). In this situation virtual machine performance is suboptimal.
Virtual machine components (CPU, RAM, disk) are located on site A where reads/writes are local (not traversing via network). In this situation virtual machine performance is optimal.
PowerCLI script to create Metro Cluster aware DRS groups
For the project needs, I created an extremely simple PowerCLI script(it is not even script, possibly some PowerCLI gurus would create a one-liner from it 😉 ). Anyway, it did work for me. As a final solution script was executed twice a day to balance the virtual machines across two sites.
Import-Module VMware.PowerCLI #Importing VMware PowerCLI module #vCenter Server connectivity details $vcenter = IP/FQDN $username = username $password = password Connect-VIServer -Server $vcenter -User $username -Password $password #Connecting to vCenter Server $datastoresiteA = metroa #Site A datastore name $datastoresiteB = metrob #Site B datastore name $cluster = VDI #Cluster name where we will create the DRS rules $vmsa = Get-Datastore -name $datastoresiteA | get-vm #We are collecting virtual machines located on site A datastore $vmsb = Get-Datastore -name $datastoresiteB | get-vm #We are collecting virtual machines located on site B datastore Remove-DrsClusterGroup -DrsClusterGroup "DRS Group Site A" -confirm:$false Remove-DrsClusterGroup -DrsClusterGroup "DRS Group Site B" -confirm:$false #We are removing old DRS Rules New-DrsClusterGroup -Name "DRS Group Site A" -VM $vmsa -Cluster $cluster New-DrsClusterGroup -Name "DRS Group Site B" -VM $vmsb -Cluster $cluster #We are creating new DRS Rules with new virtual machines Disconnect-viserver * -confirm:$false
The script is pretty much straightforward. Simply at the beginning provide the values to connect to vCenter Server and others to make the script work.