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

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

在本模板中,将会创建如下测试环境:

  1. 定义一个负载均衡器,负责转发前端的web请求给后端的web集群
  2. 使用VMSS创建一个web集群
  3. 使用客户定制化脚本,自动安装Apache web服务器,和PHP web应用
  4. 定义自动扩展集合的规则,根据虚拟机自动扩展集合中的CPU负载进行自动扩展或者收缩,虚拟机也会自动的在负载均衡器中自动添加或者删除
  5. 压力测试用具,可以使用LoadRunner,Apache AB等等,在本例中,使用PHP产生压力,达到CPU阈值要求
  6. 原始的ARM模版请参考Azure的quick start模版:

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集群,并且使用定制化脚本部署我们的应用程序。

使用ARM和VMSS创建自动扩展的web集群的更多相关文章

  1. suse 12 二进制部署 Kubernetets 1.19.7 - 第01章 - 创建CA证书和kubectl集群管理命令

    文章目录 1.kubernetes集群部署 1.0.创建CA证书和秘钥 1.0.0.安装cfssl工具 1.0.1.创建根证书 1.0.2.创建证书签名请求文件 1.0.3.生成CA证书和秘钥 1.0 ...

  2. 使用Docker构建持续集成与自动部署的Docker集群

    为什么使用Docker " 从我个人使用的角度讲的话  部署来的更方便 只要构建过一次环境 推送到镜像仓库 迁移起来也是分分钟的事情 虚拟化让集群的管理和控制部署都更方便 hub.docke ...

  3. docker镜像创建redis5.0.3容器集群

    拉取redis5.0.3镜像 # docker pull daocloud.io/library/redis:5.0.3 [root@localhost ~]# docker pull daoclou ...

  4. 使用ARM模板在Azure中国大规模部署DCOS集群

    容器技术是目前非常流行的技术,尤其是在以Docker作为容器引擎的推动下,让容器的轻量级,可移植,自包含,隔离性等的上了一个新的台阶,目前谈及Dev/Ops,CI/CD很少能够绕过Docker的. A ...

  5. AWS上创建EKS(K8S)集群

    1.注意事项及准备工作 EKS分为EKS Master和EKS Node两种角色;EKS Master为全托管,EKS Node为CloudFormation创建 EKS Node若在NAT网络里,一 ...

  6. SpringCloud02 Eureka知识点、Eureka服务端和客户端的创建、Eureka服务端集群、Eureka客户端向集群的Eureka服务端注册

    1 Eureka知识点 按照功能划分: Eureka由Eureka服务端和Eureka客户端组成 按照角色划分: Eureka由Eureka Server.Service Provider.Servi ...

  7. 使用Patroni和HAProxy创建高可用的PostgreSQL集群

    操作系统:CentOS Linux release 7.6.1810 (Core) node1:192.168.216.130 master node2:192.168.216.132 slave n ...

  8. kubernetes之二 使用minikube创建单节点k8s本地集群

    使用Minikube来运行kubernetes集群是最简单.快捷的途径.Minikube是一个构建单节点集群的工具,对于测试Kubernetes和本地开发应用都非常有用.官方安装minikube教程请 ...

  9. kubernetes 创建用户配置文件来访问集群API

    创建一个账号 kubectl create serviceaccount def-ns-admin 绑定集群权限 kubectl create rolebinding def-ns-admin --c ...

随机推荐

  1. Scala学习笔记--文件IO

    补充: http://blog.csdn.net/lyrebing/article/details/20369445 http://developer.51cto.com/art/200907/134 ...

  2. SSH三者作用

    Struts在项目中的作用 Struts 在项目主要起控制作用,只要用于web层(即视图层和控制层)Struts本身是使用典型的MVC结构实现的,项目中使用了struts之后就等于项目也是一个MVC结 ...

  3. Swift 可选链-备

    在Swift程序表达式中会看到问号(?)和感叹号(!),它们代表什么含义呢?这些符号都与可选类型和可选链相关,下面来看看可选链. 可选链: 类图: 它们之间是典型的关联关系类图.这些类一般都是实体类, ...

  4. 目测ZIP的压缩率

    对word文件,能压到25% 对PDF文件,却只有90% 对压缩文件本身再压缩,几乎没有效果. 考虑到用户一般情况下只有正常的文档,取中位值66%是比较正常的情况,特别是在预估原文件大小的时候.

  5. BZOJ1628: [Usaco2007 Demo]City skyline

    1628: [Usaco2007 Demo]City skyline Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 256  Solved: 210[Su ...

  6. C语言中所有变量和常量所使用的内存总结

    (1)相同点:三种获取内存的方法,都可以给程序提供可用内存,都可以用来定义变量给程序用.(2)不同点:栈内存对应C中的普通局部变量(别的变量还用不了栈,而且栈是自动的,由编译器和运行时环境共同来提供服 ...

  7. Servlet实现文件的下载

    (1)项目的主文件夹例如以下:(演示出image和servlet的位置所在) watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGxnZW4xNTczODc= ...

  8. hdu 4666 Hyperspace

    曼哈顿距离,两个点设为(x1,y1),(x2,y2),其距离为|x1-x2|+|y1-y2| #include <cstdio> #include <set> #include ...

  9. VMware vSphere 5.5的12个更新亮点(3)

    端口镜像 有时有必要捕捉网络中的数据包来追踪问题.最新版本的vSphere包括一个增强版的开源数据包分析器tcpdump和一些镜像端口的选项以捕捉各种场所的流量.您可以捕获虚拟网卡,虚拟交换机,以及主 ...

  10. 利用扩展双屏技术及Chrome浏览器,高速剖析优秀网页Div及CSS构成,并高效实现原型创作

    作为一个Web前台设计人员,应该充分利用可利用的硬件条件及专业的软件工具,迅速进入到高效氛围其中.实践中,我们能够利用扩展桌面双屏技术及Chrome浏览器高速剖析优秀网页Div及CSS构成,并高速实现 ...