在 Linux 上创建虚拟机规模集和部署高度可用的应用

利用虚拟机规模集,可以部署和管理一组相同的、自动缩放的虚拟机。 可以手动缩放规模集中的 VM 数,也可以定义规则,以便根据资源使用情况(如 CPU 使用率、内存需求或网络流量)进行自动缩放。 在本教程中,将在 Azure 中部署虚拟机规模集。 你将学习如何执行以下操作:

使用 cloud-init 创建可缩放的应用

创建虚拟机规模集

增加或减少规模集中的实例数

查看规模集实例的连接信息

在规模集中使用数据磁盘

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

规模集概述

利用虚拟机规模集,可以部署和管理一组相同的、自动缩放的虚拟机。 规模集中的 VM 将分布在逻辑容错域和更新域的一个或多个放置组中。 这些放置组由配置类似的 VM 组成,与可用性集相似。

可以根据需要在规模集中创建 VM。 可以定义自动缩放规则来控制如何以及何时在规模集中添加或删除 VM。 这些规则可以根据 CPU 负载、内存用量或网络流量等指标触发。

使用 Azure 平台映像时,规模集最多支持 1,000 个 VM。 对于有重要安装或 VM 自定义要求的工作负荷,可能需要创建自定义 VM 映像。 使用自定义映像时,在规模集中最多可以创建 300 个 VM。

创建用于缩放的应用

对于生产用途,可能需要创建自定义 VM 映像,其中包含已安装和配置的应用程序。 在本教程中,我们将在首次启动时自定义 VM,以便快速了解规模集的运作方式。

上一篇教程已介绍如何使用 cloud-init 在首次启动时自定义 Linux 虚拟机。 可使用同一个 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

创建规模集

使用az group create创建资源组,然后才能创建规模集。 以下示例在“chinaeast”位置创建名为“myResourceGroupScaleSet”的资源组:

Azure CLI复制

azgroupcreate--namemyResourceGroupScaleSet--locationchinaeast

现在,使用az vmss create创建虚拟机规模集。 以下示例创建名为“myScaleSet”的规模集,使用 cloud-int 文件自定义 VM,然后生成 SSH 密钥(如果不存在):

Azure CLI复制

azvmsscreate\--resource-groupmyResourceGroupScaleSet \--namemyScaleSet \--imageUbuntuLTS \--upgrade-policy-modeautomatic \--custom-datacloud-init.txt \--admin-usernameazureuser \--generate-ssh-keys

创建和配置所有的规模集资源和 VM 需要几分钟时间。 在 Azure CLI 返回提示之后,仍然存在继续运行的后台任务。 可能还需等待几分钟才能访问应用。

允许 Web 流量

已自动创建一个负载均衡器,作为虚拟机规模集的一部分。 负载均衡器使用负载均衡器规则将流量分配到一组定义的 VM。 可以在下一篇教程如何在 Azure 中实现虚拟机的负载均衡中详细了解负载均衡器的概念和配置。

若要允许通信流到达 Web 应用,请使用az network lb rule create创建一个规则。 以下示例创建名为“myLoadBalancerRuleWeb”的规则:

Azure CLI复制

aznetworklbrulecreate\--resource-groupmyResourceGroupScaleSet \--namemyLoadBalancerRuleWeb \--lb-namemyScaleSetLB \--backend-pool-namemyScaleSetLBBEPool \--backend-port80\--frontend-ip-nameloadBalancerFrontEnd \--frontend-port80\--protocoltcp

测试应用

若要在 Web 上查看 Node.js 应用,请使用az network public-ip show获取负载均衡器的公共 IP 地址。 以下示例获取创建为规模集一部分的“myScaleSetLBPublicIP”的 IP 地址:

Azure CLI复制

aznetworkpublic-ipshow\--resource-groupmyResourceGroupScaleSet \--namemyScaleSetLBPublicIP \--query[ipAddress]\--outputtsv

将公共 IP 地址输入到 Web 浏览器中。 将显示应用,包括负载均衡器将流量分发到的 VM 的主机名:

若要查看规模集的实际运行情况,可以强制刷新 Web 浏览器,以查看负载均衡器如何在运行应用的所有 VM 之间分发流量。

管理任务

在规模集的整个生命周期内,可能需要运行一个或多个管理任务。 此外,可能还需要创建自动执行各种生命周期任务的脚本。 Azure CLI 2.0 提供一种用于执行这些任务的快速方法。 以下是一些常见任务。

查看规模集中的 VM

若要查看规模集中运行的 VM 列表,请使用az vmss list-instances,如下所示:

Azure CLI复制

azvmsslist-instances \--resource-groupmyResourceGroupScaleSet \--namemyScaleSet \--outputtable

输出类似于以下示例:

Azure CLI复制

InstanceId  LatestModelApplied    Location    Name          ProvisioningState    ResourceGroup            VmId------------------------------------------------------------------------------------------------------------------------------------1True                  chinaeast  myScaleSet_1  Succeeded            MYRESOURCEGROUPSCALESET  c72ddc34-6c41-4a53-b89e-dd24f27b30ab3True                  chinaeast  myScaleSet_3  Succeeded            MYRESOURCEGROUPSCALESET44266022-65c3-49c5-92dd-88ffa64f95da

增加或减少 VM 实例

若要查看规模集中当前包含的实例数,请使用az vmss show并查询 “sku.capacity”:

Azure CLI复制

azvmssshow\--resource-groupmyResourceGroupScaleSet \--namemyScaleSet \--query[sku.capacity]\--outputtable

然后,可以使用az vmss scale手动增加或减少规模集中虚拟机的数目。 以下示例将规模集中 VM 的数目设置为 5:

Azure CLI复制

azvmssscale\--resource-groupmyResourceGroupScaleSet \--namemyScaleSet \--new-capacity5

利用自动缩放规则,可以定义如何根据网络流量或 CPU 使用率等需求,增加或减少规模集中 VM 的数目。 目前,不能在 Azure CLI 2.0 中设置这些规则。 使用Azure 门户配置自动缩放。

获取连接信息

若要获取有关规模集中 VM 的连接信息,请使用az vmss list-instance-connection-info。 此命令为每个允许采用 SSH 进行连接的 VM 输出公共 IP 地址和端口:

Azure CLI复制

azvmsslist-instance-connection-info \--resource-groupmyResourceGroupScaleSet \--namemyScaleSet

将数据磁盘与规模集配合使用

可以创建数据磁盘并与规模集配合使用。 前面的教程介绍了如何管理 Azure 磁盘,其中概述了在数据磁盘而非 OS 磁盘上生成应用的最佳做法和用于实现此目的的性能改进。

创建具有数据磁盘的规模集

若要创建规模集并附加数据磁盘,请将--data-disk-sizes-gb参数添加到az vmss create命令中。 以下示例创建一个规模集,它具有附加到每个实例的 50 GB 数据磁盘:

Azure CLI复制

azvmsscreate\--resource-groupmyResourceGroupScaleSet \--namemyScaleSetDisks \--imageUbuntuLTS \--upgrade-policy-modeautomatic \--custom-datacloud-init.txt \--admin-usernameazureuser \--generate-ssh-keys\--data-disk-sizes-gb50

删除规模集中的实例时,也会删除所有附加的数据磁盘。

添加数据磁盘

若要向规模集中的实例添加数据磁盘,请使用az vmss disk attach。 以下示例向每个实例添加一个 50 GB 的磁盘:

Azure CLI复制

azvmssdiskattach\--resource-groupmyResourceGroupScaleSet \--namemyScaleSet \--size-gb50\--lun2

分离数据磁盘

若要删除附加到规模集中实例的数据磁盘,请使用az vmss disk detach。 以下示例在 LUN 2 删除每个实例中的数据磁盘:

Azure CLI复制

azvmssdiskdetach\--resource-groupmyResourceGroupScaleSet \--namemyScaleSet \--lun2

后续步骤

在本教程中,你已创建了一个虚拟机规模集。 你已了解如何:

使用 cloud-init 创建可缩放的应用

创建虚拟机规模集

增加或减少规模集中的实例数

查看规模集实例的连接信息

在规模集中使用数据磁盘

请继续学习下一教程,详细了解虚拟机的负载均衡概念。

立即访问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

推荐阅读更多精彩内容