40.Azure更改VM可用性集

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了40.Azure更改VM可用性集相关的知识,希望对你有一定的参考价值。

非常强烈的建议大家在新建虚拟机时就想好是否创建可用性集(对于业务连续性要求高的建议使用可用性集),毕竟如下方法去更改VM可用性集还是太麻烦了,因此提前做好规划非常重要!!!

我们在创建VM时如果要考虑到该虚拟机要确保在Azure平台计划或非计划的维护期间,至少有一台虚拟机可用,也就是俗称的让该虚拟机高可用。那么就一定要创建可用性集,但门户上也写出了在创建后不能更改。

技术分享图片

首选需要大家注意一点就是可用性集有一个特点:

在一个可用性集的虚拟机采用的是托管磁盘,那么后面新建的虚拟机加入到这个可用性集的磁盘是否必须是托管磁盘。简单说就是同一个可用性集的所有虚拟机是必须是同一种磁盘类型,要么都是托管磁盘,要么都是非托管磁盘,不能并存2种磁盘的虚拟机在同一个可用性集里。

查看您的可用性集是属于只能放托管磁盘还是非托管磁盘的虚拟机可以查看该可用性集的属性,如果“已管理”——“是”表示为只能存放托管磁盘的虚拟机;“否”表示为只能存放非托管磁盘的虚拟机。

技术分享图片

在单独创建可用性集的时候也可以定义该可用性集是存放托管磁盘的虚拟机还是非托管磁盘的虚拟机

技术分享图片

那如果我们创建好的VM后期想要更改可用性集怎么办呢?

那必须将该虚拟机删除但保留该虚拟机的磁盘,然后使用这个保留下虚拟机磁盘重新创建虚拟机时指定可用性集。

在这里我准备了2台VM都是托管磁盘的虚拟机,一台是LinuxWeb01,创建时该虚拟机的可用性集是WEBAVSET

技术分享图片

一台是LinuxWeb02,创建时没有创建或添加到现在的任何可用性集

技术分享图片

这2台都是提供相同的WEB服务

技术分享图片

技术分享图片

接下来我希望把LinuxWeb02添加到可用性集WEBAVSET里,接下来会使用Azure Powershell,先登陆您的Azure账号,国内版登陆执行Login-AzureRmAccount -EnvironmentName AzureChinaCloud;国际版登陆执行Login-AzureRmAccount;关于登陆可以看我之前写的《PowerShell连接Azure(国内&国际)》

技术分享图片

可以查看所有VM的信息

Get-AzureRmVM

技术分享图片

以及查看某一个VM的详细信息

Get-AzureRmVM -ResourceGroupName "ServersResourceGroup" -Name "LinuxWeb01"

技术分享图片

查询现有指定可用性集的详细信息

Get-AzureRmAvailabilitySet -ResourceGroupName "ServersResourceGroup" -Name "WEBAVSET"

技术分享图片

  1. 大概的步骤是定义要修改VM的信息:
    • VM名称
    • VM的大小
    • 主要网络接口和可选的网络接口(如果在 VM 上存在)
    • OS 磁盘配置文件
    • 每个数据磁盘的磁盘配置文件
    • 已安装VM扩展
  2. 定义完VM的信息后,接下来删除VM但不删除任何磁盘或网络接口
  3. 接着要么创建可用性集(如果尚不存在)要么使用现有可用性集重新创建VM

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

如果您的虚拟机是托管磁盘,那么是可以直接按照如下步骤来操作:

定义要修改VM的信息,首先是VM名称

$vm = Get-AzureRmVM -ResourceGroupName ServersResourceGroup -Name LinuxWeb02

$vm.Name

接下来是VM的大小

$vm.HardwareProfile.VmSize

主要网络接口和可选的网络接口(如果在 VM 上存在)

$vm.NetworkProfile.NetworkInterfaces[0].Id

OS 磁盘配置文件

$vm.StorageProfile.OsDisk.OsType

$vm.StorageProfile.OsDisk.Name

$vm.StorageProfile.OsDisk.Vhd.Uri

技术分享图片

每个数据磁盘的磁盘配置文件

$vm.StorageProfile.DataDisks[<index>].Lun

$vm.StorageProfile.DataDisks[<index>].Vhd.Uri

如果要获取数据磁盘的配置文件可以执行

Get-AzureRmVM -ResourceGroupName "ServersResourceGroup" -Name "LinuxWeb02"

技术分享图片

所以数据磁盘的配置文件我这里是:

$vm.StorageProfile.DataDisks.Lun

$vm.StorageProfile.DataDisks.Vhd.Uri

已安装VM扩展

$vm.Extensions

技术分享图片

定义完VM的信息后,接下来删除VM但不删除任何磁盘或网络接口

Remove-AzureRmVM -ResourceGroupName ServersResourceGroup -Name LinuxWeb02

技术分享图片

可以看到Linuxweb02在Azure上剩下这些资源,如果您不想用到之前剩下的这些网卡,公网IP以及NSG的话那么可以删除掉这些,后面新建

技术分享图片

下面是2选1的步骤:

  • 创建可用性集(如果尚不存在)

New-AzureRmAvailabilitySet -ResourceGroupName ServersResourceGroup -Name <availabilitySetName> -Location "eastasia"

  • 使用现有可用性集重新创建 VM

通过门户选择OSDisk磁盘创建新的VM即可

技术分享图片

剩下的就是按照图形化基于该磁盘创建虚拟机了,创建时选择现有可用性集即可

技术分享图片

创建完成后将数据磁盘附加的新建的这台VM上即可,后面也可以为这台新建的VM指定监视存储帐户。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

如果您的虚拟机是非托管磁盘,把之前的托管磁盘LinuxWeb01和LinuxWeb02虚拟机删除掉,把可用性集WEBAVSET也删除掉,重新准备同样的2台非托管磁盘的虚拟机LinuxWeb01和LinuxWeb02,LinuxWeb01在新建的用性集WEBAVSET里,LinuxWeb02没有在任何可用性集里。

技术分享图片

先把LinuxWeb02关机停止

那么执行如下脚本即可完成删除虚拟机保留磁盘,从该磁盘创建指定可用性集的虚拟机即可

定义需要收集的信息成为变量、删除原始VM,并在新可用性集中重新创建VM

#设置变量

#定义资源组

$rg = "ServersResourceGroup"

#指定需要更改可用性集的虚拟机名称

$vmName = "Linuxweb02"

#指定可用性集名称

$newAvailSetName = "WEBAVSET"

#定义输出原始虚拟机详细信息的文件位置,这个temp目录必须提前创建好

$outFile = "C:\temp\outfile.txt"

#Get VM Details

$OriginalVM = get-azurermvm -ResourceGroupName $rg -Name $vmName

#输出虚拟机详细信息到文件

"VM Name: " | Out-File -FilePath $outFile

$OriginalVM.Name | Out-File -FilePath $outFile -Append

"Extensions: " | Out-File -FilePath $outFile -Append

$OriginalVM.Extensions | Out-File -FilePath $outFile -Append

"VMSize: " | Out-File -FilePath $outFile -Append

$OriginalVM.HardwareProfile.VmSize | Out-File -FilePath $outFile -Append

"NIC: " | Out-File -FilePath $outFile -Append

$OriginalVM.NetworkProfile.NetworkInterfaces[0].Id | Out-File -FilePath $outFile -Append

"OSType: " | Out-File -FilePath $outFile -Append

$OriginalVM.StorageProfile.OsDisk.OsType | Out-File -FilePath $outFile -Append

"OS Disk: " | Out-File -FilePath $outFile -Append

$OriginalVM.StorageProfile.OsDisk.Vhd.Uri | Out-File -FilePath $outFile -Append

if ($OriginalVM.StorageProfile.DataDisks) {

"Data Disk(s): " | Out-File -FilePath $outFile -Append

$OriginalVM.StorageProfile.DataDisks | Out-File -FilePath $outFile -Append

}

#删除原始虚拟机

Remove-AzureRmVM -ResourceGroupName $rg -Name $vmName

#创建新的可用性集,如果它不存在

$availSet = Get-AzureRmAvailabilitySet -ResourceGroupName $rg -Name $newAvailSetName -ErrorAction Ignore

if (-Not $availSet) {

$availset = New-AzureRmAvailabilitySet -ResourceGroupName $rg -Name $newAvailSetName -Location $OriginalVM.Location

}

#为替换虚拟机创建基本配置

$newVM = New-AzureRmVMConfig -VMName $OriginalVM.Name -VMSize $OriginalVM.HardwareProfile.VmSize -AvailabilitySetId $availSet.Id

Set-AzureRmVMOSDisk -VM $NewVM -VhdUri $OriginalVM.StorageProfile.OsDisk.Vhd.Uri -Name $OriginalVM.Name -CreateOption Attach -Linux

#添加数据磁盘

foreach ($disk in $OriginalVM.StorageProfile.DataDisks ) {

Add-AzureRmVMDataDisk -VM $newVM -Name $disk.Name -VhdUri $disk.Vhd.Uri -Caching $disk.Caching -Lun $disk.Lun -CreateOption Attach -DiskSizeInGB $disk.DiskSizeGB

}

#添加网卡

foreach ($nic in $OriginalVM.NetworkProfile.NetworkInterfaces) {

Add-AzureRmVMNetworkInterface -VM $NewVM -Id $nic.Id

}

#创建虚拟机

New-AzureRmVM -ResourceGroupName $rg -Location $OriginalVM.Location -VM $NewVM -DisableBginfoExtension

技术分享图片

技术分享图片

技术分享图片

这样就搞定了,看看LinuxWeb02已经加入到可用性集WEBAVSET里了

技术分享图片

LinuxWeb02的数据磁盘也会自动添加好

技术分享图片

可用性集里就有LinuxWeb01和LinuxWeb02两台虚拟机了

技术分享图片

唯一需要自己动手修改的就是诊断存储帐户

技术分享图片

业务一切正常

技术分享图片

技术分享图片

以上是关于40.Azure更改VM可用性集的主要内容,如果未能解决你的问题,请参考以下文章

如何使用可用性集配置两个不同区域中的 VM 并安装 Active Directory 域服务

AzureSLB 规则策略

Autodesk Forge - 文档管理“描述”和“集”信息可用性

一键将Web应用发布到云-Azure Web App

MongoDB复制集

MongoDB复制集(实现选举复制故障切换升级oplog大小认证复制)