Hyper-V Server 2012開啟虛擬化-Live Migration
實時遷移
實時遷移是微軟向Windows Server 2012 Hyper-V添加的最重要的功能,通過實時遷移功能,在Hyper-V主機之間移動虛擬機(VM)則無需停機,正常維護Hyper-V主機時,可以將它托管的所有VM全部移走,等到維護結束后,再移回來,整個過程不會引起業(yè)務中斷。此外,利用實時遷移功能還可以更好地動態(tài)調整主機資源利用率,將繁忙的Hyper-V主機上的部分VM移動到相對空閑的Hyper-V主機上,這樣可以確保即便在業(yè)務高峰期也能給終端用戶提供很好的性能。本章主要介紹Windows Server 2012 Hyper-V的實時遷移功能(Live Migration)。
一、約束委派設置的兩種方法
1. 通過GUI界面設置
在我們進行實時遷移設置前,首先要進行配置約束委派,因為Hyper-V實時轉移提供了兩種驗證通信協(xié)議,預設為CredSSP,另一種是Kerberos委派。不過相對比較安全的Kerberos委派可以阻絕任何不明啟用的服務器使用委派,所以建議使用。如果使用Kerberos委派來驗證實時遷移,那就必須要先設定限制委派,然后才可以繼續(xù)其余的步驟,而且還要必須使用Domain Administrators群組成員的賬戶在Active Directory的Computers設置限制委派。如果使用CredSSP,那就不需要進行設定委派。
步驟1 打開“Active Directory 用戶和計算機”管理單元。從服務器管理器 (SM) 中執(zhí)行該操作,打開“Active Directory 用戶和計算機”管理單元。從導航面板中選擇域,然后雙擊“Computers”文件夾。在“Computers”文件夾中,右擊源服務器的計算機賬戶,然后在彈出的快捷菜單中選擇“屬性”命令。

步驟2 在接下來彈出的“屬性”對話框中,單擊“委派”選項卡。在“委派”選項卡下選擇“信任僅委派到特定服務的計算機”。在該選項下面,選擇“僅限使用 Kerberos”。單擊“添加。

步驟3 在接下來彈出的“添加服務”對話框中,單擊“用戶或計算機”按鈕。

步驟4 在“選擇用戶或計算機”對話框中的“輸入對象名稱來選擇”文本框中鍵入目標服務器的名稱,單擊“檢查名稱”按鈕以驗證你輸入的名稱是否正確,若無誤,則單擊“確定”按鈕。

步驟5 在“添加服務”對話框,在可用服務列表中執(zhí)行以下步驟,然后單擊“確定”。要移動虛擬機存儲器,請選擇 cifs。如果要同時遷移存儲器與虛擬機,而且僅遷移虛擬機的存儲器,則需要執(zhí)行此步驟。如果將該服務器配置為使用Hyper-V的SMB存儲器,則應首先選中該選項。要遷移虛擬機,選擇“Microsoft 虛擬系統(tǒng)遷移服務。

步驟6 在“屬性”對話框的“委派”選項卡上,確定上一步選定的服務列在目標計算機可以為其提供委派證書的服務中,然后單擊“確定”按鈕。

委派要在域中的每臺Hyper-V主機中都要添加相應的委派,否在會在遷移過程中報錯。如在Hyper-V02中,就需要信任Hyper-V01中的Kerberos協(xié)議,并指定相應的服務類型。操作步驟與之前的相同。如果只設定一方,那就只能將虛擬機遷移過去,但卻無法遷移過來。
2. 通過Powershell命令設置
下面我們用Powershell的方式進行委派,但是Powershell方式的委派非常麻煩,幸運的是在TeachNet Blogs中有提供了一個Set-KCD.ps1腳本文件,該腳本簡化了煩瑣的委派步驟,其地址為:http://blogs.technet.com/b/matthts/archive/2012/06/10/configuring-kerberos-constrained-delegation-for-hyper-v-management.aspx
從Blogs上我們可以下載到Set-KCD腳本文件,下載之后解壓后會有兩個文件,一個是Set-KCD.ps1和Set-KCD.Zip。在解壓Set-KCD.Zip后,會發(fā)現(xiàn)里面還有個Set-KCD.ps1,第二個Set-KCD.ps1文件大約9.2KB,第一個Set-KCD.ps1大小則為3KB,其實兩種Set-KCD.ps1都能實現(xiàn)同樣的效果,差別就是文件較大的Set-KCD.ps1文件包含服務類型的名稱。
首先我先看大小為3KB的Set-KCD.ps1文件,其代碼如圖所示。

接下來我們看大小為9.2KB的Set-KCD.ps1文件,由于代碼過長,這里只給出了部分代碼,可自行下載后查看,其代碼如圖所示。

了解了Set-KCD腳本文件,在準備執(zhí)行Set-KCD.ps1腳本文件之前,還需要進行一步操作,否則會在執(zhí)行的過程中會出下無法加載文件的情況。

遇到這種事情是由于Set-KCD不是Windows Powershell內(nèi)建的指令,所以必須要解除限制,設定為無限制才能執(zhí)行。設置完成后,我們還可以恢復Windows Powershell內(nèi)建的指令限制。首先使用Powershell命令Set-ExecutionPolicy Undefined,目的是降低Windows Powershell安全性,當執(zhí)行完成后,可以使用Powershell命令Set-ExecutionPolicy RemoteSigned恢復其安全性。

下面我們就來設置mabofeng.com域中的Hyper-V01信任委派Hyper-V02的服務類型CIFS。將9.2KB大小的Set-KCD.ps1文件拷貝到C盤下,使用的Powershell命令為
.\SetKCD.ps1 –TrustedComputer Hyper-V01 –TrustingComputer Hyper-V02 –ServiceType CIFS –Add

如果要將3KB大小的Set-KCD.ps1文件拷貝到C盤下,使用的Powershell命令為:
.\SetKCD.ps1 –AdDN “cn=Hyper-V01,cn=computers,dc=mabofeng,dc=com” –HostFQDN Hyper-V02.mabofeng.com –Service CIFS –Add
接下來設置mabofeng.com域中的Hyper-V01信任委派Hyper-V02的服務類型Microsoft Virtual System Migration Service。將9.2KB大小的Set-KCD.ps1文件復制到C盤下,使用的Powershell命令為:
.\SetKCD.ps1 –TrustedComputer Hyper-V01 –TrustingComputer Hyper-V02 –ServiceType “Microsoft Virtual System Migration Service” –Add

如果要將3KB大小的Set-KCD.ps1文件復制到C盤下,使用的Powershell命令為:
.\SetKCD.ps1 –AdDN “cn=Hyper-V01.cn=computers,dc=mabofeng,dc=com” –HostFQDN Hyper-V02.mabofeng.com –Service “Microsoft Virtual System Migration Service” –Add
復制完成后,進行設置信任委派,我們可以使用如下命令:
Get-AdObject “cn=Hyper-V01,cn=computers,dc=mabofeng,dc=com” –Properties msDSAllowedToDelegateTo

在域控中設定完成委派后,接下來就是設定轉移的來源和目的地Hyper-V主機了。設定來源和目的地服務器目的是,讓它們可以傳送和接收實時遷移。當設置服務器的時候,有兩種方案可供選擇:在任何可用網(wǎng)絡允許實時遷移的流量或只在指定網(wǎng)絡上允許實時遷移的流量。最安全做法就是指定專用的網(wǎng)絡負責實時遷移的網(wǎng)絡流量。要在非群集Hyper-V主機上開啟實時遷移,只要在Hyper-V主機的Hyper-V設置中進行設置即可。 #p#
二、實時遷移設置的兩種方法
1. 通過GUI界面設置
在Hyper-V實時遷移設置中,首先勾選“啟用傳入和傳出的實時遷移”,并選擇身份驗證協(xié)議。身份驗證協(xié)議分為兩種:一種是使用憑據(jù)安全支持提供程序(CredSSP),這種身份驗證協(xié)議必須登錄到服務器才能執(zhí)行實時遷移,所以不是最佳的選擇;而另一種方式是采用Kerberos,這種方式更為安全,在域控中我們已經(jīng)設置了采用Kerberos委派,并設定了cifs和Microsoft 虛擬系統(tǒng)遷移服務。在“指定所允許的并行實時遷移數(shù)量”中輸入允許的數(shù)量。
接下就是設置傳入實時遷移的網(wǎng)絡情況,這里也有兩種選擇:一是使用任何可用的網(wǎng)絡進行實時遷移,這種方式可以利用所有Hyper-V主機之間的網(wǎng)絡,但是由于發(fā)生實時遷移后,對網(wǎng)絡的壓力較大,給其它網(wǎng)絡中的業(yè)務造成壓力;二是使用指定的IP地址進行實時遷移,這也是我們要選擇的方式。單擊圖6-16中的“添加”即可設置IP地址,單擊“編輯”即可修改實時遷移IP地址。

2. 通過Powershell命令設置
如果是Microsoft Hyper-V Server 2012,無法通過GUI界面設置實時遷移,那么我們也可以通過Powershell的方式設置Hyper-V的實時遷移,主要的命令包括:
啟動傳入和傳出的實時遷移,命令如下:
Enable-VMMigration
停用傳入和傳出的實時遷移,命令如下:
Disable-VMMigration
查看傳入和傳出的實時遷移狀態(tài)(見圖6-17),命令如下:
Get-VMHost

使用憑據(jù)安全支持提供程序(CredSSP),命令如下:
Set-VMHost –UseAnyNetworkForMigration $ture
指定使用IP地址為192.168.1.201進行實施遷移,命令如下:
Add-VMMigrationNetwork 192.168.1.201/32
指定使用IP段都可以進行實施遷移,命令如下:
Add-VMMigrationNetwork 192.168.0.0/32
查看傳入和傳出的實時遷移IP地址,命令如下:
Get-VMMigrationNetwork

將192.168.1.201的先后順序調到3,命令如下:
Set- VMMigrationNetwork 192.168.1.201/32 –NewPriority 3

在Hyper-V設置中,還需要進行設置的就是存儲遷移的并發(fā)遷移量,設置允許存儲遷移的并發(fā)數(shù)量。

除了在Hyper-V主機上要設置實時遷移以外,要注意在虛擬機的設置中,一定要勾選“將虛擬機遷移到具有不同處理器版本的物理計算機”選項,如果不勾選這個選項,在遷移到不同版本的CPU時候,會出現(xiàn)錯誤,導致遷移失敗。

三、具有共享存儲的實時遷移
實時遷移具有很多種類:
具有共享存儲的實時遷移,就是虛擬機運行在具有共享存儲的磁盤中,兩臺Hyper-V并非是群集關系,可以將虛擬機實時遷移到另外一臺主機上,在遷移過程中可保證虛擬機不關機、不重啟,服務器不中斷,確保業(yè)務的正常運行。
另外一種遷移是運行在一臺Hyper-V主機中,改變虛擬機的存放位置,將虛擬機的存放位置從一個磁盤遷移到另一個磁盤,同樣的,在遷移過程中虛擬機不關機、不重啟,服務器不中斷,保證業(yè)務的正常運行。
最后一種就是當虛擬機運行在單臺Hyper-V主機時,將單臺Hyper-V主機中的虛擬機遷移到另外一臺Hyper-V主機,并且這兩臺Hyper-V主機并沒有共享存儲,也就是說,要同時遷移虛擬機和虛擬機存放的磁盤位置。
無論是哪種遷移,將虛擬機遷移到另外一臺主機上時候,轉移虛擬機基本上包括了轉移虛擬機的快照、當前配置、智能分頁和虛擬硬盤,如果是遷移虛擬存儲文件,還可以指定將虛擬機磁盤存放到不同的目錄上。但這里要注意的就是,當遷移虛擬機到另外一臺主機上時,如果虛擬機使用的是DHCP,那么在遷移完成后,IP地址可能會發(fā)生變更,所以最好將虛擬機的IP地址設置成為固定的形式。在兩臺Hyper-V主機上進行遷移時,如果兩臺主機的虛擬交換機名稱不同,則也可能發(fā)生遷移失敗。
下面我們就來介紹如何進行具有共享存儲的實時遷移,。相對于其它遷移方式,這種遷移速度是最快的,如果虛擬機存放在共享存儲中,而共享存儲是采用SMB3.0就可以順利的遷移,如果是早期的Hyper-V版本,則無法使用具有共享存儲進行實時遷移。這里還要注意,共享存儲必須具有Hyper-V的Administrator的權限,并設置授予完全控制。否則在遷移虛擬時候會發(fā)生錯誤。
1. 通過GUI界面進行遷移
步驟1 在Hyper-V管理器中,右擊選擇要遷移的虛擬機,在之后彈出的快捷菜單中選擇“移動”命令。

步驟2 在遷移“新建虛擬機”向導中,點選“移動虛擬機”選項,然后單擊“下一步”按鈕。由于采用的是共享存儲,所以就沒必要移動虛擬機的存儲了。

步驟3 在指定目標的計算機界面上,輸入指定目標計算機的名稱,或者通過單擊“瀏覽”按鈕在域中查找到要遷移的目地虛擬主機,之后單擊“下一步”按鈕。

步驟4 在選擇移動虛擬機后,可以在“選擇移動選項”界面中選擇如何使用虛擬機遷移項目,這里包括如下選項:
“將虛擬機的數(shù)據(jù)移動到一個位置”選項,此選項將遷移虛擬機到所指定的一個位置,這里的意思是遷移快照、智能分頁、虛擬機配置文件和虛擬機的虛擬硬盤,將這些文件指定一個位置。
“通過選擇項目移動位置來遷移虛擬機的數(shù)據(jù)”選項,這里的意思是將遷移快照、智能分頁、虛擬機配置文件和虛擬機的虛擬硬盤分別指定存放的位置。這種選項和上一個選項可以手動或者自動選擇虛擬機的存放位置,如果無需移動虛擬機虛擬硬盤,則指定路徑時,將虛擬機的虛擬硬盤指定到源地址即可。
“僅移動虛擬機”選項,將虛擬機的文件除了虛擬機的虛擬硬盤之外的文件進行遷移,遷移后的虛擬機存放在系統(tǒng)默認的地方。
這里我們選擇“僅移動虛擬機”選項。

2. 通過Powershell命令進行遷移
通過Powershell也能進行虛擬機的遷移,使用命令Move-VM。首先我們先查看在Powershell中的遷移虛擬機的命令語法。

命令Move-VM的語法中包括了:
-SmartPagingFile: 智能分頁處理。
-AnapshotFile :快照文件。
-VirtualMachine: 虛擬機配置文件。
-VHDs :虛擬機的虛擬硬盤。
通過Powershell命令可以將新建虛擬機從Hyper-V01主機上遷移到Hyper-V02主機上,使用的命令為:
Move-VM “新建虛擬機” Hyper-V02
可以將新建虛擬機從Hyper-V01主機上遷移到Hyper-V02主機上,并指定虛擬機的虛擬硬盤路徑在C:\TestVM,其命令為:
PS C:\>Move-VM “新建虛擬機” Hyper-V02 –IncludeStorage –DestinationStoragePath C:\TestVM
可以將新建虛擬機從Hyper-V01主機上遷移到Hyper-V02主機上。并指定智能分頁處理、快照文件、虛擬機配置文件和虛擬機的虛擬硬盤路徑,使用的命令為:
PS C:\>Move-VM “新建虛擬機” Hyper-V02 –VirtualMachinePath D:\TestVM\Config –SnapshotFilePath D:\ 新建虛擬機\Snapshots –SmartPagingFilePath D:\ 新建虛擬機\SmartPaging –IncludeStorage –VHDs @(@{“SourceFilePath” =“C:\ 新建虛擬機\Disk1.VHDX”; “DestinationFilePath” = “D:\ 新建虛擬機\Disks\Disk1.VHDX”}, @{“SourceFilePath” = “C:\ 新建虛擬機\Disk2.VHDX”; “DestinationFilePath” = “D:\ 新建虛擬機\Disks\Disk2.VHDX”}) #p#
四、存儲實時遷移
存儲實時遷移是將虛擬機的存放位置從一個地方遷移到另一個地方,比如可以將虛擬機的存放位置從C盤遷移到D盤,或者將虛擬機硬盤遷移到共享存儲上面,也可以將虛擬機在共享存儲中的不同LUN之間相互遷移,在遷移過程中,虛擬機不會出現(xiàn)中斷。但是由于存儲實時遷移包括了遷移虛擬機的快照、智能分頁、虛擬機配置和虛擬機的虛擬硬盤,所以遷移過程是比較慢的,具體速度取決于我們存儲網(wǎng)絡和磁盤速率。當然,在虛擬機關機的情況下,速度要比開機時候遷移的要快。
1. 通過GUI界面進行遷移
步驟1 在Hyper-V管理器中,右擊選擇要遷移的虛擬機,在之后彈出的快捷菜單中選擇“移動”命令。在遷移“新建虛擬機”向導中,選擇“遷移虛擬機的存儲”選項,由于是在同一臺主機上,就沒必要移動虛擬機了。

步驟2 在選擇移動虛擬機存儲后,可以在“選擇移動選項”中選擇如何使用虛擬機存儲遷移項目,這里包括的具體選項有:
“將虛擬機的數(shù)據(jù)移動到一個位置”選項,此選項將遷移虛擬機到所指定的一個位置,這里的意思是遷移快照、智能分頁、虛擬機配置文件和虛擬機的虛擬硬盤,將這些文件指定一個位置。
“將虛擬機的數(shù)據(jù)移動到其他位置”選項,即通過選擇項目移動位置來遷移虛擬機的數(shù)據(jù),這里的意思是將遷移快照、智能分頁、虛擬機配置文件和虛擬機的虛擬硬盤分別指定存放的位置。這個選項和上一個選項可以手動或者自動選擇虛擬機的存放位置。
“僅移動虛擬機的虛擬硬盤”選項,對虛擬機的虛擬硬盤文件進行遷移,遷移后的虛擬機存放在系統(tǒng)默認的地方。
這里我們選擇“僅移動虛擬機的虛擬硬盤。

步驟3 在選擇要移動的項目中會列出虛擬機中的所有虛擬硬盤,可以將虛擬機中的虛擬硬盤全部勾選上然后可以進行遷移,也可以遷移其中的一些虛擬硬盤,但是不建議將一個虛擬機的硬盤遷移到不同的目錄中。這里的新建虛擬機只有1塊硬盤,我們就選擇遷移此虛擬硬盤。

步驟4 為虛擬機中的虛擬硬盤選擇遷移的目標路徑,從圖6-30中可以看出,新建虛擬機的當前位置在C盤下面,在“新位置”中單擊“瀏覽”按鈕選擇路徑或者直接輸入路徑,若是輸入路徑的地址下沒有輸入的文件夾,則會自動創(chuàng)建文件夾。

步驟5在摘要中查看要遷移虛擬機的路徑,確認無誤后單擊“完成”按鈕就開始遷移,整個遷移虛擬機的過程虛擬機不會出現(xiàn)中斷。

2. 通過Powershell命令進行遷移
通過Powershell也能進行虛擬機存儲的遷移,使用的命令是Move-VMStorage。首先我們先查看在Powershell中的遷移虛擬機的命令語法。

命令Move-VM的語法中包括了:
-SmartPagingFile :智能分頁處理。
-AnapshotFile :快照文件。
-VirtualMachine: 虛擬機配置文件。
-VHDs :虛擬機的虛擬硬盤。
可以將新建虛擬機存儲位置從默認路徑遷移到D:\新建虛擬機,使用的命令如下:
PS C:\> Move-VMStorage “新建虛擬機” –DestinationStoragePath D:\新建虛擬機
將新建虛擬機的智能分頁處理、快照文件、虛擬機配置文件和虛擬機的虛擬硬盤遷移到指定的路徑,使用的命令如下:
PS C:\>Move-VMStorage “新建虛擬機” –VirtualMachinePath D:\新建虛擬機\Config –SnapshotFilePath D:\新建虛擬機\Snapshots –SmartPagingFilePath D:\新建虛擬機\SmartPaging –VHDs @(@{“SourceFilePath” = “C:\新建虛擬機\Disk1.VHDX”; “DestinationFilePath” = “D:\新建虛擬機\Disks\Disk1.VHDX”}, @{“SourceFilePath” = “C:\新建虛擬機\Disk2.VHDX”; “DestinationFilePath” = “D:\新建虛擬機\Disks\Disk2.VHDX”}) #p#
五、非共享存儲的實時遷移
Windows Server 2012中的Hyper-V在虛擬機的遷移中,支持了具有非共享存儲的實時遷移,這樣可以大大增強了Hyper-V虛擬機的靈活性,在一些沒有共享存儲和群集的環(huán)境中,基于非共享存儲的實時遷移起到了重要的作用。
非共享存儲的實時遷移具備以下四個特性:
即使在遷移工程中遇到故障或問題,導致遷移失敗,也能保證有一臺可用虛擬機。
可跨群集遷移虛擬機,例如我們可以從非群集的計算機遷移到群集計算機。
支持不同存儲類型的遷移虛擬機,無需受存儲類型約束,不管環(huán)境是 JBOD 還是直通存儲,又或者是 iSCSI 存儲,都能實現(xiàn)實時遷移。
可以使用 Powershell 發(fā)起實施遷移的操作,那么就能夠實現(xiàn)自動化的操作。
綜上所述,非共享存儲的實時遷移為我們提供了低成本、高效率、靈活便捷的遷移方案,這一遷移方式能夠被用到多種應用環(huán)境下,例如:
開發(fā)或 IT 人員能夠將測試好的虛機在不停機的前提下直接遷移到生產(chǎn)環(huán)境。
在多主機環(huán)境下,如果需要進行主機維護,可以在不依賴共享存儲的前提下,快速、靈活的在主機之間移動虛機。
故障檢修和硬件升級,中小企業(yè)可能只有一臺服務器并通過虛擬化方式運行著業(yè)務服務器,當遇到硬件故障或需要更新服務器時,IT顧問可以快速在筆記本上建立臨時的基于 Windows Server 2012 的 Hyper-V 主機,將其加入到現(xiàn)有域中完成業(yè)務虛擬機的遷移,在完成原服務器的更換后,再遷移回去。
非共享存儲的實時遷移在遷移過程中虛擬機不會出現(xiàn)中斷的現(xiàn)象。

而遷移的過程中,有的Hyper-V主機沒有共享存儲,所以在遷移時,需要遷移虛擬機的所有配置,包括虛擬機的虛擬硬盤、配置文件、虛擬機快照和Hyper-V智能分頁文件,遷移過去的虛擬機文件和數(shù)據(jù)存儲可位于一個或者多個位置。由于沒有共享存儲,該實時遷移方案不提供高可用性。

可以通過Powershell發(fā)起實施遷移的操作,可以采用Move-VMStorage或者是Move-VM命令,只要指定相應的虛擬機遷移目標存儲路徑,虛擬機就會遷移過去,這與之前遷移使用的命令相同。Windows Server 2012 無需共享存儲的實時遷移整體來講非常易用,無需過多的設置即可完成,仔細操作下來也就是幾個簡單的步驟,這完全依靠強大的基礎架構作為支撐,所以在遷移之前的Hyper-V主機中,都必須加入域環(huán)境。
本文出自 “讓"云"無處不在” 博客,請務必保留此出處http://mabofeng.blog.51cto.com/2661587/1294328