如何在 Azure 中均衡 Linux 虚拟机负载以创建高可用性应用程序

负载均衡通过将传入请求分布到多个虚拟机来提供更高级别的可用性。 本教程介绍了 Azure 负载均衡器的不同组件,这些组件用于分发流量和提供高可用性。 你将学习如何执行以下操作:

创建 Azure 负载均衡器

创建负载均衡器运行状况探测

创建负载均衡器流量规则

使用 cloud-init 创建基本的 Node.js 应用

创建虚拟机并将其附加到负载均衡器

查看负载均衡器的实际运行情况

从负载均衡器中添加和删除 VM

Note

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

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

Azure 负载均衡器概述

Azure 负载均衡器是位于第 4 层(TCP、UDP)的负载均衡器,通过在正常运行的 VM 之间分发传入流量提供高可用性。 负载均衡器运行状况探测器监视每个 VM 上的给定端口,仅将流量分发给正常运行的 VM。

定义包含一个或多个公共 IP 地址的前端 IP 配置。 利用此前端 IP 配置,可通过 Internet 访问负载均衡器和应用程序。

虚拟机使用其虚拟网络接口卡 (NIC) 连接到负载均衡器。 若要向 VM 分发流量,后端地址池需包含连接到负载均衡器的虚拟 NIC 的 IP 地址。

若要控制流量,需为映射到 VM 的特定端口和协议定义负载均衡器规则。

如果遵循了前面的教程来创建虚拟机规模集,则已创建负载均衡器。 所有这些组件都已配置为规模集的一部分。

创建 Azure 负载均衡器

本部分详细介绍如何创建和配置负载均衡器的每个组件。 创建负载均衡器之前,需使用az group create创建资源组。 以下示例在 chinaeast 位置创建名为 myResourceGroupLoadBalancer 的资源组:

Azure CLI复制

azgroupcreate--namemyResourceGroupLoadBalancer--locationchinaeast

创建公共 IP 地址

若要通过 Internet 访问应用,需要负载均衡器的一个公共 IP 地址。 使用az network public-ip create创建公共 IP 地址。 以下示例在 myResourceGroupLoadBalancer 资源组中创建名为 myPublicIP 的公共 IP 地址:

Azure CLI复制

aznetworkpublic-ipcreate\--resource-groupmyResourceGroupLoadBalancer \--namemyPublicIP

创建负载均衡器

使用az network lb create创建负载均衡器。 以下示例创建名为“myLoadBalancer”的负载均衡器,并将“myPublicIP”地址分配到前端 IP 配置:

Azure CLI复制

aznetworklbcreate\--resource-groupmyResourceGroupLoadBalancer \--namemyLoadBalancer \--frontend-ip-namemyFrontEndPool \--backend-pool-namemyBackEndPool \--public-ip-addressmyPublicIP

创建运行状况探测器

若要允许负载均衡器监视应用的状态,可以使用运行状况探测器。 运行状况探测器基于其对运行状况检查的响应,从负载均衡器中动态添加或删除 VM。 默认情况下,在 15 秒时间间隔内发生两次连续的故障后,会从负载均衡器分布中删除 VM。 可以为应用创建基于协议或特定运行状况检查页面的运行状况探测器。

以下示例创建一个 TCP 探测器。 还可创建自定义 HTTP 探测,以便执行更精细的运行状况检查。 使用自定义 HTTP 探测时,必须创建运行状况检查页,例如 healthcheck.js。 探测必须为负载均衡器返回 HTTP 200 OK 响应,以保持主机处于旋转状态。

若要创建 TCP 运行状况探测,请使用az network lb probe create。 以下示例创建名为“myHealthProbe”的运行状况探测:

Azure CLI复制

aznetworklbprobecreate\--resource-groupmyResourceGroupLoadBalancer \--lb-namemyLoadBalancer \--namemyHealthProbe \--protocoltcp \--port80

创建负载均衡器规则

负载均衡器规则用于定义将流量分配给 VM 的方式。 定义传入流量的前端 IP 配置和后端 IP 池以接收流量,同时定义所需源和目标端口。 若要确保仅正常运行的 VM 接收流量,还需定义要使用的运行状况探测。

使用az network lb rule create创建负载均衡器规则。 以下示例创建名为“myLoadBalancerRule”的规则、使用“myHealthProbe”运行状况探测并平衡端口 80 上的流量:

Azure CLI复制

aznetworklbrulecreate\--resource-groupmyResourceGroupLoadBalancer \--lb-namemyLoadBalancer \--namemyLoadBalancerRule \--protocoltcp \--frontend-port80\--backend-port80\--frontend-ip-namemyFrontEndPool \--backend-pool-namemyBackEndPool \--probe-namemyHealthProbe

配置虚拟网络

需要先创建提供支持的虚拟网络资源,然后才能部署某些 VM 并测试均衡器。 有关虚拟网络的详细信息,请参阅管理 Azure 虚拟网络教程。

创建网络资源

使用az network vnet create创建虚拟网络。 以下示例创建名为“myVnet”的虚拟网络和一个名为“mySubnet”的子网:

Azure CLI复制

aznetworkvnetcreate\--resource-groupmyResourceGroupLoadBalancer \--namemyVnet \--subnet-namemySubnet

若要添加网络安全组,请使用az network nsg create。 以下示例创建名为“myNetworkSecurityGroup”的网络安全组:

Azure CLI复制

aznetworknsgcreate\--resource-groupmyResourceGroupLoadBalancer \--namemyNetworkSecurityGroup

使用az network nsg rule create创建网络安全组规则。 以下示例创建名为“myNetworkSecurityGroupRule”的网络安全组规则:

Azure CLI复制

aznetworknsgrulecreate\--resource-groupmyResourceGroupLoadBalancer \--nsg-namemyNetworkSecurityGroup \--namemyNetworkSecurityGroupRule \--priority1001\--protocoltcp \--destination-port-range80

使用az network nic create创建虚拟 NIC。 以下示例创建三个虚拟 NIC。 (在以下步骤中针对为应用创建的每个 VM 各使用一个虚拟 NIC)。 可随时创建其他虚拟 NIC 和 VM,并将其添加到负载均衡器:

bash复制

foriin`seq 1 3`;doaz network nic create \        --resource-group myResourceGroupLoadBalancer \        --name myNic$i\        --vnet-name myVnet \        --subnet mySubnet \        --network-security-group myNetworkSecurityGroup \        --lb-name myLoadBalancer \        --lb-address-pools myBackEndPooldone

创建虚拟机

创建 cloud-init 配置

在有关如何在首次启动时自定义 Linux 虚拟机的上一个教程中,你已了解如何使用 cloud-init 自动执行 VM 自定义。 可使用同一个 cloud-init 配置文件安装 NGINX 并运行简单的“Hello World”Node.js 应用。

创建名为“cloud-init.txt”的文件并粘贴以下配置。 请确保已正确复制整个 cloud-init 文件,尤其是第一行:

yaml复制

#cloud-configpackage_upgrade:truepackages:-nginx-nodejs-npmwrite_files:- owner:www-data:www-data- path:/etc/nginx/sites-available/defaultcontent:|

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.jscontent:|

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:-servicenginxrestart-cd"/home/azureuser/myapp"-npminit-npminstallexpress-y-nodejsindex.js

创建虚拟机

若要提高应用的高可用性,请将 VM 放置在可用性集中。 有关可用性集的详细信息,请参阅前面的如何创建高可用性虚拟机教程。

使用az vm availability-set create创建可用性集。 以下示例创建名为“myAvailabilitySet”的可用性集:

Azure CLI复制

azvmavailability-setcreate\--resource-groupmyResourceGroupLoadBalancer \--namemyAvailabilitySet

现在,可使用az vm create创建 VM。 以下示例创建三个 VM,并生成 SSH 密钥(如果它们尚不存在):

bash复制

foriin`seq 1 3`;doaz vm create \        --resource-group myResourceGroupLoadBalancer \        --name myVM$i\        --availability-set myAvailabilitySet \        --nics myNic$i\        --image UbuntuLTS \        --admin-username azureuser \        --generate-ssh-keys \        --custom-data cloud-init.txt \        --no-waitdone

在 Azure CLI 返回提示之后,仍然存在继续运行的后台任务。--no-wait参数不会等待所有任务完成。 可能还需等待几分钟才能访问应用。 在每个 VM 上运行应用时,负载均衡器运行状况探测器会自动检测。 应用运行后,负载均衡器规则将开始分布流量。

测试负载均衡器

使用az network public-ip show获取负载均衡器的公共 IP 地址。 以下示例获取前面创建的“myPublicIP”的 IP 地址:

Azure CLI复制

aznetworkpublic-ipshow\--resource-groupmyResourceGroupLoadBalancer \--namemyPublicIP \--query[ipAddress]\--outputtsv

然后,可将公共 IP 地址输入 Web 浏览器中。 请记住:在负载均衡器开始向 VM 分发流量之前,VM 需要几分钟才能准备就绪。 随即显示应用,包括负载均衡器将流量分发到的 VM 的主机名,如下例所示:

如何在 Azure 中均衡 Linux 虚拟机负载以创建高可用性应用程序_第1张图片

若要查看负载均衡器如何在运行应用的所有 3 个 VM 之间分配流量,可强制刷新 Web 浏览器。

添加和删除 VM

建议对运行应用的 VM 执行维护,例如安装 OS 更新。 若要应对应用增加的流量,建议添加更多 VM。 本部分演示了如何在负载均衡器中删除或添加 VM。

从负载均衡器中删除 VM

可使用az network nic ip-config address-pool remove从后端地址池中删除 VM。 以下示例从“myLoadBalancer”中删除“myVM2”的虚拟 NIC:

Azure CLI复制

aznetworknicip-configaddress-poolremove\--resource-groupmyResourceGroupLoadBalancer \--nic-namemyNic2 \--ip-config-nameipConfig1 \--lb-namemyLoadBalancer \--address-poolmyBackEndPool

若要查看负载均衡器如何在运行应用的其余两个 VM 之间分发流量,可强制刷新 Web 浏览器。 现在可以对 VM 执行维护,例如安装 OS 更新或执行 VM 重新启动。

将 VM 添加到负载均衡器

可以在执行 VM 维护后或需要扩展容量的情况下,使用az network nic ip-config address-pool add将 VM 添加到后端地址池。 以下示例将“myVM2”的虚拟 NIC 添加到“myLoadBalancer”:

Azure CLI复制

aznetworknicip-configaddress-pooladd\--resource-groupmyResourceGroupLoadBalancer \--nic-namemyNic2 \--ip-config-nameipConfig1 \--lb-namemyLoadBalancer \--address-poolmyBackEndPool

后续步骤

在本教程中,你已创建了一个负载均衡器并已将 VM 附加到它。 你已了解如何:

创建 Azure 负载均衡器

创建负载均衡器运行状况探测

创建负载均衡器流量规则

使用 cloud-init 创建基本的 Node.js 应用

创建虚拟机并将其附加到负载均衡器

查看负载均衡器的实际运行情况

从负载均衡器中添加和删除 VM

请转到下一教程,详细了解 Azure 虚拟网络组件。

立即访问http://market.azure.cn

你可能感兴趣的:(如何在 Azure 中均衡 Linux 虚拟机负载以创建高可用性应用程序)