微软云账号购买:手把手教你利用 Azure VMSS 实现应用程序的自动化弹性扩缩容
在上一次的教程中,我们成功在 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 地址”。
- 正常访问: 在浏览器输入这个 IP,你应该能看到 Hello from Azure VMSS! My Hostname is: my-web-scale-set_0。刷新几次,页面稳如泰山。
- 人工制造暴击(压测):我们需要手动把这台机器的 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,你就再也不用在半夜盯着服务器流量看板,可以安心把高可用交到微软云的自动化算法手中了!

