使用 VMM 對 SDN 網狀架構中的網路流量進行負載平衡
您可以使用軟體負載平衡器 (SLB) 將網路流量平均分散到雲端服務提供者和租使用者所管理的軟體定義網路 (SDN) 工作負載之間。 如需詳細資訊,請參閱 軟體負載平衡器 (SLB) 。
System Center Virtual Machine Manager (VMM) 支援下列兩種負載平衡案例:
負載平衡外部網路流量:此案例包含負載平衡來自外部網路的網路流量。 負載平衡是透過公用虛擬IP(VIP) 來完成。 工作負載 VM 可以連線至 無隔離 VM 網路或 已啟用網路虛擬化 的 VM 網路。
負載平衡內部網路流量(內部負載平衡):此案例包括針對網路虛擬化啟用的 VM 網路中工作負載的網路流量進行負載平衡。 負載平衡是透過VIP來完成。
注意
VMM 支援使用 PowerShell 設定負載平衡。 目前不支援透過服務範本進行設定。
本文提供如何使用PowerShell設定工作負載 VM 負載平衡的相關信息。
注意
- 從 VMM 2019 UR1,一個連線的網路類型會變更為連線的網路
- VMM 2019 UR2 和更新版本支援 IPv6。
在您開始使用 Intune 之前
確認下列事項:
部署 SDN 網路控制站 和 SDN 軟體負載平衡器 。
必要的 VM 會在適當的網路上建立,並識別出用於負載平衡。
建立VIP範本
使用下列程式來設定VIP以負載平衡工作負載 VM(DIP)。
在 VMM 控制台中,選取 [網狀架構>VIP 範本]。 以滑鼠右鍵按下並選取 [ 建立VIP範本]。
在 [ 名稱] 頁面中,提供名稱和選擇性描述。 指定將作為網路流量前埠的虛擬IP埠。 在 [ 後端埠] 中,指定裝載後端工作負載的埠。 選取 [下一步]。
在 [類型] 的 [指定範本類型] 底下,選取 [特定]。 從 [製造商] 下拉式清單中選取 [Microsoft ],然後 從 [型號] 下拉式清單中Microsoft網络控制站 。
選取 [下一步]。
在 [ 指定通訊協定選項] 中,選取 [通訊協定名稱] 中的 [自定義] 選項和 [TCP/UDP]。 選取 [下一步]。
注意
SLB 僅支援 TCP/UDP 流量的第 4 層負載平衡。 不支援 HTTP/HTTPS 通訊協定。
針對 持續性 和 負載平衡,請使用預設值。 選取 [下一步]。
注意
SLB 不支持持續性和不同的負載平衡方法。 根據預設,SLB 會使用迴圈配置資源演算法進行負載平衡。
在 狀況監控 中,選擇性地插入適當的值。 選取 [下一步]。
選項:如果使用 SLB,則支援 TCP 和 HTTP 作為健康情況監視器通訊協定。
確認設定,然後選取 [ 完成]。
建立範本之後,您可以在 [網狀架構>VIP 範本] 下找到此範本。
使用 PowerShell 建立 VIP
使用下列範例腳本建立VIP。 根據您想要進行負載平衡的網路流量類型,選取腳本:
用來建立VIP以負載平衡外部網路流量的腳本
下列範例腳本會從公用IP網路建立VIP,以平衡埠80上的工作負載VM WGB-001和WGB-002負載。
此腳本也可以透過傳遞 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以負載平衡內部網路流量的腳本
針對下列範例腳本,我們使用上一節詳述的程式,依名稱 ILB-VIP-Template 建立新的 VIP 範本,以平衡埠 443 的負載。 腳本會從租使用者 VM 網路建立 VIP,以平衡 VM ILB-001 和 ILB-002 的負載平衡,這些 VM 是相同租使用者 VM 網路的一部分。
此腳本也可以透過傳遞 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;