Partilhar via


Balancear carga do tráfego de rede num recurso de infraestrutura SDN com o VMM

Importante

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

Pode utilizar o Software Balanceador de Carga (SLB) para distribuir o tráfego de rede uniformemente entre as cargas de trabalho no Software Define Networking (SDN) gerido pelos Fornecedores de Serviços Cloud (CSPs) e pelos inquilinos. Para obter mais informações, veja Software Balanceador de Carga (SLB).

System Center Virtual Machine Manager (VMM) suporta os dois cenários seguintes de balanceamento de carga:

  • Balanceamento de carga do tráfego de rede externa: este cenário inclui o balanceamento de carga do tráfego de rede proveniente de uma rede externa. O balanceamento de carga é feito através de um IP Virtual (VIP) público. As VMs de carga de trabalho podem ser ligadas a uma rede VM sem isolamento ou a uma rede VM ativada por virtualização de rede .

  • Balanceamento de carga do tráfego de rede interno (Balanceamento de carga interno): este cenário inclui o balanceamento de carga do tráfego de rede das cargas de trabalho na rede VM que está ativada para virtualização de rede. O balanceamento de carga é feito através de um VIP.

    Nota

    O VMM 2016 suporta a configuração do balanceamento de carga com o PowerShell. A configuração através de Modelos de serviço não é atualmente suportada.

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

Nota

  • A partir do UR1 do VMM 2019, o tipo de rede Ligado é alterado para Rede Ligada
  • O UR2 do VMM 2019 e posterior suporta IPv6.

Antes de começar

Certifique-se do seguinte:

Criar um modelo de VIP

Utilize os seguintes procedimentos para configurar os VIPs para fazer o balanceamento de carga das VMs da carga de trabalho (DIPs).

  1. Na consola do VMM, selecioneModelos VIPde Recursos de Infraestrutura>. Clique com o botão direito do rato e selecione Criar Modelo VIP.

    Captura de ecrã a mostrar o nome do modelo VIP.

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

    Captura de ecrã 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 Seguinte.

    Captura de ecrã a mostrar as opções de protocolo VIP.

  4. Em Especificar Opções de protocolo, selecione a opção Personalizado e escreva TCP/UDP em Nome do protocolo. Selecione Seguinte.

    Nota

    O SLB suporta apenas o balanceamento de carga da camada 4 do tráfego TCP/UDP. Os protocolos HTTP/HTTPS não são suportados.

  5. Para Persistência e Balanceamento de Carga, utilize as predefinições. Selecione Seguinte.

    Captura de ecrã a mostrar o Monitor de Estado de Funcionamento.

    Nota

    O SLB não suporta persistência e diferentes métodos de balanceamento de carga. Por predefinição, o SLB utiliza o algoritmo Round Robin para balanceamento de carga.

  6. Em Monitores de Estado de Funcionamento, opcionalmente, insira valores adequados. Selecione Seguinte.

    Opções: TCP e HTTP são suportados como protocolos de monitorização de estado de funcionamento se o SLB for utilizado.

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

Assim que o modelo for criado, pode encontrá-lo emModelos VIP de Recursos de Infraestrutura>.

Criar um VIP com o PowerShell

Crie um VIP com os seguintes scripts de exemplo. Selecione o script com base no tipo de tráfego de rede que pretende fazer o balanceamento de carga:

Script para criar um VIP para o balanceamento de carga do tráfego de rede externa

Script para criar um VIP para o balanceamento de carga do tráfego de rede interno

Script para criar VIP para balancear carga de tráfego de rede externa

O script de exemplo seguinte cria o VIP a partir de uma rede IP pública para balancear a carga de trabalho VMs WGB-001 & WGB-002 na porta 80.

Este script pode ser utilizado para criar o VIP de balanceamento de carga ao transmitir também o endereço VIP IPv6.

As VMs de carga de trabalho podem ser ligadas a redes VM sem isolamento ou virtualização de rede ativada.

Nota

  • Na secção de parâmetros de script, substitua as amostras utilizadas neste script pelos valores reais que correspondam ao ambiente de teste.
  • Certifique-se de que executa o script num servidor VMM ou num computador com a consola 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 VIP para o balanceamento de carga do tráfego de rede interno

Para o seguinte script de exemplo, criámos um novo modelo VIP com o nome ILB-VIP-Template para balancear a carga da porta 443 com o procedimento detalhado na secção anterior. O script cria um VIP a partir da rede VM do inquilino para fazer o balanceamento de carga das VMs ILB-001 & ILB-002, que fazem parte da mesma rede VM de inquilino.

Este script pode ser utilizado para criar o VIP de balanceamento de carga ao transmitir também o endereço VIP IPv6.

Nota

  • No cenário de balanceamento de carga interno, o VIP provém da rede VM do inquilino. Assim, o $VipNetworkName é o mesmo nome de rede de VM de inquilino onde as VMs estão ligadas. Certifique-se de que o conjunto IP de rede de VM do inquilino tem os IPs reservados para VIPs. O $VipAddress é um dos endereços IP dos VIPs reservados.
  • Na secção de parâmetros de script, substitua as amostras utilizadas neste script pelos valores reais que correspondam ao ambiente de teste.
  • Certifique-se de que executa o script num servidor VMM ou num computador com a consola 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;