Script PowerShell para Live Migration

pssss_super

Se você está tentando fazer o Live Migration de várias máquinas virtuais simultâneamente e não conseguiu ou está pensando que isso não é possível, tome nota de algumas características importantes deste ambiente.

Vale lembrar que o cálculo para determinar o número de LM simultâneos é determinado pelo número de Nós dividido por 2. Se você tem um cluster de 16 nós terá 16/2 =8 LM simultâneos mas com destinos de nós (Targets) diferentes.

Um nó do Hyper-V não pode receber mais do que uma conexão de Live Migration simultâneamente, isso significa que se você tem um cluster de dois nós terá uma limitação que é fazer a migração de uma máquina por vez. Agora imagina se você tem 20 ou mais VMS? O script abaixo enfileira a migração de todas as máquinas virtuais sem necessidade de intervenção do administrador.

Por padrão o PowerShell não permite executar scripts não assinados, então antes de executá-lo, será necessário definir como Unrestricted o modo de execução para isto execute o seguinte comando :

PS : \Set-ExecutationPolicy –ExecutationPolicy unrestricted

O script abaixo é bem simples e muito eficiente, ele faz a migração de todas as máquinas virtuais de um nó do cluster para o outro. Segue um breve comentário de todas as linhas. As 4 primeiras linhas são para definir variáveis, a primeira armazena o valor “Virtual Machine”, a segunda o nome do nó ativo das máquinas virtuais, a terceira o nome do nó que vai receber as máquinas virtuais e a quarta linha armazena o nome virtual do cluster, em seguida o módulo do Failover Clustering para PowerShell é importado. Na sexta linha é armazenado na variável $vms o nome de todas as máquinas virtuais em execução inclusive as Offline. Na última linha ele faz um Loop em todos os valores obtidos dos nomes das VMs e armazena na variável $vm que é usada no comando Move.

Uma dica importante : Clique no nome de cada máquina virtual onde aparece Virtual Machine NOMEDAVM e remova o valor Virtual Machine, deixe somente o nome da VM, caso contrário o script pode falhar, pois ele usa o nome curto para fazer a busca nos recursos do cluster.

No seu ambiente, troque os valores SourceNodeName e DestinationNodeName pelo nome do nó do seu Cluster. Salve o conteúdo em um arquivo com a extensão .PS1 e divirta-se.

$resourcetype = “Virtual Machine”

$source = “SourceNodeName”

$destination = “DestinationNodeName”

$cluster = get-cluster

Import-Module FailoverClusters

$vms = Get-ClusterResource –Cluster $cluster | where-object {$_.ResourceType –like $resourcetype}

Foreach ($vm in $vms) { Get-Cluster $cluster | Move-ClusterVirtualMachineRole –Name $vm –Node $destination}