虚拟网络中的来宾群集

适用于:Windows Server 2022、Windows Server 2019、Windows Server 2016,Azure Stack HCI 版本 21H2 和 20H2

连接到虚拟网络的虚拟机只允许使用网络控制器分配的 IP 地址在网络上进行通信。 需要浮动 IP 地址的群集技术(如 Microsoft 故障转移群集)需要一些额外的步骤才能正常运行。

使浮动 IP 可访问的方法是使用软件负载均衡器 (SLB) 虚拟 IP (VIP)。 软件负载均衡器必须在该 IP 的端口上配置运行状况探测,以便 SLB 将流量定向到当前具有该 IP 的计算机。

示例:负载均衡器配置

此示例假定已创建将成为群集节点的 VM,并将其附加到虚拟网络。 有关指南,请参阅创建 VM 并连接到租户虚拟网络或 VLAN

在此示例中,你将创建一个虚拟 IP 地址 (192.168.2.100) 来表示群集的浮动 IP 地址,并将运行状况探测配置为监视 TCP 端口 59999,以确定哪个节点是活动节点。

  1. 选择 VIP。

    通过分配 VIP IP 地址进行准备,该地址可以是群集节点所在的同一子网中的任何未使用或保留的地址。 VIP 必须与群集的浮动地址匹配。

    $VIP = "192.168.2.100"
    $subnet = "Subnet2"
    $VirtualNetwork = "MyNetwork"
    $ResourceId = "MyNetwork_InternalVIP"
    
  2. 创建负载均衡器属性对象。

    $LoadBalancerProperties = new-object Microsoft.Windows.NetworkController.LoadBalancerProperties
    
  3. 创建前端 IP 地址。

    $LoadBalancerProperties.frontendipconfigurations += $FrontEnd = new-object Microsoft.Windows.NetworkController.LoadBalancerFrontendIpConfiguration
    $FrontEnd.properties = new-object Microsoft.Windows.NetworkController.LoadBalancerFrontendIpConfigurationProperties
    $FrontEnd.resourceId = "Frontend1"
    $FrontEnd.resourceRef = "/loadBalancers/$ResourceId/frontendIPConfigurations/$($FrontEnd.resourceId)"
    $FrontEnd.properties.subnet = new-object Microsoft.Windows.NetworkController.Subnet
    $FrontEnd.properties.subnet.ResourceRef = "/VirtualNetworks/MyNetwork/Subnets/Subnet2"
    $FrontEnd.properties.privateIPAddress = $VIP
    $FrontEnd.properties.privateIPAllocationMethod = "Static"
    
  4. 创建后端池以包含群集节点。

    $BackEnd = new-object Microsoft.Windows.NetworkController.LoadBalancerBackendAddressPool
    $BackEnd.properties = new-object Microsoft.Windows.NetworkController.LoadBalancerBackendAddressPoolProperties
    $BackEnd.resourceId = "Backend1"
    $BackEnd.resourceRef = "/loadBalancers/$ResourceId/backendAddressPools/$($BackEnd.resourceId)"
    $LoadBalancerProperties.backendAddressPools += $BackEnd
    
  5. 添加探测以检测浮动地址当前处于活动状态的群集节点。

    注意

    针对下面定义的端口对 VM 的永久地址进行探测查询。 端口必须仅在活动节点上做出响应。

    $LoadBalancerProperties.probes += $lbprobe = new-object Microsoft.Windows.NetworkController.LoadBalancerProbe
    $lbprobe.properties = new-object Microsoft.Windows.NetworkController.LoadBalancerProbeProperties
    
    $lbprobe.ResourceId = "Probe1"
    $lbprobe.resourceRef = "/loadBalancers/$ResourceId/Probes/$($lbprobe.resourceId)"
    $lbprobe.properties.protocol = "TCP"
    $lbprobe.properties.port = "59999"
    $lbprobe.properties.IntervalInSeconds = 5
    $lbprobe.properties.NumberOfProbes = 11
    
  6. 为 TCP 端口 1433 添加负载均衡规则。

    可以根据需要修改协议和端口。 对于此 VIP 上的其他端口和协议,还可以多次重复此步骤。 请务必将 EnableFloatingIP 设置为 $true,因为这会告知负载均衡器就地将数据包发送到具有原始 VIP 的节点。

    $LoadBalancerProperties.loadbalancingRules += $lbrule = new-object Microsoft.Windows.NetworkController.LoadBalancingRule
    $lbrule.properties = new-object Microsoft.Windows.NetworkController.LoadBalancingRuleProperties
    $lbrule.ResourceId = "Rules1"
    
    $lbrule.properties.frontendipconfigurations += $FrontEnd
    $lbrule.properties.backendaddresspool = $BackEnd
    $lbrule.properties.protocol = "TCP"
    $lbrule.properties.frontendPort = $lbrule.properties.backendPort = 1433
    $lbrule.properties.IdleTimeoutInMinutes = 4
    $lbrule.properties.EnableFloatingIP = $true
    $lbrule.properties.Probe = $lbprobe
    
  7. 在网络控制器中创建负载均衡器。

    $lb = New-NetworkControllerLoadBalancer -ConnectionUri $URI -ResourceId $ResourceId -Properties $LoadBalancerProperties -Force
    
  8. 向后端池添加群集节点。

    可以将群集所需的任意数量的节点添加到池中。

    # Cluster Node 1
    
    $nic = get-networkcontrollernetworkinterface  -connectionuri $uri -resourceid "ClusterNode1_Network-Adapter"
    $nic.properties.IpConfigurations[0].properties.LoadBalancerBackendAddressPools += $lb.properties.backendaddresspools[0]
    $nic = new-networkcontrollernetworkinterface  -connectionuri $uri -resourceid $nic.resourceid -properties $nic.properties -force
    
     # Cluster Node 2
    
    $nic = get-networkcontrollernetworkinterface  -connectionuri $uri -resourceid "ClusterNode2_Network-Adapter"
    $nic.properties.IpConfigurations[0].properties.LoadBalancerBackendAddressPools += $lb.properties.backendaddresspools[0]
    $nic = new-networkcontrollernetworkinterface  -connectionuri $uri -resourceid $nic.resourceid -properties $nic.properties -force
    

    创建负载均衡器并将网络接口添加到后端池后,即可配置群集。

  9. (可选)如果使用 Microsoft 故障转移群集,请继续下一个示例。

示例 2:配置 Microsoft 故障转移群集

可以使用以下步骤来配置故障转移群集。

  1. 安装和配置故障转移群集的属性。

    add-windowsfeature failover-clustering -IncludeManagementTools
    Import-module failoverclusters
    
    $ClusterName = "MyCluster"
    
    $ClusterNetworkName = "Cluster Network 1"
    $IPResourceName =
    $ILBIP = "192.168.2.100"
    
    $nodes = @("DB1", "DB2")
    
  2. 在一个节点上创建群集。

    New-Cluster -Name $ClusterName -NoStorage -Node $nodes[0]
    
  3. 停止群集资源。

    Stop-ClusterResource "Cluster Name" 
    
  4. 设置群集 IP 和探测端口。

    IP 地址必须与上一示例中使用的前端 IP 地址匹配,探测端口必须与上一示例中的探测端口匹配。

    Get-ClusterResource "Cluster IP Address" | Set-ClusterParameter -Multiple @{"Address"="$ILBIP";"ProbePort"="59999";"SubnetMask"="255.255.255.255";"Network"="$ClusterNetworkName";"EnableDhcp"=0}
    
  5. 启动群集资源。

     Start-ClusterResource "Cluster IP Address"  -Wait 60 
     Start-ClusterResource "Cluster Name"  -Wait 60 
    
  6. 添加剩余的节点。

    Add-ClusterNode $nodes[1]
    

群集处于活动状态。流向指定端口上的 VIP 的流量定向到活动节点。