40.Azure更改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
查詢現有指定可用性集的詳細信息
Get-AzureRmAvailabilitySet -ResourceGroupName "ServersResourceGroup" -Name "WEBAVSET"
- 大概的步驟是定義要修改VM的信息:
- VM名稱
- VM的大小
- 主要網絡接口和可選的網絡接口(如果在 VM 上存在)
- OS 磁盤配置文件
- 每個數據磁盤的磁盤配置文件
- 已安裝VM擴展
- 定義完VM的信息後,接下來刪除VM但不刪除任何磁盤或網絡接口
- 接著要麽創建可用性集(如果尚不存在)要麽使用現有可用性集重新創建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可用性集