Balancear a carga do tráfego de rede em uma malha SDN usando o VMM
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 dois cenários de balanceamento de carga a seguir:
Balanceamento de carga do tráfego de rede externa: 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 IP virtual (VIP) público. As VMs de 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 habilitada para virtualização de rede. O balanceamento de carga é feito por meio de um VIP.
Observação
O VMM dá suporte à configuração do balanceamento de carga usando 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 de carga de trabalho usando o PowerShell.
Observação
- No VMM 2019 UR1, um tipo de rede conectado é alterado para Rede conectada
- O VMM 2019 UR2 e posterior dá suporte ao IPv6.
Antes de começar
Verifique o seguinte:
O controlador de rede SDN e o balanceador de carga do software SDN são implantados.
As VMs necessárias são criadas em redes apropriadas e são identificadas para balanceamento de carga.
Criar um modelo VIP
Use os procedimentos a seguir para configurar os VIPs para balancear a carga das VMs de carga de trabalho (DIPs).
No console do VMM, selecione Modelos VIP de Malha>. Clique com o botão direito do mouse e selecione Criar modelo VIP.
Na página Nome, forneça o nome e a descrição opcional. Especifique a porta IP virtual que será usada como porta 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 hospedadas. Selecione Avançar.
Em Tipo, em Especificar um tipo de modelo, selecione Específico. Selecione Microsoft na lista suspensa Fabricante e Controlador de Rede Microsoft na lista suspensa Modelo.
Selecione Avançar.
Em Especificar opções de protocolo, selecione a opção Personalizado e TCP/UDP em Nome do protocolo. Selecione Avançar.
Observação
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.
Para Persistência e Balanceamento de Carga, use os padrões. Selecione Avançar.
Observação
O SLB não oferece suporte à persistência e a diferentes métodos de balanceamento de carga. Por padrão, o SLB usa o algoritmo Round Robin para balanceamento de carga.
Em Monitores de Integridade, opcionalmente, insira os valores apropriados. Selecione Avançar.
Opções: TCP e HTTP são suportados como protocolos de monitor de integridade se o SLB for usado.
Verifique as configurações e selecione Concluir.
Depois que o modelo for criado, você poderá encontrá-lo em Modelos VIP do Fabric>.
Criar um VIP usando o PowerShell
Crie um VIP usando os scripts de exemplo a seguir. Selecione o script com base no tipo de tráfego de rede que 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 VIP para balancear a carga do tráfego de rede externa
O script de exemplo a seguir cria o VIP de uma rede IP pública para balancear a carga das VMs de carga de trabalho WGB-001 e WGB-002 na porta 80.
Esse script pode ser usado para criar um VIP de balanceamento de carga passando o endereço VIP IPv6 também.
As VMs de carga de trabalho podem ser conectadas a uma rede sem isolamento ou 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 pelos exemplos usados neste script.
- Certifique-se de executar 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 VIP para balancear a carga do tráfego de rede interna
Para o script de exemplo a seguir, criamos um novo modelo VIP com o nome ILB-VIP-Template para balancear a carga da porta 443 usando o procedimento detalhado na seção anterior. O script cria um VIP da rede VM do locatário para balancear a carga das VMs ILB-001 e ILB-002, que fazem parte da mesma rede VM do locatário.
Esse script pode ser usado para criar um VIP de balanceamento de carga passando o endereço VIP IPv6 também.
Observação
- No cenário de balanceamento de carga interno, o VIP vem da rede VM do locatário. Portanto, o $VipNetworkName é o mesmo nome de rede VM do locatário em que as VMs estão conectadas. Verifique se o pool de IPs da rede VM do locatário tem os IPs reservados para 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 pelos exemplos usados neste script.
- Certifique-se de executar 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;