hege 发表于 2017-7-1 08:55:25

利用ARM批量自动化创建SSD多磁盘RAID0虚拟机

  在实际生产环境大规模部署的时候,有时需要能批量创建多台Linux虚拟机,并且该虚拟机带多个硬盘,一些数据库环境,比如MySQL和MongoDB等,会需要超过10000deIOPS, 那么创建的虚拟机,最好可以自动化创建RAID 0磁盘阵列,以满足高IOPS的要求,另外Availability Set,NSG,public IP,DNS等等当然是必不可少的。
  对于这样一个复杂的需求,有多种选项可以考虑,但各有优劣,有些由于限制,可能无法工作:

[*]使用VMSS,可以快速扩展,自动收缩,但目前并不支持数据盘,所以并不是一个option
[*]使用Powershell/Azure CLI来写脚本,在ASM的时代,这可能是唯一的选项,但定义实现混杂在一起,难于维护,在ASM下性能等方面有很大的问题,在ARM下不推荐
[*]ARM模式下,ARM模板负责定义各个组件,使用Azure CLI或者Powershell负责创建,这个方式也是ARM模式下推荐的方式
[*]
对于Linux下自动化的RAID 0创建,毫无疑问需要shell脚本,然后利用Azure VM的extension即可
  既然基本的策略确定下来了,那我们就先使用ARM模板来创建虚拟机,在QuickStart上并没有现成的模板可以直接使用去创建多个虚拟机,多个磁盘,并且通过简单的参数文件就可以指定,所以我做了一个模板,支持以下功能:

[*]支持通过参数指定多个虚拟机创建
[*]支持Public IP,每个虚拟机一个
[*]支持NSG,默认开放22端口给ssh
[*]支持availability Set,可以指定名称
[*]支持多个磁盘,默认是添加两个P30的磁盘,你可以简单修改,增加或者减少
[*]支持自定义脚本,自动化创建RAID 0磁盘阵列
  完整的ARM模板我已经放在了Github下,如果需要可以下载使用:
  https://github.com/kingliantop/azurelabs/tree/master/AzureChinaARMTemplate/VM-multiple-datadisks-SSD
  在创建ARM模板的时候,如果你希望传入参数来决定创建多少个虚拟机,需要注意处理各个互斥的资源,比如nic,比如IP地址,因为这些资源一旦分配给第一台虚拟机,就不能再分配给第二台虚拟机了,否则就会报错:

  对于自动化创建RAID 0的脚本,原始脚本(vm-disk-utils-0.1.sh)是为Ubuntu设计的:
  https://github.com/Azure/azure-quickstart-templates/tree/master/shared_scripts/ubuntu
  我的测试环境是CentOS6.8,无法工作,我做了一些修改和优化,详细说明请见脚本描述:
  https://github.com/kingliantop/azurelabs/blob/master/AzureChinaARMTemplate/VM-multiple-datadisks-SSD/vm-disk-utils-0.2.sh
  那么如何使用这些模板来快速的创建虚拟机呢?
修改模板参数文件

[*]首先要根据你的需求,做一个基本的参数修改,比如你创建的Linux虚拟机的用户名密码,需要创建多少台,需要创建什么版本的等等,请打开parameters.json文件,里面有四个参数,做一些相应修改并保存,关于参数:"virtualMachinesNamePrefix",因为创建多台虚拟机,所以这个名字会按次序增加,比如你设置这个参数为mongodb,那么虚拟机名称就会为mongodb-1,mongodb-2等以此类推
[*]如果你想修改其他一些参数,比如OS版本号,命名规则等等,可以打开template.json进行修改,并保存
Linux和Mac用户

[*]
安装Azure CLI,如果不知道如何安装,请参考掘文:  http://cloudapps.blog.51cto.com/3136598/1842181
[*]下载模板到本地目录。
[*]方法一:我已经做了一个简单的deploy.sh用来在Linux和Mac下部署,可以直接使用
[*]
方法二:直接执行命令  #登陆到Azure账号
  azure login -u USERNAME -p PASSWORD -e AzureChinaCloud
  #创建资源组
  azure group create --name="stevenvmgroup" --location="China North"
  #利用模板创建多个虚拟机并自动化配置RAID 0
  azure group deployment create --name="mydcoschinadeploy" --resource-group="stevenacsdcosgp" --template-file=".\template.json" --parameters-file=".\parameters.json"
Windows用户

[*]安装Azure Powershell
[*]下载模板到本地
[*]方法一:直接使用deploy.ps1
[*]
方法二:直接执行命令  #登陆到Azure的中国账号
  Login-AzureRmAccount -EnvironmentName AzureChinaCloud
  #基本参数,部署名和资源名一样
  $VerbosePreference="Continue"
  $deployName="stevenwebscale"
  $RGName=$deployName
  $locName="China North"
  $templateFile= ".\template.json"
  $templateParameterFile= ".\parameters.json"
  New-AzureRmResourceGroup -Name $RGName -Location $locName -Force
  New-AzureRmResourceGroupDeployment -Name myvmdetestgroup -ResourceGroupName myvmdetestgroup -TemplateParameterFile $templateParameterFile -TemplateFile $templateFile
图形化界面一键部署
  如果你非常不喜欢脚本创建:)可以打开我之前的Github链接:
  https://github.com/kingliantop/azurelabs/tree/master/AzureChinaARMTemplate/VM-multiple-datadisks-SSD
  选择Deploy to Azure,即可直接一键部署到Azure中国账号:

  将会出现参数窗口,选择使用那个资源组,创建多少个虚拟机,那个版本,什么类型的虚拟机,然后确定。填充完参数,直接创建即可:

  按照实际测试,创建10台DS4虚拟机包含NSG,publicIP,NIC,vnet等,每台虚拟机挂载2个P30盘,并配置RAID 0,对磁盘进行格式化,大整个过程大约只需要4分28秒:

  可以看到10台虚拟机mysql-0到mysql-9全部成功创建:

  每台虚拟机上磁盘,网络等均成功创建:


  登陆到虚拟机,检查一下RAID 0的配置情况:

[*]
可以看到两块磁盘已经被格式化,并被挂载到了/data
[*]
检查一些fstab下的配置,看看当前mount的自动化配置已经被自动添加:
  可以看到,通过使用ARM模板,可以快速的创建复杂配置的虚拟机,大家可以用用看,如果有任何问题,可以到Github上提交问题,我可以尽可能的做些修改或者优化。
页: [1]
查看完整版本: 利用ARM批量自动化创建SSD多磁盘RAID0虚拟机