使用ARM和VMSS建立自动扩展的web集群

在不少的商业场景中,用户的访问,峰值时间都是很难预测的,尤为是作一些市场推广活动和促销的时候,到底部署什么规模的web集群合适,这一直是个问题,部署过量会形成高成本和资源没必要要的浪费,部署过少,若是到达峰值,来不及部署,容易形成用户没法访问,用户体验差,交易损失等等,固然更不用提运维人员时刻神经紧绷的实时监测压力状况,以便及时采起措施……php

在云计算技术突飞猛进的今天,这个场景是很是不和谐的:)VMSS做为Azure新的计算方式,提供了按照压力负载自动扩展收缩,而且同时支持Windows和Linux,在提供了IAAS级别的控制灵活性的同时,也提供了PAAS级别的自动扩展,对于无状态的web服务器应用等场景很是适合,本文介绍如何经过ARM模板和VMSS建立一个自动负载均衡的,按照你的CPU负载自动扩展的web服务器集群:前端

在本模板中,将会建立以下测试环境:git

  1. 定义一个负载均衡器,负责转发前端的web请求给后端的web集群github

  2. 使用VMSS建立一个web集群web

  3. 使用客户定制化脚本,自动安装Apache web服务器,和PHP web应用shell

  4. 定义自动扩展集合的规则,根据虚拟机自动扩展集合中的CPU负载进行自动扩展或者收缩,虚拟机也会自动的在负载均衡器中自动添加或者删除后端

  5. 压力测试用具,可使用LoadRunner,Apache AB等等,在本例中,使用PHP产生压力,达到CPU阈值要求浏览器

  6. 原始的ARM模版请参考Azure的quick start模版:bash

https://github.com/Azure/azure-quickstart-templates/tree/master/201-vmss-lapstack-autoscale服务器

  1. 我修改过的,直接能够在Azure China上运行的模版以下:

    https://github.com/kingliantop/azurelabs/tree/master/AzureChinaARMTemplate/vmss-lapstack-autoscale

     

模板定义:

  1. 对于VMSS的基本定义,前述文档已经介绍过,不在赘述,再次咱们先看一下负载均衡器的定义,首先咱们须要增长一个负载均衡器的资源,这个资源依赖于公共IP地址,前端地址就是公共IP地址:

     

     

  2. 接下来咱们须要定义负载均衡的规则,前端的请求经过DNS或者公网IP地址进来之后,经过默认的地址分发给后端的IP资源池,协议是TCP,前端和后端端口都是标准的80端口,你也能够设置负载均衡器空闲超时时间,这个时间会决定你的链接空闲时长,最长但是设置为30分钟;由于咱们后续主要配置的是http请求,因此主要设置一下针对80端口的探测,以此判断后端虚拟机是否健康:

     

  3. 为方便用户定制化部署,快速扩展,Azure提供了定制化脚本扩展,可让你在虚拟机部署完成后,运行自定义的脚本,安装你本身软件,部署你本身的应用,具体的用法以下,你能够将你的应用放在Azure存储中,本例中放在了github上,而后执行bash,进行安装配置:

     

    在本次测试中,提供了两个PHP web文件,一个是index.php,用来显示当前的web应用跑在哪一个服务器上,另一个是do_work.php用来给web服务器产生压力,触发自动扩展。

     

  4. 最后须要配置一下VMSS自动扩展的规则,在什么状况下进行自动扩展,在什么状况下,进行自动收缩,在本例中,咱们定义整个VMSS中平均CPU的负载在过去5分钟内高于60%就进行自动扩展,低于50%的时候自动收缩:

     

     

  5. 最后咱们须要配置一下参数文件,定义一下VMSS的名称,初始在VMSS中须要几个虚拟机,用户名和密码便可:

  6. 最后,咱们使用Powershell进行部署,我已经写好了一个deploy.ps1文件,你们在Powershell下修改下参数,直接执行便可,好比你但愿的资源组名称,部署的区域等参数,而后在Powershell下执行便可:

     

    #用你的Azure帐号登录

    Login-AzureRmAccount -EnvironmentName AzureChinaCloud

    #执行部署脚本

  7. 部署完成后,登录Azure新portal,https://portal.azure.cn, 能够看到新的VMSS集合已经部署成功,包括有一个扩展集,,一个负载均衡器,一个公网IP地址及多个用于分发VM的存储帐号:

  8. 打开虚拟机扩展集,,查看当前实例,能够看到当前有2个实例:

9 .点击负载均衡器,得到公网的IP地址或者DNS,在浏览器中打开,能够看到当前链接的是001 web服务器,该页面是一个demo页面,用于给虚拟机产生压力;新打开一个浏览器,链接负载均衡器,能够看到请求被分发到了002 web服务器:

10 . 在当前的测试页面上,输入500秒,做为压力测试时长,点击"DO work",那么PHP程序就会产生压力,占满CPU:

11. 大约等待5,6分钟之后,连续5分钟的CPU负载超过60%,咱们打开新portal的虚拟机扩展页面的实例页面,能够看到,按照咱们定义的VMSS自动扩展规则,虚拟机开始自动增长:

12. 使用不一样的浏览器测试网站,还会看到网站请求会被分发到新创建的服务器B,C,F等等,说明自动扩展集正在增长web服务器的时候,也会自动更新负载均衡器的设置,让前端客户的请求按照默认的哈希规则分发给后端的服务器,实现动态的负载均衡:

13. 压力测试完成,虚拟机扩展集的压力逐步低于50%,这个时候,整个虚拟机扩展集合会监测最近5分钟的负载状况,一旦知足收缩要求,就会执行cooldown的过程,逐步移除web服务器,也会从负载均衡器移除,下降成本:

经过这个测试能够看到,咱们能够方便的使用VMSS+ARM快速的构建自动可扩展的web集群,而且使用定制化脚本部署咱们的应用程序。