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.
#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.
My experience and skills have been proven by leading vendor certifications like AWS, Alibaba Cloud, VMware, and Microsoft. I contribute to the IT community and I received VMware vExpert 2014 - 2019, vExpert Pro and VMware vExpert NSX 2017 Award.
My blog wojcieh.net - was voted #76 in Top vBlog 2018 contest!
Do what you love, and you’ll never work another day in your life.
Latest posts by Wojciech Marusiak (see all)
- Top vBlog 2018 is there! - 20 November, 2018
- Zentyal – my new Homelab Swiss Army Knife - 10 October, 2018
- Send VMware backups to the cloud – Altaro Offsite Copies to an Azure Cloud Storage - 18 September, 2018