使用 PowerShell 命令配置具有多个 IP 地址和 NIC 的高可用性设置
可以在 Azure 上的主动-被动高可用性 (HA) 设置中部署一对具有多个 NIC 的 NetScaler VPX 实例。 每个 NIC 都可以包含多个 IP 地址。
主动-被动部署需要:
- HA 独立网络配置 (INC) 配置
- 处于直接服务器返回 (DSR) 模式的 Azure 负载均衡器 (ALB)
所有流量均通过主节点。 在主节点发生故障前,辅助节点一直处于备用模式。
注意:
要在 Azure 云上部署 NetScaler VPX 高可用性部署,您需要一个可以在两个高可用性节点之间移动的浮动公共 IP (PIP)。 Azure 负载均衡器 (ALB) 提供浮动 PIP,在发生故障转移时自动移动到第二个节点。
示意图:主动-被动部署体系结构示例

在主动-被动部署中,ALB 浮动公用 IP (PIP) 地址作为 VIP 地址添加在每个 VPX 节点中。 在 HA-INC 配置中,VIP 地址是浮动的,而 SNIP 地址是实例特定的。
ALB 通过每 5 秒发送一次运行状况探测来监视每个 VPX 实例,并将流量仅重定向至按固定时间间隔发送运行状况探测响应的实例。 因此,在 HA 设置中,主节点响应运行状况探测,而辅助节点不响应。 如果主实例错过两个连续的运行状况探测,则 ALB 不会将流量重定向至该实例。 发生故障转移时,新的主实例开始响应运行状况探测,且 ALB 将流量重定向至该实例。 标准 VPX 高可用性故障转移时间为三秒。 切换流量可能需要的故障转移总时间最长为 13 秒。
可以通过以下两种方式在主动-被动高可用性设置中部署 VPX 对:
- NetScaler VPX 标准高可用性模板:使用此选项配置 HA 对,默认选项为三个子网和六个 NIC。
- Windows PowerShell 命令:此选项用于根据您的子网和 NIC 要求来配置高可用性对。
本主题介绍了如何使用 PowerShell 命令在主动-被动高可用性设置中部署 VPX 对。 如果您想使用 NetScaler VPX 标准 HA 模板,请参阅 配置具有多个 IP 地址和 NIC 的 HA 设置。
使用 PowerShell 命令配置 HA-INC 节点
场景:HA-INC PowerShell 部署
在这种情况下,您可以使用表中给出的拓扑来部署 NetScaler VPX 对。 每个 VPX 实例均包含三个 NIC,每个 NIC 均部署在不同的子网中。 每个 NIC均分配了一个 IP 配置。
| ALB | VPX1 | VPX2 | 
|---|---|---|
| ALB 与公用 IP 3 (pip3) 关联 | 管理 IP 配置了 IPConfig1,其中包括一个公用 IP (pip1) 和一个专用 IP (12.5.2.24); nic1; Mgmtsubnet=12.5.2.0/24 | 管理 IP 配置了 IPConfig5,其中包括一个公用 IP (pip3) 和一个专用 IP (12.5.2.26);nic4;Mgmtsubnet=12.5.2.0/24 | 
| 配置的 LB 规则和端口包括 HTTP (80)、SSL (443)、运行状况探测 (9000) | 客户端 IP 配置了 IPConfig3,其中包括一个专用 IP(12.5.1.27);nic2; FrontEndsubet=12.5.1.0/24 | 客户端 IP 配置了 IPConfig7,其中包括一个专用 IP (12.5.1.28);nic5;FrontEndsubet=12.5.1.0/24 | 
| - | 服务器端 IP 配置了 IPConfig4,其中包括一个专用 IP (12.5.3.24); nic3;BackendSubnet=12.5.3.0/24 | 服务器端 IP 配置了 IPConfig8,其中包括一个专用 IP (12.5.3.28);nic6;BackendSubnet=12.5.3.0/24 | 
| - | NSG 的规则和端口包括:SSH (22)、HTTP (80)、HTTPS (443) | - | 
参数设置
此场景中使用以下参数设置:
  $locName= "South east Asia"
  $rgName = "MulitIP-MultiNIC-RG"
  $nicName1= "VM1-NIC1"
  $nicName2 = "VM1-NIC2"
  $nicName3= "VM1-NIC3"
  $nicName4 = "VM2-NIC1"
  $nicName5= "VM2-NIC2"
  $nicName6 = "VM2-NIC3"
  $vNetName = "Azure-MultiIP-ALB-vnet"
  $vNetAddressRange= "12.5.0.0/16"
  $frontEndSubnetName= "frontEndSubnet"
  $frontEndSubnetRange= "12.5.1.0/24"
  $mgmtSubnetName= "mgmtSubnet"
  $mgmtSubnetRange= "12.5.2.0/24"
  $backEndSubnetName = "backEndSubnet"
  $backEndSubnetRange = "12.5.3.0/24"
  $prmStorageAccountName = "multiipmultinicbstorage"
  $avSetName = "multiple-avSet"
  $vmSize= "Standard\_DS4\_V2"
  $publisher = "Citrix"
  $offer = "netscalervpx-120"
  $sku = "netscalerbyol"
  $version="latest"
  $pubIPName1="VPX1MGMT"
  $pubIPName2="VPX2MGMT"
  $pubIPName3="ALBPIP"
  $domName1="vpx1dns"
  $domName2="vpx2dns"
  $domName3="vpxalbdns"
  $vmNamePrefix="VPXMultiIPALB"
  $osDiskSuffix1="osmultiipalbdiskdb1"
  $osDiskSuffix2="osmultiipalbdiskdb2"
  $lbName= "MultiIPALB"
  $frontEndConfigName1= "FrontEndIP"
  $backendPoolName1= "BackendPoolHttp"
  $lbRuleName1= "LBRuleHttp"
  $healthProbeName= "HealthProbe"
  $nsgName="NSG-MultiIP-ALB"
  $rule1Name="Inbound-HTTP"
  $rule2Name="Inbound-HTTPS"
  $rule3Name="Inbound-SSH"
<!--NeedCopy-->
要完成部署,请使用 PowerShell 命令完成以下步骤:
- 创建资源组、存储帐户和可用性集
- 创建网络安全组并添加规则
- 创建虚拟网络和三个子网
- 创建公用 IP 地址
- 为 VPX1 创建 IP 配置
- 为 VPX2 创建 IP 配置
- 为 VPX1 创建 NIC
- 为 VPX2 创建 NIC
- 创建 VPX1
- 创建 VPX2
- 创建 ALB
创建资源组、存储帐户和可用性集。
  New-AzureRmResourceGroup -Name $rgName -Location $locName
  $prmStorageAccount=New-AzureRMStorageAccount -Name $prmStorageAccountName -ResourceGroupName $rgName -Type Standard_LRS -Location $locName
  $avSet=New-AzureRMAvailabilitySet -Name $avSetName -ResourceGroupName $rgName -Location $locName
创建网络安全组并添加规则。
  $rule1 = New-AzureRmNetworkSecurityRuleConfig -Name $rule1Name -Description "Allow HTTP" -Access Allow -Protocol Tcp -Direction Inbound -Priority 101
  -SourceAddressPrefix Internet -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 80
  $rule2 = New-AzureRmNetworkSecurityRuleConfig -Name $rule2Name -Description "Allow HTTPS" -Access Allow -Protocol Tcp -Direction Inbound -Priority 110
  -SourceAddressPrefix Internet -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 443
  $rule3 = New-AzureRmNetworkSecurityRuleConfig -Name $rule3Name -Description "Allow SSH" -Access Allow -Protocol Tcp -Direction Inbound -Priority 120
  -SourceAddressPrefix Internet -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 22
  $nsg = New-AzureRmNetworkSecurityGroup -ResourceGroupName $rgName -Location $locName -Name $nsgName -SecurityRules $rule1,$rule2,$rule3
创建虚拟网络和三个子网。
  $frontendSubnet=New-AzureRmVirtualNetworkSubnetConfig -Name $frontEndSubnetName -AddressPrefix $frontEndSubnetRange (this parameter value should be as per your requirement)
  $mgmtSubnet=New-AzureRmVirtualNetworkSubnetConfig -Name $mgmtSubnetName -AddressPrefix $mgmtSubnetRange
  $backendSubnet=New-AzureRmVirtualNetworkSubnetConfig -Name $backEndSubnetName -AddressPrefix $backEndSubnetRange
  $vnet =New-AzureRmVirtualNetwork -Name $vNetName -ResourceGroupName $rgName -Location $locName -AddressPrefix $vNetAddressRange -Subnet $frontendSubnet,$backendSubnet, $mgmtSubnet
  $subnetName ="frontEndSubnet"
  \$subnet1=\$vnet.Subnets|?{\$\_.Name -eq \$subnetName}
  $subnetName="backEndSubnet"
  \$subnet2=\$vnet.Subnets|?{\$\_.Name -eq \$subnetName}
  $subnetName="mgmtSubnet"
  \$subnet3=\$vnet.Subnets|?{\$\_.Name -eq \$subnetName}
创建公用 IP 地址。
  $pip1=New-AzureRmPublicIpAddress -Name $pubIPName1 -ResourceGroupName $rgName -DomainNameLabel $domName1 -Location $locName -AllocationMethod Dynamic
  $pip2=New-AzureRmPublicIpAddress -Name $pubIPName2 -ResourceGroupName $rgName -DomainNameLabel $domName2 -Location $locName -AllocationMethod Dynamic
  $pip3=New-AzureRmPublicIpAddress -Name $pubIPName3 -ResourceGroupName $rgName -DomainNameLabel $domName3 -Location $locName -AllocationMethod Dynamic
为 VPX1 创建 IP 配置。
  $IpConfigName1 = "IPConfig1"
  $IPAddress = "12.5.2.24"
  $IPConfig1=New-AzureRmNetworkInterfaceIpConfig -Name $IPConfigName1 -Subnet $subnet3 -PrivateIpAddress $IPAddress -PublicIpAddress $pip1 -Primary
  $IPConfigName3="IPConfig-3"
  $IPAddress="12.5.1.27"
  $IPConfig3=New-AzureRmNetworkInterfaceIpConfig -Name $IPConfigName3 -Subnet $subnet1 -PrivateIpAddress $IPAddress -Primary
  $IPConfigName4 = "IPConfig-4"
  $IPAddress = "12.5.3.24"
  $IPConfig4 = New-AzureRmNetworkInterfaceIpConfig -Name $IPConfigName4 -Subnet $subnet2 -PrivateIpAddress $IPAddress -Primary
为 VPX2 创建 IP 配置。
  $IpConfigName5 = "IPConfig5"
  $IPAddress="12.5.2.26"
  $IPConfig5=New-AzureRmNetworkInterfaceIpConfig -Name $IPConfigName5 -Subnet $subnet3 -PrivateIpAddress $IPAddress -PublicIpAddress $pip2 -Primary
  $IPConfigName7="IPConfig-7"
  $IPAddress="12.5.1.28"
  $IPConfig7=New-AzureRmNetworkInterfaceIpConfig -Name $IPConfigName7 -Subnet $subnet1 -PrivateIpAddress $IPAddress -Primary
  $IPConfigName8="IPConfig-8"
  $IPAddress="12.5.3.28"
  $IPConfig8=New-AzureRmNetworkInterfaceIpConfig -Name $IPConfigName8 -Subnet $subnet2 -PrivateIpAddress $IPAddress -Primary
为 VPX1 创建 NIC。
  $nic1=New-AzureRmNetworkInterface -Name $nicName1 -ResourceGroupName $rgName -Location $locName -IpConfiguration $IpConfig1 -NetworkSecurityGroupId $nsg.Id
  $nic2=New-AzureRmNetworkInterface -Name $nicName2 -ResourceGroupName $rgName -Location $locName -IpConfiguration $IpConfig3 -NetworkSecurityGroupId $nsg.Id
  $nic3=New-AzureRmNetworkInterface -Name $nicName3 -ResourceGroupName $rgName -Location $locName -IpConfiguration $IpConfig4 -NetworkSecurityGroupId $nsg.Id
为 VPX2 创建 NIC。
  $nic4=New-AzureRmNetworkInterface -Name $nicName4 -ResourceGroupName $rgName -Location $locName -IpConfiguration $IpConfig5 -NetworkSecurityGroupId $nsg.Id
  $nic5=New-AzureRmNetworkInterface -Name $nicName5 -ResourceGroupName $rgName -Location $locName -IpConfiguration $IpConfig7 -NetworkSecurityGroupId $nsg.Id
  $nic6=New-AzureRmNetworkInterface -Name $nicName6 -ResourceGroupName $rgName -Location $locName -IpConfiguration $IpConfig8 -NetworkSecurityGroupId $nsg.Id
创建 VPX1。
此步骤包括以下子步骤:
- 创建 VM 配置对象
- 设置凭据、操作系统和映像
- 添加 NIC
- 
    指定操作系统磁盘并创建 VM $suffixNumber = 1 $vmName=$vmNamePrefix + $suffixNumber $vmConfig=New-AzureRMVMConfig -VMName $vmName -VMSize $vmSize -AvailabilitySetId $avSet.Id $cred=Get-Credential -Message "Type the name and password for VPX login." $vmConfig=Set-AzureRMVMOperatingSystem -VM $vmConfig -Linux -ComputerName $vmName -Credential $cred $vmConfig=Set-AzureRMVMSourceImage -VM $vmConfig -PublisherName $publisher -Offer $offer -Skus $sku -Version $version $vmConfig=Add-AzureRMVMNetworkInterface -VM $vmConfig -Id $nic1.Id -Primary $vmConfig=Add-AzureRMVMNetworkInterface -VM $vmConfig -Id $nic2.Id $vmConfig=Add-AzureRMVMNetworkInterface -VM $vmConfig -Id $nic3.Id $osDiskName=$vmName + "-" + $osDiskSuffix1 $osVhdUri=$prmStorageAccount.PrimaryEndpoints.Blob.ToString() + "vhds/" + $osDiskName + ".vhd" $vmConfig=Set-AzureRMVMOSDisk -VM $vmConfig -Name $osDiskName -VhdUri $osVhdUri -CreateOption fromImage Set-AzureRmVMPlan -VM $vmConfig -Publisher $publisher -Product $offer -Name $sku New-AzureRMVM -VM $vmConfig -ResourceGroupName $rgName -Location $locName
创建 VPX2。
```
  $suffixNumber=2
  $vmName=$vmNamePrefix + $suffixNumber
  $vmConfig=New-AzureRMVMConfig -VMName $vmName -VMSize $vmSize -AvailabilitySetId $avSet.Id
  $cred=Get-Credential -Message "Type the name and password for VPX login."
  $vmConfig=Set-AzureRMVMOperatingSystem -VM $vmConfig -Linux -ComputerName $vmName -Credential $cred
  $vmConfig=Set-AzureRMVMSourceImage -VM $vmConfig -PublisherName $publisher -Offer $offer -Skus $sku -Version $version
  $vmConfig=Add-AzureRMVMNetworkInterface -VM $vmConfig -Id $nic4.Id -Primary
  $vmConfig=Add-AzureRMVMNetworkInterface -VM $vmConfig -Id $nic5.Id
  $vmConfig=Add-AzureRMVMNetworkInterface -VM $vmConfig -Id $nic6.Id
  $osDiskName=$vmName + "-" + $osDiskSuffix2
  $osVhdUri=$prmStorageAccount.PrimaryEndpoints.Blob.ToString() + "vhds/" + $osDiskName + ".vhd"
  $vmConfig=Set-AzureRMVMOSDisk -VM $vmConfig -Name $osDiskName -VhdUri $osVhdUri -CreateOption fromImage
  Set-AzureRmVMPlan -VM $vmConfig -Publisher $publisher -Product $offer -Name $sku
  New-AzureRMVM -VM $vmConfig -ResourceGroupName $rgName -Location $locName
<!--NeedCopy--> ```
要查看分配给 NIC 的专用和公用 IP 地址,请键入以下命令:
```
  $nic1.IPConfig
  $nic2.IPConfig
  $nic3.IPConfig
  $nic4.IPConfig
  $nic5.IPConfig
  $nic6.IPConfig
<!--NeedCopy--> ```
创建 Azure 负载平衡 (ALB)。
此步骤包括以下子步骤:
- 创建前端 IP 配置
- 创建运行状况探测
- 创建后端地址池
- 创建负载平衡规则(HTTP 和 SSL)
- 使用前端 IP 配置、后端地址池和 LB 规则创建 ALB
- 
    将 IP 配置与后端池相关联 $frontEndIP1=New-AzureRmLoadBalancerFrontendIpConfig -Name $frontEndConfigName1 -PublicIpAddress $pip3$healthProbe=New-AzureRmLoadBalancerProbeConfig -Name $healthProbeName -Protocol Tcp -Port 9000 –IntervalInSeconds 5 -ProbeCount 2$beAddressPool1=New-AzureRmLoadBalancerBackendAddressPoolConfig -Name $backendPoolName1$lbRule1=New-AzureRmLoadBalancerRuleConfig -Name $lbRuleName1 -FrontendIpConfiguration $frontEndIP1 -BackendAddressPool $beAddressPool1 -Probe $healthProbe -Protocol Tcp -FrontendPort 80 -BackendPort 80 -EnableFloatingIP$lb=New-AzureRmLoadBalancer -ResourceGroupName $rgName -Name $lbName -Location $locName -FrontendIpConfiguration $frontEndIP1 -LoadBalancingRule $lbRule1 -BackendAddressPool $beAddressPool1 -Probe $healthProbe$nic2.IpConfigurations[0].LoadBalancerBackendAddressPools.Add($lb.BackendAddressPools[0])$nic5.IpConfigurations[0].LoadBalancerBackendAddressPools.Add($lb.BackendAddressPools[0])$lb=$lb |Set-AzureRmLoadBalancer$nic2=$nic2 | Set-AzureRmNetworkInterface$nic5=$nic5 | Set-AzureRmNetworkInterface
成功部署了 NetScaler VPX 对后,登录每个 VPX 实例以配置 HA-INC、SNIP 和 VIP 地址。
- 
    键入以下命令以添加 HA 节点。 add ha node 1 PeerNodeNSIP -inc Enabled
- 
    针对 VPX1 (NIC2) 和 VPX2 (NIC5),将客户端 NIC 的专用 IP 地址添加为 SNIP 添加 nsip privateIPofNIC2 255.255.255.0 -type SNIP添加 nsip privateIPofNIC5 255.255.255.0 -type SNIP
- 
    在具有 ALB 的前端 IP 地址(公用 IP)的主节点上添加负载平衡虚拟服务器。 add lb virtual server v1 HTTP FrontEndIPofALB 80
相关资源: