VMM を使用して SDN ファブリックのネットワーク トラフィックを負荷分散する
ソフトウェア ロード バランサー (SLB) を使って、クラウド サービス プロバイダー (CSP) とテナントによって管理されるソフトウェアによるネットワーク制御 (SDN) でワークロードにネットワーク トラフィックを均等に分散させることができます。 詳細については、ソフトウェア ロード バランサー (SLB) に関する記事を参照してください。
System Center Virtual Machine Manager (VMM) では、負荷分散の次の 2 つのシナリオがサポートされています。
外部ネットワーク トラフィックの負荷分散: このシナリオには、外部ネットワークから送信されるネットワーク トラフィックの負荷分散が含まれます。 負荷分散は、パブリック仮想 IP (VIP) を介して行われます。 ワークロード VM は、 分離 VM ネットワークに接続することも、 network 仮想化 有効な VM ネットワークに接続することもできます。
内部ネットワーク トラフィックの負荷分散 (内部負荷分散): このシナリオには、 network 仮想化が有効になっている VM ネットワーク内のワークロードのネットワーク トラフィックの負荷分散が含まれます。 負荷分散は VIP を介して行われます。
Note
VMM 2016 では、PowerShell を使用した負荷分散の構成がサポートされています。 サービス テンプレートを使用した構成は現在サポートされていません。
この記事では、PowerShell を使用してワークロード VM の負荷分散を構成する方法について説明します。
Note
- VMM 2019 UR1 から、 One Connected ネットワークの種類が Connected Network に変更されました
- VMM 2019 UR2 以降では、IPv6 がサポートされています。
開始する前に
次のことを確認します。
SDN ネットワーク コントローラー と SDN software ロード バランサー がデプロイされます。
必要な VM は適切なネットワーク上に作成され、負荷分散のために識別されます。
VIP テンプレートを作成する
ワークロード VM (DIP) の負荷分散を行う VIP を構成するには、次の手順に従います。
VMM コンソールで、 Fabric>VIP テンプレートを選択します。 右クリックして[VIP テンプレートの作成] 選択。
Name ページで、名前と省略可能な説明を指定します。 ネットワーク トラフィックのフロントエンド ポートとして使用する 仮想 IP ポート を指定します。 バックエンド ポートで、バックエンド ワークロードをホストするポートを指定します。 [次へ] を選択します。
Typeのテンプレートの種類を指定しますで、Specificを選択します。 [製造元] ドロップダウンから Microsoft を選択し、[モデル] ドロップダウンから [Microsoft ネットワーク コントローラーをします。
[次へ] を選択します。
Specify Protocol オプションで、[プロトコル名] で [カスタム] オプションと [TCP/UDP] を選択します。 [次へ] を選択します。
Note
SLB では、TCP/UDP トラフィックのレイヤー 4 負荷分散のみがサポートされます。 HTTP/HTTPS プロトコルはサポートされていません。
Persistence と Load Balancing では、既定値を使用します。 [次へ] を選択します。
Note
SLB では、永続化とさまざまな負荷分散方法はサポートされていません。 既定では、SLB は負荷分散にラウンド ロビン アルゴリズムを使用します。
ヘルス モニターで必要に応じて、適切な値を挿入します。 [次へ] を選択します。
オプション: SLB が使用されている場合、TCP と HTTP は正常性モニター プロトコルとしてサポートされます。
設定を確認し、 Finish を選択します。
テンプレートが作成されると、 Fabric>VIP テンプレートの下に表示されます。
PowerShell を使用して VIP を作成する
次のサンプル スクリプトを使用して VIP を作成します。 負荷分散するネットワーク トラフィックの種類に基づいてスクリプトを選択します。
• 外部ネットワーク トラフィックを負荷分散する VIP を作成するためのスクリプト
• 内部ネットワーク トラフィックを負荷分散する VIP を作成するためのスクリプト
外部ネットワーク トラフィックを負荷分散する VIP を作成するためのスクリプト
次のサンプル スクリプトでは、パブリック IP ネットワークから VIP を作成し、ポート 80 でワークロード VM WGB-001 と WGB-002 を負荷分散します。
このスクリプトを使用して、IPv6 VIP アドレスを渡すことで負荷分散 VIP を作成することもできます。
ワークロード VM は、 分離 ネットワークまたは network 仮想化 有効な VM ネットワークに接続できます。
Note
- スクリプト パラメーター セクションで、テスト環境に一致する実際の値を、このスクリプトで使用されるサンプルに置き換えます。
- 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 を作成するためのスクリプト
次のスクリプト例では、「 previous」セクションで詳しく説明する手順を使用して、ポート 443 を負荷分散するための新しい VIP テンプレートを ILB-VIP-Template という名前で作成しました。 このスクリプトでは、テナント VM ネットワークから VIP を作成して、同じテナント VM ネットワークの一部である VM ILB-001 と ILB-002 を負荷分散します。
このスクリプトを使用して、IPv6 VIP アドレスを渡すことで負荷分散 VIP を作成することもできます。
Note
- 内部負荷分散シナリオでは、VIP はテナント VM ネットワークから取得されます。 そのため、 $VipNetworkName は、VM が接続されているのと同じテナント VM ネットワーク名です。 テナント VM ネットワーク IP プールに VIP 用に予約された IP があることを確認します。 $VipAddressは、予約 VIP からの IP アドレスの 1 つです。
- スクリプト パラメーター セクションで、テスト環境に一致する実際の値を、このスクリプトで使用されるサンプルに置き換えます。
- 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;