Руководство. Балансировка нагрузки виртуальных машин Windows в Azure для создания высокодоступного приложения с помощью Azure PowerShell

Применимо к: ✔️ Виртуальные машины Windows ✔️ Универсальные масштабируемые наборы

Балансировка нагрузки обеспечивает более высокий уровень доступности за счет распределения входящих запросов между несколькими виртуальными машинами. В этом руководстве вы узнаете о различных компонентах балансировщика нагрузки Azure Load Balancer, распределяющего трафик и обеспечивающего высокую доступность. Вы узнаете, как выполнять следующие задачи:

  • Создание Azure Load Balancer
  • Создание пробы работоспособности балансировщика нагрузки
  • создавать правила трафика подсистемы балансировки нагрузки;
  • Использование расширения пользовательских скриптов для создания базового сайта IIS
  • создавать виртуальные машины и присоединять их к подсистеме балансировки нагрузки;
  • Просмотр балансировщика нагрузки в действии
  • добавлять и удалять виртуальные машины из подсистемы балансировки нагрузки.

Обзор Azure Load Balancer

Azure Load Balancer представляет собой балансировщик нагрузки уровня 4 (TCP, UDP), который обеспечивает высокий уровень доступности, распределяя входящий трафик между работоспособными виртуальными машинами. Проба работоспособности позволяет отслеживать данный порт на каждой виртуальной машине и передавать трафик только в рабочую виртуальную машину.

Вы определяете интерфейсную конфигурацию IP-адресов, содержащую один или несколько общедоступных IP-адресов. Такая интерфейсная конфигурация IP-адресов предоставляет доступ к балансировщику нагрузки и приложениям через Интернет.

Виртуальные машины подключаются к балансировщику нагрузки с помощью виртуальной сетевой карты. Для распределения трафика между виртуальными машинами внутренний пул адресов содержит IP-адреса виртуальных сетевых карт, подключенных к балансировщику нагрузки.

Чтобы управлять потоком трафика, нужно определить правила балансировщика нагрузки для определенных портов и протоколов, сопоставленных с виртуальными машинами.

Запуск Azure Cloud Shell

Azure Cloud Shell — это бесплатная интерактивная оболочка, с помощью которой можно выполнять действия, описанные в этой статье. Она включает предварительно установленные общие инструменты Azure и настроена для использования с вашей учетной записью.

Чтобы открыть Cloud Shell, просто выберите Попробовать в правом верхнем углу блока кода. Cloud Shell можно также запустить в отдельной вкладке браузера, перейдя на страницу https://shell.azure.com/powershell. Нажмите кнопку Копировать, чтобы скопировать блоки кода. Вставьте код в Cloud Shell и нажмите клавишу "ВВОД", чтобы выполнить его.

Создание Azure Load Balancer

Этот раздел подробно описывает, как создать и настроить каждый из компонентов балансировщика нагрузки. Прежде чем создать подсистему балансировки нагрузки, выполните командлет New-AzResourceGroup для создания группы ресурсов. В следующем примере создается группа ресурсов с именем myResourceGroupLoadBalancer в расположении EastUS.

New-AzResourceGroup `
  -ResourceGroupName "myResourceGroupLoadBalancer" `
  -Location "EastUS"

Создание общедоступного IP-адреса

Для доступа к приложению через Интернет требуется общедоступный IP-адрес для балансировщика нагрузки. Создайте общедоступный IP-адрес с помощью командлета New-AzPublicIpAddress. В следующем примере создается общедоступный IP-адрес myPublicIP в группе ресурсов myResourceGroupLoadBalancer.

$publicIP = New-AzPublicIpAddress `
  -ResourceGroupName "myResourceGroupLoadBalancer" `
  -Location "EastUS" `
  -AllocationMethod "Static" `
  -Name "myPublicIP"

Создание балансировщика нагрузки

Создайте внешний пул IP-адресов с помощью командлета New-AzLoadBalancerFrontendIpConfig. В следующем примере создается пул внешних IP-адресов myFrontEndPool и включается адрес myPublicIP:

$frontendIP = New-AzLoadBalancerFrontendIpConfig `
  -Name "myFrontEndPool" `
  -PublicIpAddress $publicIP

Создайте серверный пул адресов с помощью командлета New-AzLoadBalancerBackendAddressPoolConfig. Виртуальные машины присоединяются в этот внутренний пул на следующих шагах. В следующем примере создается внутренний пул адресов myBackEndPool.

$backendPool = New-AzLoadBalancerBackendAddressPoolConfig `
  -Name "myBackEndPool"

Теперь создайте подсистему балансировки нагрузки с помощью командлета New-AzLoadBalancer. В следующем примере создается подсистема балансировки нагрузки myLoadBalancer, использующая пулы серверных и интерфейсных IP-адресов, созданных на предыдущих шагах:

$lb = New-AzLoadBalancer `
  -ResourceGroupName "myResourceGroupLoadBalancer" `
  -Name "myLoadBalancer" `
  -Location "EastUS" `
  -FrontendIpConfiguration $frontendIP `
  -BackendAddressPool $backendPool

Создание пробы работоспособности

Чтобы балансировщик нагрузки мог следить за состоянием приложения, необходимо настроить пробу работоспособности. Проба работоспособности динамически добавляет или удаляет виртуальные машины из балансировщика нагрузки на основе их ответа на проверки работоспособности. По умолчанию виртуальная машина удаляется из числа машин, на которые балансировщик распределяет нагрузку, после двух последовательных сбоев с интервалом в 15 секунд. Пробу работоспособности можно создать на основе протокола или конкретной страницы проверки работоспособности приложения.

В следующем примере создается проба TCP. Вы также можете создать настраиваемую пробу HTTP для более детальных проверок. При использовании настраиваемой пробы HTTP нужно создать страницу проверки работоспособности, например healthcheck.aspx. Чтобы обеспечить работоспособность узла, проба должна возвращать ответ HTTP 200 OK для балансировщика нагрузки.

Чтобы создать пробу работоспособности TCP, выполните командлет Add-AzLoadBalancerProbeConfig. В следующем примере создается проба работоспособности myHealthProbe, которая отслеживает каждую виртуальную машину через TCP-порт 80:

Add-AzLoadBalancerProbeConfig `
  -Name "myHealthProbe" `
  -LoadBalancer $lb `
  -Protocol tcp `
  -Port 80 `
  -IntervalInSeconds 15 `
  -ProbeCount 2

Чтобы применить пробу работоспособности, обновите подсистему балансировки нагрузки с помощью командлета Set-AzLoadBalancer:

Set-AzLoadBalancer -LoadBalancer $lb

Создание правила балансировщика нагрузки

Правило балансировщика нагрузки позволяет определить распределение трафика между виртуальными машинами. Вы определяете интерфейсную конфигурацию IP-адресов для входящего трафика и внутренний пул IP-адресов для приема трафика, а также требуемый порт источника и назначения. Чтобы обеспечить получение трафика только работоспособными виртуальными машинами, можно также определить используемую пробу работоспособности.

Создайте правило подсистемы балансировки нагрузки с помощью командлета Add-AzLoadBalancerRuleConfig. В следующем примере создается правило подсистемы балансировки нагрузки myLoadBalancerRule для балансировки трафика через TCP-порт 80:

$probe = Get-AzLoadBalancerProbeConfig -LoadBalancer $lb -Name "myHealthProbe"

Add-AzLoadBalancerRuleConfig `
  -Name "myLoadBalancerRule" `
  -LoadBalancer $lb `
  -FrontendIpConfiguration $lb.FrontendIpConfigurations[0] `
  -BackendAddressPool $lb.BackendAddressPools[0] `
  -Protocol Tcp `
  -FrontendPort 80 `
  -BackendPort 80 `
  -Probe $probe

Обновите подсистему балансировки нагрузки с помощью командлета Set-AzLoadBalancer:

Set-AzLoadBalancer -LoadBalancer $lb

Настройка виртуальной сети

Прежде чем развертывать виртуальные машины и тестировать балансировщик нагрузки, создайте вспомогательные ресурсы виртуальной сети. Дополнительные сведения о виртуальных сетях см. в руководстве Управление виртуальными сетями Azure.

Создание сетевых ресурсов

Создайте виртуальную сеть с помощью командлета New-AzVirtualNetwork. В следующем примере создаются виртуальная сеть myVnet и подсеть mySubnet.

# Create subnet config
$subnetConfig = New-AzVirtualNetworkSubnetConfig `
  -Name "mySubnet" `
  -AddressPrefix 192.168.1.0/24

# Create the virtual network
$vnet = New-AzVirtualNetwork `
  -ResourceGroupName "myResourceGroupLoadBalancer" `
  -Location "EastUS" `
  -Name "myVnet" `
  -AddressPrefix 192.168.0.0/16 `
  -Subnet $subnetConfig

Для создания виртуальных сетевых адаптеров используется командлет New-AzNetworkInterface. В следующем примере создаются три виртуальных сетевых адаптера (по одной виртуальной сетевой карте для каждой виртуальной машины, используемой приложением). Вы можете в любое время создать дополнительные виртуальные сетевые карты и виртуальные машины и добавить их в балансировщик нагрузки:

for ($i=1; $i -le 3; $i++)
{
   New-AzNetworkInterface `
     -ResourceGroupName "myResourceGroupLoadBalancer" `
     -Name myVM$i `
     -Location "EastUS" `
     -Subnet $vnet.Subnets[0] `
     -LoadBalancerBackendAddressPool $lb.BackendAddressPools[0]
}

Создание виртуальных машин

Чтобы улучшить высокую доступность приложения, поместите виртуальные машины в группу доступности.

Создайте группу доступности с помощью командлета New-AzAvailabilitySet. В следующем примере создается группа доступности myAvailabilitySet.

$availabilitySet = New-AzAvailabilitySet `
  -ResourceGroupName "myResourceGroupLoadBalancer" `
  -Name "myAvailabilitySet" `
  -Location "EastUS" `
  -Sku aligned `
  -PlatformFaultDomainCount 2 `
  -PlatformUpdateDomainCount 2

Укажите имя и пароль администратора для виртуальной машины с помощью командлета Get-Credential:

$cred = Get-Credential

Теперь вы можете создать виртуальные машины с помощью командлета New-AzVM. В следующем примере создаются три виртуальные машины и требуемые компоненты виртуальной сети, если они не существуют:

for ($i=1; $i -le 3; $i++)
{
    New-AzVm `
        -ResourceGroupName "myResourceGroupLoadBalancer" `
        -Name "myVM$i" `
        -Location "East US" `
        -VirtualNetworkName "myVnet" `
        -SubnetName "mySubnet" `
        -SecurityGroupName "myNetworkSecurityGroup" `
        -OpenPorts 80 `
        -AvailabilitySetName "myAvailabilitySet" `
        -Credential $cred `
        -AsJob
}

Параметр -AsJob создает виртуальную машину как фоновую задачу, поэтому PowerShell отображает запрос о возврате. Подробные сведения о фоновых заданиях можно просмотреть с помощью командлета Job. Создание и настройка трех виртуальных машин занимает несколько минут.

Установка IIS с помощью расширения пользовательских сценариев

В предыдущем руководстве Настройка виртуальной машины Windows вы узнали, как автоматизировать настройку виртуальной машины с помощью расширения настраиваемых сценариев для Windows. Аналогичный подход можно использовать для установки и настройки служб IIS на виртуальных машинах.

Воспользуйтесь командлетом Set-AzVMExtension, чтобы установить расширение пользовательских скриптов. Это расширение запускает powershell Add-WindowsFeature Web-Server для установки веб-сервера IIS, а затем обновляет страницу Default.htm для отображения имени узла виртуальной машины.

for ($i=1; $i -le 3; $i++)
{
   Set-AzVMExtension `
     -ResourceGroupName "myResourceGroupLoadBalancer" `
     -ExtensionName "IIS" `
     -VMName myVM$i `
     -Publisher Microsoft.Compute `
     -ExtensionType CustomScriptExtension `
     -TypeHandlerVersion 1.8 `
     -SettingString '{"commandToExecute":"powershell Add-WindowsFeature Web-Server; powershell Add-Content -Path \"C:\\inetpub\\wwwroot\\Default.htm\" -Value $($env:computername)"}' `
     -Location EastUS
}

Проверка балансировщика нагрузки

Получите общедоступный IP-адрес подсистемы балансировки нагрузки с помощью командлета Get-AzPublicIPAddress. Следующий пример позволяет получить IP-адрес для созданного ранее myPublicIP.

Get-AzPublicIPAddress `
  -ResourceGroupName "myResourceGroupLoadBalancer" `
  -Name "myPublicIP" | select IpAddress

После этого можно ввести общедоступный IP-адрес в веб-браузер. Отображается веб-сайт, а также имя узла виртуальной машины, на которую балансировщик нагрузки направил трафик, как показано в следующем примере:

Выполнение веб-сайта IIS

Чтобы увидеть, как балансировщик нагрузки распределяет трафик между тремя виртуальными машинами, на которых выполняется приложение, принудительно обновите веб-браузер.

Добавление и удаление виртуальных машин

На виртуальных машинах, выполняющих приложение, может потребоваться выполнить обслуживание, например установить обновления операционной системы. Для обработки большего объема трафика в приложении необходимо добавить дополнительные виртуальные машины. В этом разделе показано, как удалить или добавить виртуальную машину из балансировщика нагрузки.

Удаление виртуальной машины из балансировщика нагрузки

Получите сетевой адаптер с помощью командлета Get-AzNetworkInterface, а затем задайте для свойства LoadBalancerBackendAddressPools виртуального сетевого адаптера значение $null. Наконец, обновите виртуальную сетевую карту.

$nic = Get-AzNetworkInterface `
    -ResourceGroupName "myResourceGroupLoadBalancer" `
    -Name "myVM2"
$nic.Ipconfigurations[0].LoadBalancerBackendAddressPools=$null
Set-AzNetworkInterface -NetworkInterface $nic

Чтобы увидеть, как балансировщик нагрузки распределяет трафик между оставшимися двумя виртуальными машинами, на которых выполняется приложение, принудительно обновите веб-браузер. Теперь можно выполнить обслуживание на виртуальной машине, например установить обновления операционной системы или перезагрузить виртуальную машину.

Добавление виртуальной машины в балансировщик нагрузки

После выполнения обслуживания виртуальной машины (или если необходимо увеличить емкость) задайте для свойства LoadBalancerBackendAddressPools виртуального сетевого адаптера значение BackendAddressPool из Get-AzLoadBalancer.

Получите подсистему балансировки нагрузки:

$lb = Get-AzLoadBalancer `
    -ResourceGroupName myResourceGroupLoadBalancer `
    -Name myLoadBalancer 
$nic.IpConfigurations[0].LoadBalancerBackendAddressPools=$lb.BackendAddressPools[0]
Set-AzNetworkInterface -NetworkInterface $nic

Дальнейшие действия

В рамках этого руководства вы создали балансировщик нагрузки и присоединили к нему виртуальные машины. Вы ознакомились с выполнением следующих задач:

  • Создание Azure Load Balancer
  • Создание пробы работоспособности балансировщика нагрузки
  • создавать правила трафика подсистемы балансировки нагрузки;
  • Использование расширения пользовательских скриптов для создания базового сайта IIS
  • создавать виртуальные машины и присоединять их к подсистеме балансировки нагрузки;
  • Просмотр балансировщика нагрузки в действии
  • добавлять и удалять виртуальные машины из подсистемы балансировки нагрузки.

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