快速入门:使用 Azure CLI 2.0 创建公共负载均衡器以对 VM 进行负载均衡

本快速入门演示如何创建 Azure 负载均衡器。 为了测试负载均衡器,需要部署两个运行 Ubuntu 服务器的虚拟机 (VM),并在二者之间对一个 Web 应用进行负载均衡。

Note

在 Azure 中国区使用 Azure CLI 2.0 之前,请先运行 az cloud set -n AzureChinaCloud 来改变云环境。如果想切回国际版 Azure,请再次运行 az cloud set -n AzureCloud

如果选择在本地安装并使用 CLI,本教程要求运行 Azure CLI 2.0.28 版或更高版本。 若要查找版本,请运行 az --version。 如果需要进行安装或升级,请参阅安装 Azure CLI 2.0

创建资源组

使用 az group create 创建资源组。 Azure 资源组是在其中部署和管理 Azure 资源的逻辑容器。

以下示例在“chinanorth”位置创建名为“myResourceGroupLB”的资源组:

  az group create \
    --name myResourceGroupLB \
    --location chinanorth

创建公共 IP 地址

若要通过 Internet 访问 Web 应用,需要负载均衡器有一个公共 IP 地址。 使用 az network public-ip createmyResourceGroupLB 中创建名为 myPublicIP 的公共 IP 地址。

  az network public-ip create --resource-group myResourceGroupLB --name myPublicIP

创建 Azure 负载均衡器

本部分详细介绍如何创建和配置负载均衡器的以下组件:

  • 前端 IP 池,用于在负载均衡器上接收传入网络流量。
  • 后端 IP 池,前端池将负载均衡的网络流量发送到此处。
  • 运行状况探测,用于确定后端 VM 实例的运行状况。
  • 负载均衡器规则,用于定义如何将流量分配给 VM。

创建负载均衡器

使用 az network lb create 创建名为 myLoadBalancer 的公共 Azure 负载均衡器,该负载均衡器包括名为 myFrontEndPool 的前端池、名为 myBackEndPool 的后端池(与在前一步中创建的公共 IP 地址 myPublicIP 相关联)。

  az network lb create \
    --resource-group myResourceGroupLB \
    --name myLoadBalancer \
    --public-ip-address myPublicIP \
    --frontend-ip-name myFrontEndPool \
    --backend-pool-name myBackEndPool       

创建运行状况探测

运行状况探测器将检查所有虚拟机实例,以确保它们可以发送网络流量。 探测器检查失败的虚拟机实例将从负载均衡器中删除,直到它恢复联机状态并且探测器检查确定它运行正常。 使用 az network lb probe create 创建运行状况探测,以监视虚拟机的运行状况。

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

创建负载均衡器规则

负载均衡器规则定义传入流量的前端 IP 配置和后端 IP 池以接收流量,同时定义所需源和目标端口。 使用 az network lb rule create 创建负载均衡器规则 myLoadBalancerRuleWeb,以便侦听前端池 myFrontEndPool 中的端口 80,并且将经过负载均衡的网络流量发送到也使用端口 80 的后端地址池 myBackEndPool

  az network lb rule create \
    --resource-group myResourceGroupLB \
    --lb-name myLoadBalancer \
    --name myHTTPRule \
    --protocol tcp \
    --frontend-port 80 \
    --backend-port 80 \
    --frontend-ip-name myFrontEndPool \
    --backend-pool-name myBackEndPool \
    --probe-name myHealthProbe  

配置虚拟网络

需要先创建支持的虚拟网络资源,然后才能部署一些 VM 并测试负载均衡器。

创建虚拟网络

使用 az network vnet createmyResourceGroup 中创建名为 myVnet 的虚拟网络,该虚拟网络包含名为 mySubnet 的子网。

  az network vnet create \
    --resource-group myResourceGroupLB \
    --location chinanorth \
    --name myVnet \
    --subnet-name mySubnet

创建网络安全组

创建网络安全组,以定义虚拟网络的入站连接。

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

创建网络安全组规则

创建网络安全组规则,以允许通过端口 80 的入站连接。

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

创建 NIC

使用 az network nic create 创建三个网络接口,并将它们与公共 IP 地址和网络安全组关联。

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

创建后端服务器

本示例将创建三个要用作负载均衡器后端服务器的虚拟机。 若要验证负载均衡器是否已成功创建,还需要在虚拟机上安装 NGINX。

创建可用性集

使用 az vm availabilityset create 创建可用性集

 az vm availability-set create \
   --resource-group myResourceGroupLB \
   --name myAvailabilitySet

创建两个虚拟机

可使用 cloud-init 配置文件在 Linux 虚拟机上安装 NGINX 并运行“Hello World”Node.js 应用。 在当前 shell 中创建名为“cloud-init.txt”的文件,并将以下配置复制粘贴到 shell。 请确保正确复制整个 cloud-init 文件,尤其是第一行:

#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

使用 az vm create 创建虚拟机。

for i in `seq 1 2`; do
 az vm create \
   --resource-group myResourceGroupLB \
   --name myVM$i \
   --availability-set myAvailabilitySet \
   --nics myNic$i \
   --image UbuntuLTS \
   --generate-ssh-keys \
   --custom-data cloud-init.txt
   --no-wait
   done

VM 可能需要几分钟才能部署好。

测试负载均衡器

若要获取负载均衡器的公共 IP 地址,请使用 az network public-ip show。 复制该公共 IP 地址,并将其粘贴到浏览器的地址栏。

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

测试负载均衡器

清理资源

如果不再需要资源组、负载均衡器和所有相关的资源,可以使用 az group delete 命令将其删除。

  az group delete --name myResourceGroupLB

后续步骤

本快速入门介绍了如何创建基本负载均衡器,向其附加 VM,配置负载均衡器流量规则、运行状况探测,然后测试负载均衡器。 若要了解有关 Azure 负载均衡器的详细信息,请继续学习 Azure 负载均衡器教程。