利用虚拟机规模集,可以部署和管理一组相同的、自动缩放的虚拟机。 可以手动缩放规模集中的 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-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 group create 创建资源组,然后才能创建规模集。 以下示例在“chinaeast”位置创建名为“myResourceGroupScaleSet”的资源组:

Azure CLI复制
az group create --name myResourceGroupScaleSet --location chinaeast

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

Azure CLI复制
az vmss create \
--resource-group myResourceGroupScaleSet \
--name myScaleSet \
--image UbuntuLTS \
--upgrade-policy-mode automatic \
--custom-data cloud-init.txt \
--admin-username azureuser \
--generate-ssh-keys

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

允许 Web 流量

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

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

Azure CLI复制
az network lb rule create \
--resource-group myResourceGroupScaleSet \
--name myLoadBalancerRuleWeb \
--lb-name myScaleSetLB \
--backend-pool-name myScaleSetLBBEPool \
--backend-port 80 \
--frontend-ip-name loadBalancerFrontEnd \
--frontend-port 80 \
--protocol tcp

测试应用

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

Azure CLI复制
az network public-ip show \
--resource-group myResourceGroupScaleSet \
--name myScaleSetLBPublicIP \
--query [ipAddress] \
--output tsv

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

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

管理任务

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

查看规模集中的 VM

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

Azure CLI复制
az vmss list-instances \
--resource-group myResourceGroupScaleSet \
--name myScaleSet \
--output table

输出类似于以下示例:

Azure CLI复制
  InstanceId  LatestModelApplied    Location    Name          ProvisioningState    ResourceGroup            VmId
------------ -------------------- ---------- ------------ ------------------- ----------------------- ------------------------------------
1 True chinaeast myScaleSet_1 Succeeded MYRESOURCEGROUPSCALESET c72ddc34-6c41-4a53-b89e-dd24f27b30ab
3 True chinaeast myScaleSet_3 Succeeded MYRESOURCEGROUPSCALESET 44266022-65c3-49c5-92dd-88ffa64f95da

增加或减少 VM 实例

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

Azure CLI复制
az vmss show \
--resource-group myResourceGroupScaleSet \
--name myScaleSet \
--query [sku.capacity] \
--output table

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

Azure CLI复制
az vmss scale \
--resource-group myResourceGroupScaleSet \
--name myScaleSet \
--new-capacity 5

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

获取连接信息

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

Azure CLI复制
az vmss list-instance-connection-info \
--resource-group myResourceGroupScaleSet \
--name myScaleSet

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

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

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

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

Azure CLI复制
az vmss create \
--resource-group myResourceGroupScaleSet \
--name myScaleSetDisks \
--image UbuntuLTS \
--upgrade-policy-mode automatic \
--custom-data cloud-init.txt \
--admin-username azureuser \
--generate-ssh-keys \
--data-disk-sizes-gb 50

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

添加数据磁盘

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

Azure CLI复制
az vmss disk attach \
--resource-group myResourceGroupScaleSet \
--name myScaleSet \
--size-gb 50 \
--lun 2

分离数据磁盘

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

Azure CLI复制
az vmss disk detach \
--resource-group myResourceGroupScaleSet \
--name myScaleSet \
--lun 2

后续步骤

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

  • 使用 cloud-init 创建可缩放的应用
  • 创建虚拟机规模集
  • 增加或减少规模集中的实例数
  • 查看规模集实例的连接信息
  • 在规模集中使用数据磁盘

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

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

在 Linux 上创建虚拟机规模集和部署高度可用的应用的更多相关文章

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

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

  2. 怎么在自己的windows上创建虚拟机(linux centos7)

    怎么在自己的windows上创建虚拟机(linux centos7) 作为一个非科班出身自学的小白,踩过很多的坑,特此留下记录 宿主机:windows10系统 8G 64位操作系统 虚拟机:linux ...

  3. 在LINUX上创建GIT服务器【转】

    转自:http://blog.csdn.net/xiongmc/article/details/9176785 如果使用git的人数较少,可以使用下面的步骤快速部署一个git服务器环境. 1. Cli ...

  4. 在Linux上创建webrev(cont)[基于svn]

    在前文中,基于git介绍了webrev工具.实际上,webrev工具还支持hg和svn.最近的工作中不可避免地要使用svn,故在此总结一下如何基于svn在Linux上创建webrev.顺便吐个槽,没有 ...

  5. #内存不够,swap来凑# Linux上创建SWAP文件/分区

    转自:https://www.vmvps.com/how-to-create-a-swap-file-on-the-linux-os.html 很久很久以前,电脑的内存是个珍贵东西,于是乎就有了swa ...

  6. 如何在Linux上创建,列出和删除Docker容器

    本篇文章介绍的内容是关于在Linux机器上创建,列出和删除docker容器,下面我们来看具体的内容. 1.启动Docker容器 使用下面的命令启动新的Docker容器.这将启动一个新的容器,并为你提供 ...

  7. 在 Linux 上创建第一个 Service Fabric Java 应用程序

    先决条件 开始之前,请安装 Service Fabric SDK.Azure CLI,并在 Linux 开发环境中设置开发群集. 如果使用 Mac OS X,则可使用 Vagrant 在虚拟机中设置 ...

  8. 关于如何在Linux上使用Nugix反向代理部署net core3.1项目

    本文意在教大家如何在Linux上部署net core web项目,本人通过实践已经成功可以通过外网访问我部署在阿里云服务器上的站点. 一:需要用到的东西如下: 1:一个基于net core框架下的we ...

  9. 在Linux上创建webrev[基于git]

    在Sun/Oracle工作了N(>12)年后,对webrev工具甚为喜欢,因为其易用性确实非常好.幸运的是,有工程师将webrev工具放到了GitHub上,而且支持git. 下面给出使用webr ...

随机推荐

  1. VUE自定义指令生命周期,VUE生命周期

    一.自定义指令的生命周期 自定义指令有五个生命周期(也叫钩子函数),分别是 bind,inserted,update,componentUpdated,unbind bind:只调用一次,指令第一次绑 ...

  2. 生产环境部署node记录(一)

    云服务器厂商:京东云 我选择的操作系统为公共镜像CentOS7.2. 步骤: 首先登陆服务器:使用ssh 用户名@IP地址  登陆 1. wget命令下载Node.js安装包 登陆node的官网复制下 ...

  3. api.openWin

    打开window 若 window 已存在,则会把该 window 显示到最前面,如果 url 和之前的 url 有变化,或者 reload 为 true 时,页面会刷新,但是该 window 里面已 ...

  4. easyUI-textbox回车获取不到正确的textbox值问题

    //要先给文本框手动赋值之后才可以获取正确的文本框内容 var t = $('#tt'); t.textbox('textbox').bind('keydown', function(e){ if ( ...

  5. Hibernate中NoSession问题

    今天在使用hibernate中 Note note = hibTem.load(Note.class, id); 报了一个could not initialize proxy [cn.entity.N ...

  6. 转载:SQL中的case when then else end用法

    SQL中的case when then else end用法 来源: http://www.cnblogs.com/prefect/p/5746624.html Case具有两种格式.简单Case函数 ...

  7. 【转】maven profile实现多环境打包

    作为一名程序员,在开发的过程中,经常需要面对不同的运行环境(开发环境.测试环境.生产环境.内网环境.外网环境等等),在不同的环境中,相关的配置一般不一样,比如数据源配置.日志文件配置.以及一些软件运行 ...

  8. slf4j和log4j源代码解析以及详解

    备注:下面所有代码以log4j为例 包结构 slf4j-api.jar对外提供api slf4j.log4j12.jar提供适配器 log4j.jar是log4j的jar slf4j初始化 获取ILo ...

  9. springmvc 配置多个数据源,并动态切换

    前言:工作中经常会有两个数据源的情况,所以记录一下.这里测试两个数据源,给出流程和代码. 首先:配置两个数据源 <description>配置mybatis数据源</descript ...

  10. Asp.Net Mvc表单提交(批量提交)

    Asp.Net Mvc中Action的参数可以自动接收和反序列化form表单的值, 采用form表单提交 name=value类型,只要Action参数的变量名和input的name相同就行 html ...