Поделиться через


Кластеризация гостевых систем в виртуальной сети

Область применения: 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, чтобы определить, какой узел является активным.

  1. Выберите ВИРТУАЛЬНЫЙ IP-адрес.

    Подготовьте, назначив IP-адрес ВИРТУАЛЬНОго IP-адреса, который может быть любым неиспользуемым или зарезервированным адресом в той же подсети, что и узлы кластера. Виртуальный IP-адрес должен соответствовать плавающему адресу кластера.

    $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. Добавьте пробу, чтобы определить, в какой узел кластера активен плавающий адрес.

    Примечание.

    Запрос пробы к постоянному адресу виртуальной машины на порту, указанном ниже. Порт должен отвечать только на активном узле.

    $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.

    При необходимости можно изменить протокол и порт. Этот шаг можно повторить несколько раз для других портов и протоколов на этом ВИРТУАЛЬНОМ 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
    
  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. (Необязательно) Если вы используете отказоустойчивый кластер Майкрософт, перейдите к следующему примеру.

Пример 2. Настройка отказоустойчивого кластера Майкрософт

Чтобы настроить отказоустойчивый кластер, выполните следующие действия.

  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]
    

Кластер активен. Трафик, проходящий на ВИРТУАЛЬНЫЙ IP-адрес указанного порта, направляется на активный узел.