如何在 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 的主机名,如下例所示:

若要查看负载均衡器如何在运行应用的所有 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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容