使用 VMM 对 SDN 构造中的网络流量进行负载均衡
重要
此版本的 Virtual Machine Manager (VMM) 已终止支持。 建议 升级到 VMM 2022。
可以使用软件负载均衡器 (SLB) 在由云服务提供商 (CSP) 和租户管理的软件定义的网络 (SDN) 中的工作负载之间平均分配网络流量。 有关详细信息,请参阅软件负载均衡器 (SLB)。
System Center Virtual Machine Manager (VMM) 支持以下两种情形的负载均衡:
对外部网络流量进行负载均衡:此情形包括对来自外部网络的网络流量进行负载均衡。 负载均衡通过公用虚拟 IP (VIP) 来实现。 工作负荷 VM 可以连接到无隔离 VM 网络或启用了网络虚拟化的 VM 网络。
对内部网络流量进行负载均衡(内部负载均衡):此情形包括在启用网络虚拟化的 VM 网络中对工作负荷的网络流量进行负载均衡。 负载均衡通过 VIP 来实现。
注意
VMM 2016 支持使用 PowerShell 配置负载均衡。 当前不支持通过服务模板进行配置。
本文提供有关如何使用 PowerShell 配置工作负荷 VM 的负载均衡的信息。
注意
- 从 VMM 2019 UR1 开始,“一个连接的网络”类型已更改为“连接的网络”
- VMM 2019 UR2 及更高版本支持 IPv6。
准备工作
确保以下信息:
创建 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 网络的 VM ILB-001 和 ILB-002 进行负载均衡。
此脚本还可用于通过传递 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;
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈