Кластеризация гостевых систем в виртуальной сети
Область применения: Windows Server 2022, Windows Server 2019, Windows Server 2016, Azure Stack HCI, версии 21H2 и 20H2
Виртуальные машины, подключенные к виртуальной сети, могут использовать только IP-адреса, назначенные сетевому контроллеру для обмена данными в сети. Технологии кластеризации, требующие плавающего IP-адреса, например отказоустойчивой кластеризации Майкрософт, требуют некоторых дополнительных действий для правильной работы.
Способ обеспечения доступного IP-адреса с плавающей запятой — использовать виртуальный IP-адрес (SLB) программного балансировщика нагрузки (VIP). Подсистема балансировки нагрузки программного обеспечения должна быть настроена с пробой работоспособности на порту на этом IP-адресе, чтобы подсистема балансировки нагрузки перенаправила трафик на компьютер, имеющий этот IP-адрес.
Пример. Конфигурация подсистемы балансировки нагрузки
В этом примере предполагается, что вы уже создали виртуальные машины, которые станут узлами кластера, и подключили их к виртуальная сеть. Дополнительные сведения см. в статье "Создание виртуальной машины и Подключение к виртуальная сеть клиента или виртуальной локальной сети".
В этом примере вы создадите виртуальный IP-адрес (192.168.2.100) для представления плавающего IP-адреса кластера и настройте пробу работоспособности для мониторинга TCP-порта 59999, чтобы определить, какой узел является активным.
Выберите ВИРТУАЛЬНЫЙ IP-адрес.
Подготовьте, назначив IP-адрес ВИРТУАЛЬНОго IP-адреса, который может быть любым неиспользуемым или зарезервированным адресом в той же подсети, что и узлы кластера. Виртуальный IP-адрес должен соответствовать плавающему адресу кластера.
$VIP = "192.168.2.100" $subnet = "Subnet2" $VirtualNetwork = "MyNetwork" $ResourceId = "MyNetwork_InternalVIP"
Создайте объект свойств подсистемы балансировки нагрузки.
$LoadBalancerProperties = new-object Microsoft.Windows.NetworkController.LoadBalancerProperties
Создайте внешний 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"
Создайте внутренний пул, чтобы содержать узлы кластера.
$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
Добавьте пробу, чтобы определить, в какой узел кластера активен плавающий адрес.
Примечание.
Запрос пробы к постоянному адресу виртуальной машины на порту, указанном ниже. Порт должен отвечать только на активном узле.
$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
Добавьте правила балансировки нагрузки для TCP-порта 1433.
При необходимости можно изменить протокол и порт. Этот шаг можно повторить несколько раз для других портов и протоколов на этом ВИРТУАЛЬНОМ IP-адресе. Важно, чтобы EnableFloatingIP было установлено $true, так как это сообщает подсистеме балансировки нагрузки отправить пакет на узел с исходным ВИРТУАЛЬНЫМ IP-адресом.
$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
Создайте подсистему балансировки нагрузки в сетевом контроллере.
$lb = New-NetworkControllerLoadBalancer -ConnectionUri $URI -ResourceId $ResourceId -Properties $LoadBalancerProperties -Force
Добавьте узлы кластера в внутренний пул.
Вы можете добавить в пул столько узлов, сколько требуется для кластера.
# 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
После создания подсистемы балансировки нагрузки и добавления сетевых интерфейсов в внутренний пул можно настроить кластер.
(Необязательно) Если вы используете отказоустойчивый кластер Майкрософт, перейдите к следующему примеру.
Пример 2. Настройка отказоустойчивого кластера Майкрософт
Чтобы настроить отказоустойчивый кластер, выполните следующие действия.
Установите и настройте свойства для отказоустойчивого кластера.
add-windowsfeature failover-clustering -IncludeManagementTools Import-module failoverclusters $ClusterName = "MyCluster" $ClusterNetworkName = "Cluster Network 1" $IPResourceName = $ILBIP = "192.168.2.100" $nodes = @("DB1", "DB2")
Создайте кластер на одном узле.
New-Cluster -Name $ClusterName -NoStorage -Node $nodes[0]
Остановите ресурс кластера.
Stop-ClusterResource "Cluster Name"
Задайте IP-адрес кластера и порт пробы.
IP-адрес должен совпадать с интерфейсным IP-адресом, используемым в предыдущем примере, и порт пробы должен соответствовать порту пробы в предыдущем примере.
Get-ClusterResource "Cluster IP Address" | Set-ClusterParameter -Multiple @{"Address"="$ILBIP";"ProbePort"="59999";"SubnetMask"="255.255.255.255";"Network"="$ClusterNetworkName";"EnableDhcp"=0}
Запустите ресурсы кластера.
Start-ClusterResource "Cluster IP Address" -Wait 60 Start-ClusterResource "Cluster Name" -Wait 60
Добавьте оставшиеся узлы.
Add-ClusterNode $nodes[1]
Кластер активен. Трафик, проходящий на ВИРТУАЛЬНЫЙ IP-адрес указанного порта, направляется на активный узел.