微软云账号购买:手把手教你利用 Azure VMSS 实现应用程序的自动化弹性扩缩容

cloud 2026-06-05 阅读 7
1

    在上一次的教程中,我们成功在 Azure 中部署了第一台虚拟机。但现实中,如果你的网站突然遭遇“双十一”式的流量暴击,单台虚拟机可能瞬间瘫痪;而到了深夜,流量低谷时,让一堆高性能服务器空转又是巨大的资金浪费。

在云原生时代,我们不应该手动去买服务器、配环境。Azure 虚拟机规模集(Virtual Machine Scale Sets,简称 VMSS) 就是为了解决这个痛点而生的。它可以根据业务流量的变化,自动帮你增加(买)或减少(退)虚拟机实例的数量

今天这篇深度教程,就带你从零开始,亲手搭建一个具备“自动弹性扩缩容”能力的超高可用 Web 应用架构。

一、 核心概念:什么是 VMSS 与弹性扩缩容?

在动手前,我们先用大白话理清两个硬核概念:

  • 虚拟机规模集(VMSS): 简单来说,它是一个“打字机模板”。你只需要配置好一台虚拟机的操作系统、软件环境,VMSS 就能在几分钟内,帮你克隆出 5 台、50 台甚至 500 台一模一样的虚拟机。
  • 水平扩展(Scale Out)与水平收缩(Scale In):垂直扩展是把双核 CPU 换成四核(需要重启,有上限);水平扩展则是“人多力量大”——一台扛不住,自动再来两台。流量没了,再自动退掉。这就是弹性(Elasticity)。

二、 核心架构设计

我们要搭建的不是一个光秃秃的规模集,而是一个标准的生产环境架构:


       [ 互联网流量 (HTTP/80) ]
                  │
                  ▼
         [ Azure 负载均衡器 ]
          (Load Balancer)
                  │
         ┌────────┴────────┐
         ▼                 ▼
   [ VMSS 实例 1 ]   [ VMSS 实例 2 ] ... (根据 CPU 自动增减)

流量先到达负载均衡器,由它平均分配给后端的 VMSS 实例。VMSS 会盯着这些实例的 CPU 损耗,一旦超过阈值,立刻自动裂变出新的实例加入战斗。

三、 第一阶段:创建与配置 VMSS(基础搭建)

登录 Azure 门户(Azure Portal),在搜索栏输入 “虚拟机规模集”(Virtual Machine Scale Sets),点击“创建”。

1. 基本信息

  • 资源组: 建议新建一个,比如 MyVMSS-RG。
  • 虚拟机规模集名称: 比如 my-web-scale-set。
  • 区域: 选择离你最近的区域(如 East Asia)。
  • 业务流程: 选 “统一 (Uniform)”。这能确保所有克隆出来的机器完全一致,最适合无状态的 Web 应用。
  • 映像(Image): 这里我们以 Ubuntu Server 24.04 LTS 为例(Windows 操作逻辑完全相同)。

2. 规模与规格

  • 大小: 依旧推荐极具性价比的 Standard_B1s 或 Standard_B2s(练手足够,省钱第一)。
  • 验证类型: 选择“密码”或“SSH 密钥”。为了教学演示方便,我们这里选密码,设置好用户名(如 azureuser)和强密码。

3. 网络配置(关键步骤)

拉到网络部分,你会看到“负载均衡”选项。

  • 勾选“使用负载均衡器”。
  • 负载均衡器选项: 选择“Azure 负载均衡器”。
  • 选择负载均衡器 / 新建: 命名为 my-load-balancer。
  • 选择后端池 / 新建: 命名为 my-backend-pool。
💡 为什么要选这个?这样一来,未来无论 VMSS 自动创建了多少台虚拟机,Azure 都会自动把它们塞进这个“后端池”里,负载均衡器会自动把用户的访问流量分发过去,完全不需要你手动配置 IP。

四、 第二阶段:利用自定义脚本实现“开箱即用”

规模集会自动帮我们建机器,但新机器里面是空空的。怎么让新克隆出来的机器自动装好 Web 服务(比如 Nginx)并运行我们的应用呢?

我们需要利用 高级(Advanced) 选项中的 “自定义脚本扩展(Custom Script Extension)”

在创建页面的 “高级” 选项卡中,找到“自定义数据(Custom Data)”,在文本框中贴入以下这段 Linux 初始化脚本:

Bash


#!/bin/bash
# 更新系统并安装 Nginx
apt-get update -y
apt-get install nginx -y

# 启动 Nginx 服务
systemctl start nginx
systemctl enable nginx

# 写入一个网页,动态显示当前主机的名称(方便我们测试看效果)
echo "<h1>Hello from Azure VMSS! My Hostname is: $(hostname)</h1>" > /var/www/html/index.html

这段脚本的作用是: 每当 VMSS 发现流量大、自动新建一台虚拟机时,这台新机器在开机的一瞬间,就会自动执行这段代码——安装 Nginx、启动服务、写好网页。真正实现无人值守的自动化。

五、 第三阶段:配置核心——自动弹性扩缩容策略

点击切换到 “缩放(Scaling)” 选项卡。这是整个教程灵魂所在。

默认选项是“手动缩放”,我们需要把它改成 “自定义自动缩放(Custom autoscale)”

接下来,我们需要配置一套严密的“扩缩容规则”:

1. 设置实例范围

  • 最低实例数(Minimum): 1(平时没人访问时,保留 1 台机器省钱)。
  • 最高实例数(Maximum): 3(防止代码写错陷入死循环,或者遇到恶意攻击时,无限开机器导致信用卡刷爆,设个上限保护钱包)。
  • 默认实例数(Default): 1。

2. 添加扩容规则(Scale Out Rule)

点击“添加规则”,我们要告诉系统什么时候该加机器:

  • 度量值源: 当前资源(VMSS)。
  • 时间聚合: 平均值。
  • 度量值名称: Percentage CPU(CPU 使用率)。
  • 运算符: 大于。
  • 阈值(Metric threshold): 70 (当 CPU 平均使用率超过 70% 时)。
  • 持续时间(分钟): 5 (这种情况持续了 5 分钟以上,说明不是偶发的瞬时波动,是真的顶不住了)。
  • 操作: 将计数增加。
  • 实例数: 1 (每次增加 1 台机器)。
  • 冷却时间(分钟): 5 (加完一台机器后,让子弹飞一会儿,观察 5 分钟,别加太快)。

3. 添加缩容规则(Scale In Rule)

有借有还,再添加一条规则,告诉系统什么时候该退机器省钱:

  • 度量值名称: Percentage CPU。
  • 运算符: 小于。
  • 阈值: 30 (当全场平均 CPU 闲到 30% 以下时)。
  • 操作: 将计数减少。
  • 实例数: 1 (每次裁剪 1 台机器,直到缩减到最低值 1 台为止)。

配置完成后,点击 “查看 + 创建”,等待部署完成。

六、 验证奇迹:如何测试自动扩缩容?

部署完成后,转到你的资源组,找到那个 负载均衡器(my-load-balancer),复制它的“前端公共 IP 地址”。

  1. 正常访问: 在浏览器输入这个 IP,你应该能看到 Hello from Azure VMSS! My Hostname is: my-web-scale-set_0。刷新几次,页面稳如泰山。
  2. 人工制造暴击(压测):我们需要手动把这台机器的 CPU 给拉满。通过 SSH 连接到当前的这台虚拟机实例,在终端里运行一条经典的 CPU 压测命令(或者安装 stress 工具):Bash# 安装压测工具 sudo apt-get install stress -y # 让 CPU 4核满载运行(哪怕你只有1核,它也会全力拉满) stress --cpu 4 --timeout 600
3.  **见证奇迹:** 
    回到 Azure 门户的 VMSS 页面,点击左侧的 **“运行状况 (Run history)”** 或 **“实例 (Instances)”**。
    
    大约 5 分钟后,你会发现图表中的 CPU 曲线陡峭上升。紧接着,实例列表里刷新出了一个新的实例:`my-web-scale-set_1`,状态为“正在创建” -> “正在运行”。

4.  **再次访问:** 
    疯狂刷新你浏览器里的那个负载均衡器 IP。你会发现,一会儿显示的是 `Hostname is: ..._0`,一会儿变成了 `Hostname is: ..._1`。
    
    **这说明负载均衡器已经成功把部分流量分流给了刚出生的小弟!**

5.  **自动退场:** 
    10分钟后,压测命令结束,CPU 回落。再过 5-10 分钟,系统触发缩容规则,刚刚新建的那台虚拟机又会被自动优雅地关闭并删除,一切恢复原状。

---

## 七、 总结与排坑指南

通过今天的进阶学习,你已经解锁了云原生架构的核心能力——**高可用与弹性自愈**。在实际生产环境应用中,还有两个小贴士需要注意:

*   **无状态设计(Stateless):** 弹性扩缩容的机器是“随生随灭”的。千万不要把用户的上传文件、数据库存在 VMSS 虚拟机的本地硬盘里,否则一缩容就全没了。文件应该存到 Azure Blob Storage(对象存储),数据应该存到 Azure SQL 等独立数据库。
*   **镜像更新:** 我们今天用的是脚本装 Nginx,如果你的应用很复杂、依赖很多,更好的做法是:在一台普通 VM 里把环境全部配好,然后把它打包成一个**自定义映像(Custom Image)**,让 VMSS 直接基于你的自定义映像去克隆。

掌握了 VMSS,你就再也不用在半夜盯着服务器流量看板,可以安心把高可用交到微软云的自动化算法手中了!


cloud
← 返回新闻中心