Share via


Balancear carga do tráfego de rede em uma malha SDN de usando o VMM

Importante

Esta versão do VMM (Virtual Machine Manager) chegou ao fim do suporte. Recomendamos que você atualize para o VMM 2022.

Você pode usar o SLB (balanceador de Carga de Software) para distribuir de modo uniforme o tráfego de rede entre as cargas de trabalho no SDN (Software Define Networking) gerenciadas pelos CSPs (Provedores de Serviços de Nuvem) e locatários. Para mais informações, confira SLB (Balanceador de Carga de Software).

O System Center Virtual Machine Manager (VMM) dá suporte aos seguintes dois cenários de balanceamento de carga:

  • Balanceamento de carga do tráfego de rede externo: esse cenário inclui o balanceamento de carga do tráfego de rede proveniente de uma rede externa. O balanceamento de carga é feito por meio de um VIP (IP Virtual) público. As VMs da carga de trabalho podem ser conectadas a uma rede VM sem isolamento ou a uma rede VM habilitada para virtualização de rede.

  • Balanceamento de carga do tráfego de rede interno (balanceamento de carga interno): esse cenário inclui o balanceamento de carga do tráfego de rede de cargas de trabalho na rede VM que estão habilitadas para virtualização de rede. O balanceamento de carga é feito por meio de um VIP.

    Observação

    O VMM 2016 dá suporte à configuração de balanceamento de carga com o PowerShell. No momento, não há suporte para a configuração por meio de Modelos de serviço.

Este artigo fornece informações sobre como configurar o balanceamento de carga de VMs da carga de trabalho com o PowerShell.

Observação

  • No VMM 2019 UR1, o tipo Uma Rede Conectada é alterado para Rede Conectada
  • O VMM 2019 UR2 e posterior dá suporte ao IPv6.

Antes de começar

Verifique o seguinte:

Criar um modelo VIP

Use os procedimentos a seguir para configurar os VIPs para balancear a carga das VMs da carga de trabalho (DIPs).

  1. No console do VMM, selecioneModelos VIP doFabric>. Clique com o botão direito do mouse e selecione Criar Modelo VIP.

    Captura de tela do nome do modelo VIP.

  2. Na página Nome, forneça o nome e uma descrição opcional. Especifique a Porta IP Virtual que será usada como porta de front-end para o tráfego de rede. Na porta Back-end, especifique a porta na qual as cargas de trabalho de back-end estão hospedadas. Selecione Avançar.

    Captura de tela do tipo de modelo VIP.

  3. Em Especificar um Tipo de Modelo, selecione Específico. Em Fabricante, selecione Microsoft. Em Modelo, selecione Controlador de Rede da Microsoft. Selecione Avançar.

    Captura de tela das opções de protocolo VIP.

  4. Em Especificar Opções de Protocolo, selecione a opção Personalizada e digite TCP/UDP no nome do Protocolo. Selecione Avançar.

    Observação

    O SLB dá suporte apenas ao balanceamento de carga de camada 4 do tráfego TCP/UDP. Não há suporte para protocolos HTTP/HTTPS.

  5. Em Persistência e Balanceamento de Carga, use os padrões. Selecione Avançar.

    Captura de tela do Monitor de Integridade.

    Observação

    O SLB não dá suporte à persistência e a diferentes métodos de balanceamento de carga. Por padrão, o SLB usa o algoritmo Round Robin para o balanceamento de carga.

  6. Em Monitores de Integridade, opcionalmente, insira valores apropriados. Selecione Avançar.

    Opções: há suporte para TCP e HTTP como protocolos do monitor de integridade, caso o SLB seja usado.

  7. Verifique as configurações e selecione Concluir.

Depois que o modelo for criado, você poderá encontrá-lo em MalhaModelos VIP.

Criar um VIP usando o PowerShell

Crie um VIP usando os scripts de exemplo a seguir. Selecione o script de acordo com o tipo de tráfego de rede do qual você deseja balancear a carga:

Script para criar um VIP para balancear a carga do tráfego de rede externo

Script para criar um VIP para balancear a carga do tráfego de rede interno

Script para criar um VIP para balancear a carga do tráfego de rede externo

O script de exemplo a seguir cria o VIP com base em uma rede IP pública para balancear a carga das VMs da carga de trabalho WGB-001 e WGB-002 na porta 80.

Esse script pode ser usado para criar o VIP de balanceamento de carga transmitindo também o endereço VIP IPv6.

As VMs da carga de trabalho podem ser conectadas a uma rede sem isolamento ou a redes VM habilitadas para virtualização de rede.

Observação

  • Na seção de parâmetros de script, substitua os valores reais que correspondem ao seu ambiente de teste para os exemplos usados neste script.
  • Verifique se você executa o script em um servidor VMM ou em um computador que executa o console do VMM.
param(

[Parameter(Mandatory=$false)]
# Name of the Network Controller Network Service
# This value should be the name you gave the Network Controller service
# when you on-boarded the Network Controller to VMM
$LBServiceName = "NC",

[Parameter(Mandatory=$false)]
# Name of the workload VMs you want to load balance.
$VipMemberVMNames =  @("WGB-001","WGB-002"),

[Parameter(Mandatory=$false)]
# Name of the VIP VM Network
$VipNetworkName = "PublicVIP",


[Parameter(Mandatory=$false)]
# VIP address you want to assign from the VIP VM Network IP pool.
# Pick any VIP that falls within your VIP IP Pool range.
$VipAddress = "44.15.10.253",


[Parameter(Mandatory=$false)]
# The name of the VIP template you created via the VMM Console.
$VipTemplateName = "WebsiteHTTP",

[Parameter(Mandatory=$false)]
# Arbitrary but good to match the VIP you're using.
$VipName = "scvmm_44_15_10_253_80"

)

Import-Module virtualmachinemanager

$lb = Get-scLoadBalancer | where { $_.Service.Name -like $LBServiceName};
$vipNetwork = get-scvmnetwork -Name $VipNetworkName;

$vipMemberNics = @();
foreach ($vmName in $VipMemberVMNames)
{
$vm = get-scvirtualmachine -Name $vmName;
#    if ($vm.VirtualNetworkAdapters[0].VMNetwork.ID -ne $vipNetwork.ID)
#    {
#        $vm.VirtualNetworkAdapters[0] | set-scvirtualnetworkadapter -VMNetwork $vipNetwork;
#    }

$vipMemberNics += $vm.VirtualNetworkAdapters[0];
}

$existingVip = get-scloadbalancervip -Name $VipName
    if ($existingVip -ne $null)
{
#    foreach ($mem in $existingVip.VipMembers)
#    {
#        $mem | remove-scloadbalancervipmember;
#    }

    $existingVip | remove-scloadbalancervip;
}

$vipt = get-scloadbalancerviptemplate -Name $VipTemplateName;

$vip = New-SCLoadBalancerVIP -Name $VipName -LoadBalancer $lb
-IPAddress $VipAddress -LoadBalancerVIPTemplate $vipt
-FrontEndVMNetwork $vipNetwork
-BackEndVirtualNetworkAdapters $vipMemberNics;
Write-Output "Created VIP " $vip;

$vip = get-scloadbalancervip -Name $VipName;
Write-Output "VIP created successfully " $vip;

Script para criar um VIP para balancear a carga do tráfego de rede interno

No script de exemplo a seguir, criamos um novo modelo de VIP com o nome ILB-VIP-Template para o balanceamento de carga da porta 443 usando o procedimento detalhado na seção anterior. O script cria um VIP com base na rede VM de locatário para balancear a carga das VMs ILB-001 e ILB-002, que fazem parte da mesma rede VM de locatário.

Esse script pode ser usado para criar o VIP de balanceamento de carga transmitindo também o endereço VIP IPv6.

Observação

  • No cenário de balanceamento de carga interno, o VIP vem da rede de VM do locatário. Portanto, o $VipNetworkName é o mesmo nome da rede VM de locatário na qual as VMs estão conectadas. Verifique se o pool IP da rede VM de locatário tem os IPs reservados para os VIPs. O $VipAddress é um dos endereços IP dos VIPs reservados.
  • Na seção de parâmetros de script, substitua os valores reais que correspondem ao seu ambiente de teste para os exemplos usados neste script.
  • Verifique se você executa o script em um servidor VMM ou em um computador que executa o console do VMM.
param(

[Parameter(Mandatory=$false)]
# Name of the Network Controller Network Service
# This value should be the name you gave the Network Controller service
# when you on-boarded the Network Controller to VMM
$LBServiceName = "NC",

[Parameter(Mandatory=$false)]
# Name of the workload VMs you want to load balance.
$VipMemberVMNames =  @("ILB-001","ILB-002"),

[Parameter(Mandatory=$false)]
# Name of the VIP VM Network
$VipNetworkName = "TenantNetwork",

[Parameter(Mandatory=$false)]
# VIP address you want to assign from the VIP VM Network IP pool.
# Pick any VIP that falls within your VIP IP Pool range.
$VipAddress = "192.168.100.75",

[Parameter(Mandatory=$false)]
# The name of the VIP template you created via the VMM Console.
$VipTemplateName = "ILB-VIP-Template",

[Parameter(Mandatory=$false)]
# Arbitrary but good to match the VIP you're using.
$VipName = "scvmm_192_168_100_75_443"

)

Import-Module virtualmachinemanager

$lb = Get-scLoadBalancer | where { $_.Service.Name -like $LBServiceName};
$vipNetwork = get-scvmnetwork -Name $VipNetworkName;

$vipMemberNics = @();
foreach ($vmName in $VipMemberVMNames)
{
$vm = get-scvirtualmachine -Name $vmName;
#    if ($vm.VirtualNetworkAdapters[0].VMNetwork.ID -ne $vipNetwork.ID)
#    {
#        $vm.VirtualNetworkAdapters[0] | set-scvirtualnetworkadapter -VMNetwork $vipNetwork;
#    }

$vipMemberNics += $vm.VirtualNetworkAdapters[0];
}

$existingVip = get-scloadbalancervip -Name $VipName
if ($existingVip -ne $null)
{
#    foreach ($mem in $existingVip.VipMembers)
#    {
#        $mem | remove-scloadbalancervipmember;
#    }

$existingVip | remove-scloadbalancervip;
}

$vipt = get-scloadbalancerviptemplate -Name $VipTemplateName;

$vip = New-SCLoadBalancerVIP -Name $VipName -LoadBalancer $lb
-IPAddress $VipAddress -LoadBalancerVIPTemplate $vipt
-FrontEndVMNetwork $vipNetwork
-BackEndVirtualNetworkAdapters $vipMemberNics;
Write-Output "Created VIP " $vip;

$vip = get-scloadbalancervip -Name $VipName;
Write-Output " VIP created successfully " $vip;