다음을 통해 공유


VMM을 사용하여 SDN 패브릭에서 네트워크 트래픽 부하 분산

중요

이 버전의 VMM(Virtual Machine Manager)은 지원이 종료되었습니다. VMM 2022로 업그레이드하는 것이 좋습니다.

SLB(소프트웨어 Load Balancer)를 사용하여 CSP(클라우드 서비스 공급자) 및 테넌트에 의해 관리되는 SDN(소프트웨어 정의 네트워킹)의 워크로드 간에 네트워크 트래픽을 균등하게 배포할 수 있습니다. 자세한 내용은 SLB(소프트웨어 Load Balancer)를 참조하세요.

System Center VMM(Virtual Machine Manager)에서는 다음과 같은 두 가지 시나리오의 부하 분산을 지원합니다.

  • 외부 네트워크 트래픽 부하 분산: 이 시나리오에는 외부 네트워크에서 들어오는 네트워크 트래픽의 부하 분산이 포함됩니다. 부하 분산은 공용 VIP(가상 IP)를 통해 수행됩니다. 워크로드 VM은 격리 안 함 VM 네트워크 또는 네트워크 가상화 사용 VM 네트워크에 연결할 수 있습니다.

  • 내부 네트워크 트래픽 부하 분산(내부 부하 분산): 이 시나리오에는 네트워크 가상화에 사용되는 VM 네트워크에서 워크로드의 네트워크 트래픽 부하 분산이 포함됩니다. 부하 분산은 VIP를 통해 수행됩니다.

    참고

    VMM 2016에서는 PowerShell을 사용한 부하 분산 구성을 지원합니다. 서비스 템플릿을 통한 구성은 현재 지원되지 않습니다.

이 문서에서는 PowerShell을 사용하여 워크로드의 부하 분산을 구성하는 방법에 대한 정보를 제공합니다.

참고

  • VMM 2019 UR1에서 하나의 연결된 네트워크 유형이 연결된 네트워크로 변경되었습니다.
  • VMM 2019 UR2 이상에서는 IPv6를 지원합니다.

시작하기 전에

다음을 확인합니다.

VIP 템플릿 만들기

워크로드 VM(DIP)을 부하 분산하도록 VIP를 구성하려면 다음 절차를 따르세요.

  1. VMM 콘솔에서 패브릭>VIP 템플릿을 선택합니다. 마우스 오른쪽 단추를 클릭하고 VIP 템플릿 만들기를 선택합니다.

    VIP 템플릿 이름의 스크린샷.

  2. 이름 페이지에서 이름 및 설명(선택 사항)을 입력합니다. 네트워크 트래픽에 대한 프런트 엔드 포트로 사용할 가상 IP 포트를 지정합니다. 백 엔드 포트에서 백 엔드 워크로드가 호스트되는 포트를 지정합니다. 다음을 선택합니다.

    VIP 템플릿 유형의 스크린샷.

  3. 템플릿 유형 지정에서 [특정]을 선택합니다. 제조업체에서 [Microsoft]를 선택합니다. 모델에서 [Microsoft 네트워크 컨트롤러]를 선택합니다. 다음을 선택합니다.

    VIP 프로토콜 옵션의 스크린샷.

  4. 프로토콜 옵션 지정에서 [사용자 지정] 옵션을 선택하고 [프로토콜 이름]에 TCP/UDP를 입력합니다. 다음을 선택합니다.

    참고

    SLB는 TCP/UDP 트래픽의 계층 4 부하 분산만 지원합니다. HTTP/HTTPS 프로토콜은 지원되지 않습니다.

  5. 지속성부하 분산에는 기본값을 사용합니다. 다음을 선택합니다.

    상태 모니터의 스크린샷

    참고

    SLB는 지속성 및 다른 부하 분산 방법을 지원하지 않습니다. 기본적으로 SLB는 부하 분산에 라운드 로빈 알고리즘을 사용합니다.

  6. 상태 모니터에서 필요에 따라 적절한 값을 삽입합니다. 다음을 선택합니다.

    옵션: TCP 및 HTTP는 SLB가 사용되는 경우 상태 모니터 프로토콜로 지원됩니다.

  7. 설정을 확인하고 마침을 선택합니다.

생성된 템플릿은 패브릭VIP 템플릿에서 찾을 수 있습니다.

PowerShell을 사용하여 VIP 만들기

다음 예제 스크립트를 사용하여 VIP를 만듭니다. 부하 분산하려는 네트워크 트래픽의 유형에 따라 스크립트를 선택합니다.

외부 네트워크 트래픽을 부하 분산시키는 VIP를 만드는 스크립트

내부 네트워크 트래픽을 부하 분산시키는 VIP를 만드는 스크립트

외부 네트워크 트래픽을 부하 분산시키는 VIP를 만드는 스크립트

다음 예제 스크립트에서는 포트 80의 워크로드 VM WGB-001 & WGB 002 부하 분산을 위해 공용 IP 네트워크에서 VIP를 만듭니다.

이 스크립트는 IPv6 VIP 주소를 전달하여 부하 분산 VIP를 만드는 데도 사용할 수 있습니다.

워크로드 VM은 격리 안 함 네트워크 또는 네트워크 가상화 사용 VM 네트워크에 연결할 수 있습니다.

참고

  • 스크립트 매개 변수 섹션에서 이 스크립트에 사용된 샘플을 테스트 환경에 맞는 실제 값으로 대체합니다.
  • 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;

내부 네트워크 트래픽을 부하 분산시키는 VIP를 만드는 스크립트

다음 예제 스크립트에서는 이전 섹션에 설명된 절차에 따라 포트 443의 부하 분산을 위해 ILB-VIP-Template이라는 이름으로 새 VIP 템플릿을 만들었습니다. 이 스크립트는 동일한 테넌트 VM 네트워크의 일부인 VM ILB-001 & ILB-002의 부하 분산을 위해 테넌트 VM 네트워크에서 VIP를 만듭니다.

이 스크립트는 IPv6 VIP 주소를 전달하여 부하 분산 VIP를 만드는 데도 사용할 수 있습니다.

참고

  • 내부 부하 분산 시나리오에서 VIP는 테넌트 VM 네트워크에서 제공됩니다. 따라서 $VipNetworkName은 VM이 연결되어 있는 것과 동일한 테넌트 VM 네트워크 이름입니다. 테넌트 VM 네트워크 IP 풀에 VIP용으로 예약된 IP 가 있는지 확인합니다. $VipAddress는 예약된 VIP의 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;