Bilanciare il carico del traffico di rete in un'infrastruttura SDN usando VMM

Importante

Questa versione di Virtual Machine Manager (VMM) ha raggiunto la fine del supporto. È consigliabile eseguire l'aggiornamento a VMM 2022.

È possibile usare software Load Balancer (SLB) per distribuire il traffico di rete in modo uniforme tra i carichi di lavoro in Software Define Networking (SDN) gestiti dai provider di servizi cloud e dai tenant. Per altre informazioni, vedere Software Load Balancer (SLB).

System Center Virtual Machine Manager (VMM) supporta i due scenari di bilanciamento del carico seguenti:

  • Bilanciamento del carico del traffico di rete esterno: questo scenario include il bilanciamento del carico del traffico di rete proveniente da una rete esterna. Il bilanciamento del carico viene eseguito tramite un IP virtuale (VIP) pubblico. Le VM con carichi di lavoro possono essere connesse a una rete VM senza isolamento oppure a una rete VM abilitata per la virtualizzazione di rete.

  • Bilanciamento del carico del traffico di rete interno (bilanciamento del carico interno): questo scenario include il bilanciamento del carico del traffico di rete dei carichi di lavoro nella rete VM abilitata per la virtualizzazione di rete. Il bilanciamento del carico viene eseguito tramite un indirizzo VIP.

    Nota

    VMM 2016 supporta la configurazione del bilanciamento del carico tramite PowerShell. La configurazione tramite modelli di servizio non è attualmente supportata.

Questo articolo fornisce informazioni su come configurare il bilanciamento del carico per le VM con carichi di lavoro usando PowerShell.

Nota

  • A partire da VMM 2019 UR1, il tipo Una rete connessa è diventato Rete connessa
  • VMM 2019 UR2 e versioni successive supportano IPv6.

Prima di iniziare

Verificare quanto segue:

Creare un modello VIP

Usare le procedure seguenti per configurare gli indirizzi VIP per bilanciare il carico delle VM con carichi di lavoro (DIP).

  1. Nella console VMM selezionare ModelliVIPdell'infrastruttura>. Fare clic con il pulsante destro del mouse e scegliere Crea modello VIP.

    Screenshot del nome del modello VIP.

  2. Nella pagina Nome specificare il nome e facoltativamente una descrizione. Specificare la porta IP virtuale che verrà usata come porta front-end per il traffico di rete. Nella porta back-end specificare la porta in cui sono ospitati i carichi di lavoro back-end. Selezionare Avanti.

    Screenshot del tipo di modello VIP.

  3. In Specificare un tipo di modello selezionare Specifico. In Produttore selezionare Microsoft. In Modello selezionare Controller di rete Microsoft. Selezionare Avanti.

    Screenshot delle opzioni del protocollo VIP.

  4. In Specificare le opzioni per i protocolli selezionare l'opzione personalizzata e digitare TCP/UDP come nome del protocollo. Selezionare Avanti.

    Nota

    Il servizio di bilanciamento del carico software supporta solo il bilanciamento del carico di livello 4 per il traffico TCP/UDP. I protocolli HTTP/HTTPS non sono supportati.

  5. Per Persistenza e Bilanciamento del carico usare i valori predefiniti. Selezionare Avanti.

    Screenshot di Monitoraggio integrità.

    Nota

    SLB non supporta la persistenza e diversi metodi di bilanciamento del carico. Per impostazione predefinita, il servizio di bilanciamento del carico software usa l'algoritmo Round robin per il bilanciamento del carico.

  6. In Monitoraggi integrità inserire, se lo si desidera, i valori appropriati. Selezionare Avanti.

    Opzioni: TCP e HTTP sono supportati come protocolli di monitoraggio dell'integrità se viene usato il servizio di bilanciamento del carico software.

  7. Verificare le impostazioni e selezionare Fine.

Una volta creato il modello, è possibile trovarlo in Infrastruttura>Modelli VIP.

Creare un indirizzo VIP tramite PowerShell

Creare un indirizzo VIP usando gli script di esempio seguenti. Selezionare lo script in base al tipo di traffico di rete di cui si vuole bilanciare il carico:

Script per la creazione di un indirizzo VIP per bilanciare il carico del traffico di rete esterno

Script per la creazione di un indirizzo VIP per bilanciare il carico del traffico di rete interno

Script per la creazione di un indirizzo VIP per il bilanciamento del carico del traffico di rete esterno

Lo script di esempio seguente crea l'indirizzo VIP da una rete IP pubblica per il bilanciamento del carico delle VM con carichi di lavoro WGB-001 e WGB-002 sulla porta 80.

Questo script può essere usato per creare l'indirizzo VIP di bilanciamento del carico VIP passando anche l'indirizzo VIP IPv6.

Le VM con carichi di lavoro possono essere connesse a una rete senza isolamento oppure a reti VM abilitate per la virtualizzazione di rete.

Nota

  • Nella sezione relativa ai parametri dello script sostituire i valori effettivi corrispondenti al proprio ambiente di test con gli esempi usati in questo script.
  • Assicurarsi di eseguire lo script in un server VMM o in un computer che esegue la console 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 per la creazione di un indirizzo VIP per il bilanciamento del carico del traffico di rete interno

Per lo script di esempio seguente, è stato creato un nuovo modello VIP in base a ILB-VIP-Template per il bilanciamento del carico della porta 443 seguendo la procedura descritta nella sezione precedente. Lo script crea un indirizzo VIP dalla rete VM tenant per bilanciare il carico delle VM ILB-001 e ILB-002, che fanno parte della stessa rete VM tenant.

Questo script può essere usato per creare l'indirizzo VIP di bilanciamento del carico VIP passando anche l'indirizzo VIP IPv6.

Nota

  • Nello scenario di bilanciamento del carico interno, l'indirizzo VIP proviene dalla rete vm tenant. $VipNetworkName corrisponde quindi al nome della rete VM tenant dove sono connesse le VM. Assicurarsi che il pool IP della rete VM tenant abbia gli IP riservati per gli indirizzi VIP. $VipAddress è uno degli indirizzi IP tra gli indirizzi VIP riservati.
  • Nella sezione relativa ai parametri dello script sostituire i valori effettivi corrispondenti al proprio ambiente di test con gli esempi usati in questo script.
  • Assicurarsi di eseguire lo script in un server VMM o in un computer che esegue la console 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;