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

在实际生产环境大规模部署的时候,有时需要能批量创建多台Linux虚拟机,并且该虚拟机带多个硬盘,一些数据库环境,比如MySQL和MongoDB等,会需要超过10000de IOPS, 那么创建的虚拟机,最好可以自动化创建RAID 0磁盘阵列,以满足高IOPS的要求,另外Availability Set,NSG,public IP,DNS等等当然是必不可少的。

对于这样一个复杂的需求,有多种选项可以考虑,但各有优劣,有些由于限制,可能无法工作:

  1. 使用VMSS,可以快速扩展,自动收缩,但目前并不支持数据盘,所以并不是一个option
  2. 使用Powershell/Azure CLI来写脚本,在ASM的时代,这可能是唯一的选项,但定义实现混杂在一起,难于维护,在ASM下性能等方面有很大的问题,在ARM下不推荐
  3. ARM模式下,ARM模板负责定义各个组件,使用Azure CLI或者Powershell负责创建,这个方式也是ARM模式下推荐的方式
  4. 对于Linux下自动化的RAID 0创建,毫无疑问需要shell脚本,然后利用Azure VM的extension即可

既然基本的策略确定下来了,那我们就先使用ARM模板来创建虚拟机,在QuickStart上并没有现成的模板可以直接使用去创建多个虚拟机,多个磁盘,并且通过简单的参数文件就可以指定,所以我做了一个模板,支持以下功能:

  1. 支持通过参数指定多个虚拟机创建
  2. 支持Public IP,每个虚拟机一个
  3. 支持NSG,默认开放22端口给ssh
  4. 支持availability Set,可以指定名称
  5. 支持多个磁盘,默认是添加两个P30的磁盘,你可以简单修改,增加或者减少
  6. 支持自定义脚本,自动化创建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

那么如何使用这些模板来快速的创建虚拟机呢?

修改模板参数文件

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

Linux和Mac用户

  1. 安装Azure CLI,如果不知道如何安装,请参考掘文:

    http://cloudapps.blog.51cto.com/3136598/1842181

  2. 下载模板到本地目录。
  3. 方法一:我已经做了一个简单的deploy.sh用来在Linux和Mac下部署,可以直接使用
  4. 方法二:直接执行命令

    #登陆到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用户

  1. 安装Azure Powershell
  2. 下载模板到本地
  3. 方法一:直接使用deploy.ps1
  4. 方法二:直接执行命令

    #登陆到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的配置情况:

  1. 可以看到两块磁盘已经被格式化,并被挂载到了/data

  2. 检查一些fstab下的配置,看看当前mount的自动化配置已经被自动添加:

    可以看到,通过使用ARM模板,可以快速的创建复杂配置的虚拟机,大家可以用用看,如果有任何问题,可以到Github上提交问题,我可以尽可能的做些修改或者优化。

时间: 2024-12-24 10:36:23

利用ARM批量自动化创建SSD多磁盘RAID0虚拟机的相关文章

生产环境之CentOS-6.5下KVM利用kickstart批量安装操作系统

KVM 是 kernel-based Virtual Machine 的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中.它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少.KVM目前已成为学术界的主流VMM之一. KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术).是基于硬件的完全虚拟化.而Xen早期则是基于软件模拟的Para-Virtualization,新版本则是基于硬件支持的完全虚拟化.但Xen本

利用lambda函数自动创建EBS快照和删除快照

利用lambda函数自动创建EBS快照和删除快照 此文章参考了AWS中国区关于构建自动化EBS快照周期的官方文档,参考链接"https://amazonaws-china.com/cn/blogs/china/construct-ebs-life-circle-management/" 本文与之不同的是,本文没有使用dynamoDB服务,仅通过lambda完成了EBS的快照备份.当然,自动快照一定要搭配自动删除功能使用,否则快照容量越来越大,无形中增加了企业的IT成本. 使用阿里云和腾

vSphere ESXi如何将磁盘标记为SSD的磁盘

1.背景 在做VSAN实验时,至少需要一块SSD磁盘,作为读/写缓存.如果没有SSD盘,我们需要将普通的HDD盘,标记为SSD磁盘.需要修改参数. 2.步骤 第一步:查找需要修改为SSD的磁盘的ID:如下标红即为磁盘的ID [[email protected]:~] esxcli storage core device list mpx.vmhba1:C0:T1:L0 Display Name: Local VMware Disk (mpx.vmhba1:C0:T1:L0) Has Settab

shell脚本案例(五)利用nmap批量扫描存活主机

利用nmap批量扫描存活主机 知识储备:grep,nmap 一.安装nmap 1.安装编译环境 [[email protected] nmap-7.01]# yum install gcc g++ gcc-c++ -y 2.使用wget下载nmap [[email protected] nmap-7.01]# wget http://nmap.org/dist/nmap-7.01.tar.bz2 3.解压下载的安装包 [[email protected] nmap-7.01]# tar -vxf

读取多张MNIST图片与利用BaseEstimator基类创建分类器

读取多张MNIST图片 在读取多张MNIST图片之前,我们先来看下读取单张图片如何实现 每张数字图片大小都为28 * 28的,需要将数据reshape成28 * 28的,采用最近邻插值,如下 def plot_digit(data): img = data.reshape(28,28) plt.imshow(img,cmap=matplotlib.cm.binary,interpolation='nearest') plt.axis('off') import matplotlib.pyplot

利用Flare3D和Stage3D创建3D

Flare3D 是一款功能强大的引擎,它使得 Flash 中的 3D 内容管理变得更为简便. 它的设计宗旨是提供一个完美的开发工作流程,以便你能够获得事半功倍的效果. 本教程侧重讨论在 Flash 中创建 3D 游戏所需的 ActionScript 代码:但本范例项目不包括创建和导出游戏组件文件的过程. 在完成本教程之后,你将了解在Flash中开发一个完整 3D 游戏所需的基本概念. 在本范例中,你将使用 Stage3D 和 Flare3D 处理用于创建一个名称为 Yellow Planet 的

艾伦 Visual Studio 批量自动化代码操作工具-VS插件发布

艾伦 Visual Studio 批量自动化代码操作工具 以下简称--艾伦工具箱. 艾伦工具箱是一个多文件批量处理插件,目的是为了广大开发者提高开发效率,减少项目代码规范化审计,缩短开发者的项目开发周期. 名称:艾伦 Visual Studio 批量自动化代码操作工具. 亮点:批量操作. 功能:1,代码格式化:2,移除与重排Using. 可选:1,针对整个解决方案进行自动化操作:2,针对选中的当前项目进行自动化操作:3,针对指定的后缀名代码文件进行操作: 注意事项:默认支持*.cs.*.vb,可

利用Excel批量高速发送电子邮件

利用Excel批量高速发送电子邮件,分两步: 1. 准备待发送的数据: a.) 打开Excel,新建Book1.xlsx b.) 填入以下的内容, 第一列:接收人,第二列:邮件标题,第三列:正文,第四列:附件路径 注意:附件路径中能够有中文,可是不能有空格 这里你能够写很多其它内容,每一行作为一封邮件发出. 注意:邮件正文是黑白文本内容,不支持加粗.字体颜色等.(假设你须要支持彩色的邮件,后面将会给出解决的方法) 2. 编写宏发送邮件 a.) Alt + F11 打开宏编辑器,菜单中选:插入->

Linux inode满导致创建文件报磁盘空间不足

客户报不能挂载存储,系统异常.登陆系统,尝试手动mount分区,报失败.进入挂载点,尝试写入一个文件,报磁盘空间不足,首先怀疑是系统磁盘空间满: $ df Filesystem           1K-blocks      Used Available Use% Mounted on /dev/xvda 33030016 10407780 22622236 32% / tmpfs 368748 0 368748 0% /lib/init/rw varrun 368748 56 368692