Поделиться через


Балансировка нагрузки сетевого трафика в структуре SDN с помощью VMM

Важно!

Поддержка этой версии Virtual Machine Manager (VMM) завершена. Рекомендуется выполнить обновление до VMM 2022.

Вы можете использовать программную подсистему балансировки нагрузки (SLB) для равномерного распределения сетевого трафика между рабочими нагрузками в программно-определяемой сети (SDN), управляемой поставщиками облачных служб (CSP) и арендаторами. Дополнительные сведения см. в статье Программная подсистема балансировки нагрузки (SLB)".

System Center Virtual Machine Manager (VMM) поддерживает следующие два сценария балансировки нагрузки:

  • Балансировка нагрузки внешнего сетевого трафика. Этот сценарий предполагает балансировку нагрузки сетевого трафика, поступающего из внешней сети. Балансировка нагрузки осуществляется через общедоступный виртуальный IP-адрес. Виртуальные машины, на которых выполняется рабочая нагрузка, могут подключаться к сети виртуальных машин без изоляции или к сети виртуальных машин с поддержкой виртуализации сети.

  • Балансировка нагрузки внутреннего сетевого трафика (внутренняя балансировка нагрузки). Этот сценарий предполагает балансировку нагрузки для сетевого трафика рабочих нагрузок в сети виртуальных машин с поддержкой виртуализации сети. Балансировка нагрузки осуществляется через виртуальный IP-адрес.

    Примечание

    VMM 2016 поддерживает настройку балансировки нагрузки с помощью PowerShell. Настройка с помощью шаблонов служб в настоящее время не поддерживается.

В этой статье содержатся сведения о том, как настроить балансировку нагрузки для рабочих нагрузок виртуальных машин с помощью PowerShell.

Примечание

  • В VMM 2019 UR1 тип сети Одна подключенная изменен на Подключенная сеть.
  • В VMM 2019 UR2 и более поздних версий поддерживается IPv6.

Перед началом работы

Убедитесь, что:

Создание шаблона виртуального IP-адреса

Чтобы настроить виртуальные IP-адреса для балансировки нагрузки виртуальных машин, выполните описанные ниже процедуры.

  1. В консоли VMM выберите FabricVIP Templates (Шаблоны ВИРТУАЛЬНЫх IP-адресовструктуры>). Щелкните правой кнопкой мыши и выберите пункт Создать шаблон виртуального IP-адреса.

    Снимок экрана: имя шаблона виртуального IP-адреса.

  2. На странице Имя укажите имя и при необходимости описание. Укажите виртуальный IP-порт , который будет использоваться в качестве интерфейсного порта для сетевого трафика. В поле Внутренний порт укажите порт, на котором размещаются серверные рабочие нагрузки. Выберите Далее.

    Снимок экрана: тип шаблона виртуального IP-адреса.

  3. В поле Укажите типа шаблона выберите "Определенный". В поле Производитель выберите "Майкрософт". В поле Модель выберите "Сетевой контроллер (Майкрософт)". Выберите Далее.

    Снимок экрана: параметры протокола ВИРТУАЛЬНОго IP-адреса.

  4. В разделе Укажите параметры протокола выберите вариант "Пользовательский" и введите в поле "Имя протокола" значение "TCP/UDP". Выберите Далее.

    Примечание

    Программная подсистема балансировки нагрузки поддерживает балансировку нагрузки трафика TCP/UDP только на уровне 4. Протоколы HTTP/HTTPS не поддерживаются.

  5. Для параметров Сохраняемость и Балансировка нагрузки используйте значения по умолчанию. Выберите Далее.

    Снимок экрана: монитор работоспособности.

    Примечание

    SLB не поддерживает сохраняемость и различные методы балансировки нагрузки. По умолчанию она использует алгоритм циклического перебора для балансировки нагрузки.

  6. В разделе Мониторы работоспособности при необходимости вставьте соответствующие значения. Выберите Далее.

    Варианты: при использовании программной подсистемы балансировки нагрузки в качестве протоколов наблюдения за работоспособностью поддерживаются TCP и HTTP.

  7. Проверьте параметры и нажмите кнопку Готово.

После создания шаблона его можно найти в разделе Структура>Шаблоны виртуальных IP-сетей.

Создание виртуального IP-адреса с помощью PowerShell

Создайте виртуальный IP-адрес, используя приведенный ниже образец скрипта. Выберите скрипт в зависимости от типа сетевого трафика, для которого требуется балансировка нагрузки:

• Скрипт для создания виртуальных IP-адресов для балансировки нагрузки внешнего сетевого трафика

• Скрипт для создания виртуальных IP-адресов для балансировки нагрузки внутреннего сетевого трафика

Скрипт для создания виртуальных IP-адресов для балансировки нагрузки внешнего сетевого трафика

Приведенный ниже пример скрипта создает виртуальный IP-адрес в общедоступной IP-сети для балансировки нагрузки виртуальных машин рабочей нагрузки WGB-001 и WGB-002 через порт 80.

Этот сценарий можно использовать для создания виртуального IP-адреса для балансировки нагрузки. Для этого требуется также передать виртуальный адрес IPv6.

Виртуальные машины, на которых выполняется рабочая нагрузка, могут подключаться к сетям виртуальных машин без изоляции или к сетям виртуальных машин с поддержкой виртуализации сети.

Примечание

  • В разделе параметров сценария подставьте в примеры этого сценария фактические значения, соответствующие вашей тестовой среде.
  • Убедитесь, что сценарий выполняется на сервере VMM или на компьютере с консолью 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;

Скрипт для создания виртуальных IP-адресов для балансировки нагрузки внутреннего сетевого трафика

Для следующего примера скрипта мы создали новый шаблон виртуального IP-адреса с именем ILB-VIP-Template с целью балансировки нагрузки через порт 443. При этом использовалась процедура, описанная в предыдущем разделе. Скрипт создает виртуальный IP-адрес в сети виртуальных машин клиента для балансировки нагрузки виртуальных машин ILB-001 и ILB-002, которые находятся в той же сети виртуальных машин клиента.

Этот сценарий можно использовать для создания виртуального IP-адреса для балансировки нагрузки. Для этого требуется также передать виртуальный адрес IPv6.

Примечание

  • В сценарии внутренней балансировки нагрузки виртуальный IP-адрес поступает из сети виртуальной машины клиента. Поэтому $VipNetworkName — это имя той же сети виртуальных машин клиента, к которой подключены виртуальные машины. В пуле IP-адресов сети виртуальных машин клиента должны быть IP-адреса, зарезервированные для виртуальных IP-адресов. $VipAddress — это один из IP-адресов, зарезервированных для виртуальных IP-адресов.
  • В разделе параметров сценария подставьте в примеры этого сценария фактические значения, соответствующие вашей тестовой среде.
  • Убедитесь, что сценарий выполняется на сервере VMM или на компьютере с консолью 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;