VMSS上用Managed Disk和Data Disk进行自动扩展(1)

虚拟机自动扩展集(VMSS)是Azure上一个非常强大的功能,在我之前的系列文档中已经做了详细的介绍,在此就不赘述了;我同时也提到,在使用Azure传统存储账号的时候,也存在诸多限制,比如你需要计算每个存储账号下虚拟机的数量以避免IOPS超过性能限制,需要考虑扩展集中虚拟机数量限制,自定义镜像的限制等等:

在用户进行大规模扩展的设计和使用中,使用传统存储账号非常不方便,所以我们在生产环境下,推荐用户使用在中国区新上线的托管磁盘(managed disk)。托管磁盘是将虚拟机的磁盘管理集中交给后台去做管理,用户不需要关心磁盘的存储, IOPS限制,扩展等琐碎的细节,只需要指定类型,比如高级磁盘或者普通磁盘,剩下的事情交给Azure后台服务去处理,使用托管磁盘可以让你在一个订阅中最大创建10000个磁盘,几千个虚拟机满足大部分扩展性应用的。

另外一个VMSS的限制是不能使用数据磁盘,但有些应用设计上在做扩展的时候,需要数据磁盘进行数据存储,目前在新版本的VMSS中已经支持Data Disk。

假如你有以下相对来讲比较复杂的客户需求,你该如何实现?

  1. 虚拟机按照CPU的负载自动扩展收缩
  2. 每个虚拟机有两块数据磁盘,并格式化,挂载,可用
  3. 可以快速的扩展到100台虚拟机
  4. 快速全自动化部署
  5. 可以部署在中国区的Azure上

这个过程相对来说比较复杂,本文讨论如何基于传统存储账号的VMSS ARM模板进行修改,使用磁盘脚本,Azure CLI 2.0进行基于管理磁盘和数据磁盘的VMSS大规模部署。

用于本文的之前介绍的我的Linux VMSS Autoscale 的模板地址如下:

https://github.com/kingliantop/azurelabs/tree/master/AzureChinaARMTemplate/VMSS-Linux-Autoscale

基于该模板,我们需要做一些修改将使用传统存储账号的VMSS转换为使用Managed Disk和数据磁盘的VMSS 模板,然后再创建扩展集合。

  1. 删除掉无用的存储变量(variables)

"storageAccountType": "Standard_LRS",

"newStorageAccountSuffix": "[concat(variables(‘namingInfix‘), ‘sa‘)]",

"uniqueStringArray": [

"[concat(uniqueString(concat(resourceGroup().id, variables(‘newStorageAccountSuffix‘), ‘0‘)))]",

"[concat(uniqueString(concat(resourceGroup().id, variables(‘newStorageAccountSuffix‘), ‘1‘)))]",

"[concat(uniqueString(concat(resourceGroup().id, variables(‘newStorageAccountSuffix‘), ‘2‘)))]",

"[concat(uniqueString(concat(resourceGroup().id, variables(‘newStorageAccountSuffix‘), ‘3‘)))]",

"[concat(uniqueString(concat(resourceGroup().id, variables(‘newStorageAccountSuffix‘), ‘4‘)))]"

],

"vhdContainerName": "[concat(variables(‘namingInfix‘), ‘vhd‘)]",

"osDiskName": "[concat(variables(‘namingInfix‘), ‘osdisk‘)]",

"saCount": "[length(variables(‘uniqueStringArray‘))]",

  1. VMSS上支持Managed Disk是在ARM Compute资源管理器的API version 2016-04-30-preview以后才支持的,我们需要确保中国的Azure上面API的版本是可用的,首先安装Azure CLI 2.0,登陆中国区Azure:

  2. 检查中国区Compute provider的API版本号:

    az provider show --namespace Microsoft.Compute

    可以看到虚拟机扩展集合和虚拟机都支持"2016-04-30-preview","2016-08-30","2017-03-30"等多个版本号,而Insight provider的Autoscalesetting最高支持"2015-04-01"这个版本:

  3. 然后我们来修改API的version,之前的模板API version比较老,我建议修改成相对最新的版本,我修改的版本如下:

  4. 需要注意的是,我们虽然对于所有虚拟机的磁盘不再需要传统存储账号进行管理,但对于存储LinuxDiag的诊断信息,我们依然需要Azure Storage Table来进行存储,因此上resource上的storage部分的定义只需要定义diagnostic storage account即可:

  5. 删除VMSS中虚拟机扩展集磁盘部分对于传统存储的依赖关系:

    "type": "Microsoft.Compute/virtualMachineScaleSets",

    "name": "[variables(‘namingInfix‘)]",

    "location": "[resourceGroup().location]",

    "apiVersion": "[variables(‘computeApiVersion‘)]",

    "dependsOn": [

    "[concat(‘Microsoft.Storage/storageAccounts/‘, variables(‘uniqueStringArray‘)[0], variables(‘newStorageAccountSuffix‘))]",

    "[concat(‘Microsoft.Storage/storageAccounts/‘, variables(‘uniqueStringArray‘)[1], variables(‘newStorageAccountSuffix‘))]",

    "[concat(‘Microsoft.Storage/storageAccounts/‘, variables(‘uniqueStringArray‘)[2], variables(‘newStorageAccountSuffix‘))]",

    "[concat(‘Microsoft.Storage/storageAccounts/‘, variables(‘uniqueStringArray‘)[3], variables(‘newStorageAccountSuffix‘))]",

    "[concat(‘Microsoft.Storage/storageAccounts/‘, variables(‘uniqueStringArray‘)[4], variables(‘newStorageAccountSuffix‘))]",

    "[concat(‘Microsoft.Network/loadBalancers/‘, variables(‘loadBalancerName‘))]",

    "[concat(‘Microsoft.Network/virtualNetworks/‘, variables(‘virtualNetworkName‘))]"

  6. 同时删除OSDisk中有关Container的配置,这部分都会由Managed Disk来管理:

    "osDisk": {

    "vhdContainers": [

    "[concat(‘https://‘, variables(‘uniqueStringArray‘)[0], variables(‘newStorageAccountSuffix‘), ‘.blob.core.chinacloudapi.cn/‘, variables(‘vhdContainerName‘))]",

    "[concat(‘https://‘, variables(‘uniqueStringArray‘)[1], variables(‘newStorageAccountSuffix‘), ‘.blob.core.chinacloudapi.cn/‘, variables(‘vhdContainerName‘))]",

    "[concat(‘https://‘, variables(‘uniqueStringArray‘)[2], variables(‘newStorageAccountSuffix‘), ‘.blob.core.chinacloudapi.cn/‘, variables(‘vhdContainerName‘))]",

    "[concat(‘https://‘, variables(‘uniqueStringArray‘)[3], variables(‘newStorageAccountSuffix‘), ‘.blob.core.chinacloudapi.cn/‘, variables(‘vhdContainerName‘))]",

    "[concat(‘https://‘, variables(‘uniqueStringArray‘)[4], variables(‘newStorageAccountSuffix‘), ‘.blob.core.chinacloudapi.cn/‘, variables(‘vhdContainerName‘))]"

    ],

    "name": "[variables(‘osDiskName‘)]",

    "caching": "ReadOnly",

    "createOption": "FromImage"

    },

  7. 为扩展及中的虚拟机添加两个书磁盘,每个1023GB,注意在一个虚拟机中lun号必须唯一:

  8. 修改模板的最后一步,也是很重要的一步,就是你在加载了数据磁盘给Linux虚拟机以后,其实是无法直接使用的, 你需要分区,格式化,挂载才能使用,这部分实际是需要客户自己写代码和脚本完成的,不用担心,我已经写了一个脚本,来自动化完成这个工作,脚本已经放在Github上了,需要在模板中添加定制化脚本运行部分:

时间: 2024-10-10 12:42:24

VMSS上用Managed Disk和Data Disk进行自动扩展(1)的相关文章

VMSS上用Managed Disk和Data Disk进行自动扩展(2)

10. 到目前为止,基本的模板配置已经完成,接下来我们使用Azure CLI 2.0来创建虚拟机自动扩展集合: az group create --name linuxvmssmanaged --location 'China North' az group deployment create --name mylinuxdeployment --resource-group linuxvmssmanaged --template-file vmsslinuxmanaged.json --par

oracle vote disk和ocr disk备份与恢复

1.ocr磁盘简介 健忘问题是由于每个节点都有配置信息的拷贝,修改节点的配置信息不同步引起的.Oracle采用的解决方法就是把这个配置文件放在共享的存储上, 这个文件就是 OCR Disk.整个OCR的信息是树形结构的,主要分为3大分支.分别是SYSTEM,DATABASE和CRS,每个人分支都有许多小分支,只能由root用户修改.ocr每4个小时备份一次,只保留5个文件,当天保留3个文件,上个星期保留一个,上个月也保留一个. OCR DISK内容包含: 1).节点信息 2).数据库实例,节点,

如何完全备份android系统上的system分区和data分区

安卓的系统备份在很多场合下可能会用到,下面这个python的脚本,可以用来备份整个的data分区:将所有data分区的文件和目录打包到data.zip,并生成recovery的专用edify脚本到update-script.sh.当然,简单的修改下脚本的备份路径就可以备份system分区了,如果再加上几行代码,就可以备份boot,recovery,uboot等等分区,不过这要根据不同的分区来写不同的备份代码: backup.py import sys import os from os.path

Not enough free disk space on disk '/boot'(转载)

转自:http://m.oschina.net/blog/277224 # 解决 出现此情况是因为你的boot分区是单独分区的,像我只给了100M,以前装ubuntu时没有出现,所以当出现这个提示时,很纳闷,发现了答案. 为什么boot分区会满? 主要是存放了一些老的linux image镜像文件. SO, 我们想查看我们boot分区有那些linux image,使用命令: dpkg -l | grep linux-image 我们发现有 linux-image-3.13.0-24-generi

CentOS7 mysql 连接不上 :[ERROR] InnoDB: The innodb_system data file 'ibdata1' must be writable

mysql一直连接不上我的数据库,输入密码也进不去mysql. 报连接不上服务的错误. Can 't connect to local MySQL server through socket '/tmp/mysql.sock '(2) 我就查看了一下mysql的日志 cat /var/log/mysqld.log 看到了文件没有权限的错误 可以修改下该文件的读写权限或目录下所有文件的权限 解决方案: 这就可以进入mysql了 CentOS7 mysql 连接不上 :[ERROR] InnoDB:

使用ARM模板部署自动扩展的Linux VMSS(1)

在Azure之前的ASM版本或者经典模式中,用户使用Azure Website,Azure Cloud Service等PAAS服务,可以实现一定程度上的自动扩展(auto scaling),但有着诸多限制和缺陷,例如只能在PAAS平台上使用,扩展周期较长,无法支持定制化镜像,无法支持Linux等等,那么在Azure上有没有一种服务,可以给予我们增强的PAAS的自动扩展能力,同时让用户能够像使用IAAS虚拟机一样有最大限度的控制能力昵? Azure新的资源管理器(ARM)模式中推出了一项全新的服

深入理解Azure自动扩展集VMSS(2)

VMSS中Auto Scale基本原理及诊断 在前面的介绍中,我们看到通过定义规则可以实现虚拟机扩展集的auto scale,那么在后台执行上VMSS的扩展依赖于哪些组件,出现问题(比如自动扩展没有发生的时候),我们在拨打400之前,如何快速的检查是否是配置问题? 本文简单介绍一下VMSS下auto scale的原理,以及出现问题如何快速的检查问题.下图展示了Azure的计算资源监控和数据收集机制,从数据源来讲,Azure的监控数据可以来自于应用程序,诊断日志,系统.自定义的指标数据,也包括审计

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

在很多的商业场景中,用户的访问,峰值时间都是很难预测的,尤其是做一些市场推广活动和促销的时候,到底部署什么规模的web集群合适,这一直是个问题,部署过量会造成高成本和资源不必要的浪费,部署过少,如果到达峰值,来不及部署,容易造成用户无法访问,用户体验差,交易损失等等,当然更不用提运维人员时刻神经紧绷的实时监测压力情况,以便及时采取措施-- 在云计算技术日新月异的今天,这个场景是非常不和谐的:)VMSS作为Azure新的计算方式,提供了按照压力负载自动扩展收缩,并且同时支持Windows和Linu

使用ARM模板部署自动扩展的Linux VMSS(2)

12.准备完了模板文件,我们使用Powershell来创建VMSS for Linux的自动扩展集合,首先登陆到Azure中国的ARM账号: Login-AzureRmAccount -EnvironmentName AzureChinaCloud 13. 如果你有多个订阅的话,选择你要创建VMSS的正确订阅: Select-AzureRmSubscription -SubscriptionId XXXXXXXXXX 14. 如果你之前没有创建过资源组,创建一个,所有自动扩展集的资源都放在这个资