利用ARM批量自动化创建SSD多磁盘RAID0虚拟机
在实际生产环境大规模部署的时候,有时需要能批量创建多台Linux虚拟机,并且该虚拟机带多个硬盘,一些数据库环境,比如MySQL和MongoDB等,会需要超过10000de IOPS, 那么创建的虚拟机,最好可以自动化创建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,无法工作,我做了一些修改和优化,详细说明请见脚本描述:
那么如何使用这些模板来快速的创建虚拟机呢?
修改模板参数文件
- 首先要根据你的需求,做一个基本的参数修改,比如你创建的Linux虚拟机的用户名密码,需要创建多少台,需要创建什么版本的等等,请打开parameters.json文件,里面有四个参数,做一些相应修改并保存,关于参数:"virtualMachinesNamePrefix",因为创建多台虚拟机,所以这个名字会按次序增加,比如你设置这个参数为mongodb,那么虚拟机名称就会为mongodb-1,mongodb-2等以此类推
- 如果你想修改其他一些参数,比如OS版本号,命名规则等等,可以打开template.json进行修改,并保存
Linux和Mac用户
- 下载模板到本地目录。
- 方法一:我已经做了一个简单的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
图形化界面一键部署
如果你非常不喜欢脚本创建:)可以打开我之前的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上提交问题,我可以尽可能的做些修改或者优化。
利用ARM批量自动化创建SSD多磁盘RAID0虚拟机的更多相关文章
- 谈FME批量自动化数据转换方法
FME作为转换神器,支持几百种格式的互转,实现互操作化.从fme.exe执行方式入手,讨论Command命令式执行模板(.fmw/.fmwt)和脚本(.tcl/.py)实现自动化批量转换. 1.fme ...
- Ansible批量自动化管理工具(二)
Ansible批量自动化管理工具(二) 链接:https://pan.baidu.com/s/1A3Iq3gGkGS27L_Gt37_I0g 提取码:ncy2 复制这段内容后打开百度网盘手机App,操 ...
- 利用expect批量修改Linux服务器密码
一个执着于技术的公众号 背景 修改Linux系统密码,执行passwd即可更改密码.可如果有成千上百台服务器呢,通过ssh的方式逐一进行修改,对我们来说,工作量是非常大,且效率非常低下.因此采用批量修 ...
- django基础之day08,利用bulk_create 批量插入成千上万条数据
bulk_create批量插入数据 models.py文件 class Book(models.Model): title=models.CharField(max_length=32) urls.p ...
- 读取多张MNIST图片与利用BaseEstimator基类创建分类器
读取多张MNIST图片 在读取多张MNIST图片之前,我们先来看下读取单张图片如何实现 每张数字图片大小都为28 * 28的,需要将数据reshape成28 * 28的,采用最近邻插值,如下 def ...
- 如何利用 RPA 实现自动化获客?
大家好,我是二哥.前高级技术专家 & 增长黑客,现一枚爱折腾的小小创业者,专注于 RPA & SaaS 软件这块.这次给大家带来如何利用 RPA 实现自动化获客 一.RPA 是什么?难 ...
- 艾伦 Visual Studio 批量自动化代码操作工具-VS插件发布
艾伦 Visual Studio 批量自动化代码操作工具 以下简称--艾伦工具箱. 艾伦工具箱是一个多文件批量处理插件,目的是为了广大开发者提高开发效率,减少项目代码规范化审计,缩短开发者的项目开发周 ...
- Azure ARM (4) 开始创建ARM Resource Group并创建存储账户
<Windows Azure Platform 系列文章目录> 好了,接下来我们开始创建Azure Resource Group. 1.我们先登录Azure New Portal,地址是: ...
- 利用sql批量删除表,存储过程
利用sql批量删除表,存储过程. 最近用godaddy的空间,由于系统里面的表多,一个个的删除很麻烦,就网上搜集了一下解决方法. 给大家分享一下: 1.批量删除存储过程 declare @procNa ...
随机推荐
- NOI2010 航空管制
http://www.lydsy.com/JudgeOnline/problem.php?id=2535 贪心. 对于第1个问,我们先建立拓扑图,对于如果a必须在b前起飞,那么连有向边b->a, ...
- Java & Android Interviews #1
1.GC是什么? 为什么要有GC?GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供 ...
- BZOJ 3040 最短路 (堆优化dijkstra)
这题不是裸的最短路么?但是一看数据范围就傻了.点数10^6,边数10^7.这个spfa就别想了(本来spfa就是相当不靠谱的玩意),看来是要用堆优化dijkstra了.但是,平时写dijkstra时为 ...
- css——基础样式总结
颜色和单位的使用 颜色 用颜色的名字表示颜色,比如:red 用16进制表示演示 比如:#FF0000 用rgb数值表示颜色,rgb(红,绿,蓝),每个值都在0-255之间一般都用16进制表示颜色 单位 ...
- 验证合法的url
package test; import java.util.regex.Matcher;import java.util.regex.Pattern; public class Test { pub ...
- lesson3:java的锁机制原理和分析
jdk1.5之前,我们对代码加锁(实际是对象加锁),都是采用Synchronized关键字来处理,jdk1.5及以后的版本中,并发编程大师Doug Lea在concurrrent包中提供了Lock机制 ...
- 【爬虫问题】爬取tv.sohu.com的页面, 提取视频相关信息
尝试解决下面的问题 问题: 爬取tv.sohu.com的页面, 提取视频相关信息,不可用爬虫框架完成 何为视频i关信息?属性有哪些? 需求: 做到最大可能的页面覆盖率 *使用httpClient 模拟 ...
- [转]Android Volley完全解析(四),带你从源码的角度理解Volley
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/17656437 经过前三篇文章的学习,Volley的用法我们已经掌握的差不多了,但是 ...
- Sublime Text2 按shift键选择不了的问题
记录下来,免得以后忘了: 今天在Sublime Text 2装了一个ThinkPHP插件之后.发现按shift键+鼠标左键选择不了内容了.原因是ThinkPHP里的热键与系统的有冲突了,须要设置例如以 ...
- [置顶] Linux协议栈代码阅读笔记(一)
Linux协议栈代码阅读笔记(一) (基于linux-2.6.21.7) (一)用户态通过诸如下面的C库函数访问协议栈服务 int socket(int domain, int type, int p ...