Балансировка нагрузки виртуальных машин по всем зонам доступности с помощью Azure CLILoad balance VMs across all availability zones using Azure CLI

В этой статье приведены пошаговые инструкции по созданию общедоступного Load Balancer категории "Стандартный" с избыточным между зонами внешним интерфейсом, чтобы достичь избыточности между зонами без зависимости от нескольких записей DNS.This article steps through creating a public Standard Load Balancer with a zone-redundant frontend to achieve zone-redundancy without dependency on multiple DNS records. Один интерфейсный IP-адрес по умолчанию является избыточным между зонами.A single front-end IP address is automatically zone-redundant. Используйте избыточный в пределах зоны внешний интерфейс для распределения нагрузки, с помощью одного IP-адреса можно связаться с любой виртуальной машиной в рамках региона во всех зонах доступности.Using a zone redundant frontend for your load balancer, with a single IP address you can now reach any VM in a virtual network within a region that is across all Availability Zones. Зоны доступности позволяют защитить приложения и данные от маловероятных сбоев и потери всего центра обработки данных.Use availability zones to protect your apps and data from an unlikely failure or loss of an entire datacenter.

Дополнительные сведения о том, как работают зоны доступности с Load Balancer уровня "Стандартный", см. в статье Azure Load Balancer уровня "Стандартный" и зоны доступности.For more information about using Availability zones with Standard Load Balancer, see Standard Load Balancer and Availability Zones.

Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.If you don't have an Azure subscription, create a free account before you begin.

Использование Azure Cloud ShellUse Azure Cloud Shell

В Azure есть Azure Cloud Shell, интерактивная оболочка среды, с которой можно работать в браузере.Azure hosts Azure Cloud Shell, an interactive shell environment that you can use through your browser. Для работы со службами Azure в Cloud Shell можно использовать bash и PowerShell.Cloud Shell lets you use either bash or PowerShell to work with Azure services. Для запуска кода из этой статьи можно использовать предварительно установленные команды Cloud Shell. Ничего дополнительного в локальной среде устанавливать не нужно.You can use the Cloud Shell pre-installed commands to run the code in this article without having to install anything on your local environment.

Чтобы запустить Azure Cloud Shell, сделайте вот что:To launch Azure Cloud Shell:

ПараметрOption Пример и ссылкаExample/Link
Нажмите кнопку Попробовать в правом верхнем углу блока с кодом.Select Try It in the upper-right corner of a code block. При нажатии кнопки Попробовать код не копируется в Cloud Shell автоматически.Selecting Try It doesn't automatically copy the code to Cloud Shell. Открытие Azure Cloud Shell с помощью кнопки "Попробовать"
Перейдите по адресу https://shell.azure.com или нажмите кнопку Запуск Cloud Shell, чтобы открыть Cloud Shell в браузере.Go to https://shell.azure.com or select the Launch Cloud Shell button to open Cloud Shell in your browser. Запуск Cloud Shell в новом окнеLaunch Cloud Shell in a new window
На портале Azure в правом верхнем углу в строке меню нажмите кнопку Cloud Shell.Select the Cloud Shell button on the top-right menu bar in the Azure portal. Кнопка "Cloud Shell" на портале Azure

Чтобы выполнить код из этой статьи в Azure Cloud Shell, сделайте вот что:To run the code in this article in Azure Cloud Shell:

  1. Откройте Cloud Shell.Open Cloud Shell.
  2. В блоке кода нажмите кнопку Копировать, чтобы скопировать код.Select the Copy button on a code block to copy the code.
  3. Вставьте код в окно сеанса Cloud Shell, нажав клавиши Ctrl+Shift+V в Windows и Linux или Cmd+Shift+V в macOS.Paste the code into the Cloud Shell session with Ctrl+Shift+V on Windows and Linux, or Cmd+Shift+V on macOS.
  4. Нажмите клавишу ВВОД, чтобы выполнить код.Press Enter to run the code.

Если вы решили установить и использовать интерфейс командной строки локально, то для работы с этим руководством вам понадобится Azure CLI 2.0.17 или более поздней версии.If you choose to install and use the CLI locally, this tutorial requires that you are running Azure CLI version 2.0.17 or higher. Чтобы узнать версию, выполните команду az --version.To find the version, run az --version. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.If you need to install or upgrade, see Install Azure CLI.

Примечание

Поддержка зон доступности реализована для некоторых ресурсов, регионов и семейств размеров виртуальных машин Azure.Support for Availability Zones is available for select Azure resources and regions, and VM size families. Дополнительные сведения о начале работы и о том, какие ресурсы, регионы и семейства размеров виртуальных машин Azure поддерживаются для зон доступности, см. в разделе Обзор зон доступности.For more information on how to get started, and which Azure resources, regions, and VM size families you can try availability zones with, see Overview of Availability Zones. Чтобы получить поддержку, обратитесь на форум StackOverflow или создайте запрос в службу поддержки Azure.For support, you can reach out on StackOverflow or open an Azure support ticket.

Создание группы ресурсовCreate a resource group

Создайте группу ресурсов с помощью команды az group create.Create a resource group with az group create. Группа ресурсов Azure является логическим контейнером, в котором происходит развертывание ресурсов Azure и управление ими.An Azure resource group is a logical container into which Azure resources are deployed and managed.

В следующем примере создается группа ресурсов с именем myResourceGroupSLB в расположении westeurope.The following example creates a resource group named myResourceGroupSLB in the westeurope location:

az group create \
--name myResourceGroupSLB \
--location westeurope

Создание избыточного в пределах зоны общедоступного стандартного IP-адресаCreate a zone redundant public IP Standard

Для доступа к приложению через Интернет требуется общедоступный IP-адрес для балансировщика нагрузки.To access your app on the Internet, you need a public IP address for the load balancer. Внешний интерфейс с избыточностью между зонами обслуживается всеми зонами доступности в регионе одновременно.A zone-redundant front-end is served by all availability zones in a region simultaneously. Создайте избыточный общедоступный IP-адрес в зоне с помощью команды AZ Network public-IP Create.Create a zone redundant public IP address with az network public-ip create. При создании общедоступного стандартного IP-адреса он по умолчанию является избыточным в пределах зоны.When you create a Standard Public IP address, it is zone redundant by default.

В следующем примере создается избыточный в пределах зоны общедоступный IP-адрес myPublicIP в группе ресурсов myResourceGroupLoadBalancer.The following example creates a zone redundant public IP address named myPublicIP in the myResourceGroupLoadBalancer resource group.

az network public-ip create \
--resource-group myResourceGroupSLB \
--name myPublicIP \
--sku Standard

Создание общедоступной подсистемы Azure Load Balancer (цен. категория "Стандартный")Create Azure Standard Load Balancer

В этом разделе описано, как создать и настроить следующие компоненты подсистемы балансировки нагрузки:This section details how you can create and configure the following components of the load balancer:

  • интерфейсный пул IP-адресов, который получает входящий трафик в подсистеме балансировки нагрузки;a frontend IP pool that receives the incoming network traffic on the load balancer.
  • внутренний пул IP-адресов, на который внешний пул отправляет трафик с балансировкой нагрузки;a backend IP pool where the frontend pool sends the load balanced network traffic.
  • зонд работоспособности, определяющий работоспособность серверных экземпляров виртуальной машины;a health probe that determines health of the backend VM instances.
  • правило подсистемы балансировки нагрузки, определяющее порядок распределения трафика между виртуальными машинами.a load balancer rule that defines how traffic is distributed to the VMs.

Создание подсистемы балансировки нагрузкиCreate the load balancer

Создайте подсистему балансировки нагрузки уровня "Стандартный" с помощью команды az network lb create.Create a Standard load balancer with az network lb create. В следующем примере создается подсистема балансировки нагрузки myLoadBalancer, а адрес myPublicIP назначается внешней IP-конфигурации.The following example creates a load balancer named myLoadBalancer and assigns the myPublicIP address to the front-end IP configuration.

az network lb create \
--resource-group myResourceGroupSLB \
--name myLoadBalancer \
--public-ip-address myPublicIP \
--frontend-ip-name myFrontEnd \
--backend-pool-name myBackEndPool \
--sku Standard

Создание проверки работоспособности на порте 80Create health probe on port 80

Проба работоспособности проверяет все экземпляры виртуальной машины, чтобы убедиться, что они могут отправлять сетевой трафик.A health probe checks all virtual machine instances to make sure they can send network traffic. Экземпляр виртуальной машины с неудачной пробой удаляется из балансировщика нагрузки, пока не перейдет в оперативный режим и проба не определит его работоспособность.The virtual machine instance with failed probe checks is removed from the load balancer until it goes back online and a probe check determines that it's healthy. Создайте проверку работоспособности с помощью команды az network lb probe create, чтобы отслеживать работоспособность виртуальных машин.Create a health probe with az network lb probe create to monitor the health of the virtual machines. Чтобы создать пробу работоспособности TCP, используйте команду az network lb probe create.To create a TCP health probe, you use az network lb probe create. В следующем примере создается проба TCP myHealthProbe.The following example creates a health probe named myHealthProbe:

az network lb probe create \
--resource-group myResourceGroupSLB \
--lb-name myLoadBalancer \
--name myHealthProbe \
--protocol tcp \
--port 80

Создание правила подсистемы балансировки нагрузки для порта 80Create load balancer rule for port 80

Правило подсистемы балансировки нагрузки определяет интерфейсную конфигурацию IP-адресов для входящего трафика и внутренний пул IP-адресов для приема трафика, а также порты источника и назначения.A load balancer rule defines the front-end IP configuration for the incoming traffic and the back-end IP pool to receive the traffic, along with the required source and destination port. С помощью команды az network lb rule create создайте правило подсистемы балансировки нагрузки с именем myLoadBalancerRuleWeb для прослушивания порта 80, используемого внешним пулом myFrontEndPool, и отправки трафика с балансировкой нагрузки внутреннему пулу адресов myBackEndPool, который также использует порт 80.Create a load balancer rule myLoadBalancerRuleWeb with az network lb rule create for listening to port 80 in the frontend pool myFrontEndPool and sending load-balanced network traffic to the backend address pool myBackEndPool also using port 80.

az network lb rule create \
--resource-group myResourceGroupSLB \
--lb-name myLoadBalancer \
--name myLoadBalancerRuleWeb \
--protocol tcp \
--frontend-port 80 \
--backend-port 80 \
--frontend-ip-name myFrontEnd \
--backend-pool-name myBackEndPool \
--probe-name myHealthProbe

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

Прежде чем развертывать виртуальные машины и тестировать подсистему балансировки нагрузки, создайте вспомогательные ресурсы виртуальной сети.Before you deploy some VMs and can test your load balancer, create the supporting virtual network resources.

Создание виртуальной сетиCreate a virtual network

С помощью команды az network vnet create в группе ресурсов myResourceGroup создайте виртуальную сеть с именем myVnet, содержащую подсеть mySubnet.Create a virtual network named myVnet with a subnet named mySubnet in the myResourceGroup using az network vnet create.

az network vnet create \
--resource-group myResourceGroupSLB \
--location westeurope \
--name myVnet \
--subnet-name mySubnet

Создание группы безопасности сетиCreate a network security group

Создайте группу безопасности сети с именем myNetworkSecurityGroup для определения входящих подключений к виртуальной сети с помощью команды az network nsg create.Create network security group named myNetworkSecurityGroup to define inbound connections to your virtual network with az network nsg create.

az network nsg create \
--resource-group myResourceGroupSLB \
--name myNetworkSecurityGroup

Создайте правило группы безопасности сети с именем myNetworkSecurityGroupRule для порта 80 с помощью команды az network nsg rule create.Create a network security group rule named myNetworkSecurityGroupRule for port 80 with az network nsg rule create.

az network nsg rule create \
--resource-group myResourceGroupSLB \
--nsg-name myNetworkSecurityGroup \
--name myNetworkSecurityGroupRule \
--protocol tcp \
--direction inbound \
--source-address-prefix '*' \
--source-port-range '*' \
--destination-address-prefix '*' \
--destination-port-range 80 \
--access allow \
--priority 200

Создание сетевых адаптеровCreate NICs

Создайте три виртуальных сетевых адаптера с помощью команды az network nic create и привяжите их к общедоступному IP-адресу и группе безопасности сети.Create three virtual NICs with az network nic create and associate them with the Public IP address and the network security group. В следующем примере создаются шесть виртуальных сетевых адаптеров.The following example creates six virtual NICs. (по одной виртуальной сетевой карте для каждой виртуальной машины, используемой приложением).(One virtual NIC for each VM you create for your app in the following steps). Вы можете в любое время создать дополнительные виртуальные сетевые карты и виртуальные машины и добавить их в балансировщик нагрузки:You can create additional virtual NICs and VMs at any time and add them to the load balancer:

for i in `seq 1 3`; do
    az network nic create \
        --resource-group myResourceGroupSLB \
        --name myNic$i \
        --vnet-name myVnet \
        --subnet mySubnet \
        --network-security-group myNetworkSecurityGroup \
        --lb-name myLoadBalancer \
        --lb-address-pools myBackEndPool
done

Создание внутренних серверовCreate backend servers

В этом примере описано, как создать три виртуальные машины, расположенные в зонах 1, 2 и 3, которые будут использоваться в качестве внутренних серверов для подсистемы балансировки нагрузки.In this example, you create three virtual machines located in zone 1, zone 2, and zone 3 to be used as backend servers for the load balancer. Чтобы проверить, успешно ли создана подсистема балансировки нагрузки, установите NGINX на виртуальных машинах.You also install NGINX on the virtual machines to verify that the load balancer was successfully created.

Создание конфигурации cloud-initCreate cloud-init config

Тот же самый файл конфигурации cloud-init можно использовать и для установки NGINX, а также для запуска простого приложения Node.js "Hello World" на виртуальной машине Linux.You can use a cloud-init configuration file to install NGINX and run a 'Hello World' Node.js app on a Linux virtual machine. В текущей оболочке создайте файл cloud-init.txt и вставьте в него следующую конфигурацию.In your current shell, create a file named cloud-init.txt and copy and paste the following configuration into the shell. Убедитесь, что весь файл cloud-init скопирован правильно, особенно первая строка.Make sure that you copy the whole cloud-init file correctly, especially the first line:

#cloud-config
package_upgrade: true
packages:
  - nginx
  - nodejs
  - npm
write_files:
  - owner: www-data:www-data
  - path: /etc/nginx/sites-available/default
    content: |
      server {
        listen 80;
        location / {
          proxy_pass http://localhost:3000;
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection keep-alive;
          proxy_set_header Host $host;
          proxy_cache_bypass $http_upgrade;
        }
      }
  - owner: azureuser:azureuser
  - path: /home/azureuser/myapp/index.js
    content: |
      var express = require('express')
      var app = express()
      var os = require('os');
      app.get('/', function (req, res) {
        res.send('Hello World from host ' + os.hostname() + '!')
      })
      app.listen(3000, function () {
        console.log('Hello world app listening on port 3000!')
      })
runcmd:
  - service nginx restart
  - cd "/home/azureuser/myapp"
  - npm init
  - npm install express -y
  - nodejs index.js

Создание зональных виртуальных машинCreate the zonal virtual machines

Создайте виртуальные машины с помощью команды az vm create в зонах 1, 2 и 3.Create the VMs with az vm create in zone 1, zone 2, and zone 3. В следующем примере создается виртуальная машина в каждой зоне и ключи SSH, если они не существуют.The following example creates a VM in each zone and generates SSH keys if they do not already exist:

Создайте виртуальную машину в каждой зоне (в зонах 1, 2 и 3) в расположении westeurope.Create a VM in each zone (zone 1, zone2, and zone 3) of the westeurope location.

for i in `seq 1 3`; do
  az vm create \
    --resource-group myResourceGroupSLB \
    --name myVM$i \
    --nics myNic$i \
    --image UbuntuLTS \
    --generate-ssh-keys \
    --zone $i \
    --custom-data cloud-init.txt
done

Тестирование подсистемы балансировки нагрузкиTest the load balancer

Получите общедоступный IP-адрес подсистемы балансировки нагрузки, используя команду az network public-ip show.Get the public IP address of the load balancer using az network public-ip show.

  az network public-ip show \
    --resource-group myResourceGroupSLB \
    --name myPublicIP \
    --query [ipAddress] \
    --output tsv

После этого можно ввести общедоступный IP-адрес в веб-браузер.You can then enter the public IP address in to a web browser. Прежде чем подсистема балансировки нагрузки начнет распределять трафик между виртуальными машинами, виртуальные машины должны быть подготовлены. Эта подготовка может занять несколько минут.Remember - it takes a few minutes for the VMs to be ready before the load balancer starts to distribute traffic to them. Отображается приложение, а также имя узла виртуальной машины, на которую балансировщик нагрузки направил трафик, как показано в следующем примере:The app is displayed, including the hostname of the VM that the load balancer distributed traffic to as in the following example:

Запуск приложения Node.js

Чтобы увидеть, как подсистема балансировки нагрузки распределяет трафик между виртуальными машинами во всех трех зонах, на которых выполняется приложение, остановите работу виртуальной машины в определенной зоны и обновите браузер.To see the load balancer distribute traffic across VMs in all three availability zones running your app, you can stop a VM in a particular zone and refresh your browser.

Следующие шагиNext steps