2012年11月26日 星期一

Windows Server 2012 Hyper-V 3.0 複寫技術與實務 (Hyper-V 3.0 Replica)

Windows Server 2012 的Hyper-V 3.0新增了不少功能,除了採用了高達64TB大小的新版磁碟格式-VHDX之外,為了讓Hyper-V 3.0更適合建置企業私有雲環境下的虛擬機器,微軟加強了Hyper-V的行動能力與遷移彈性,從Windows Server 2008 Hyper-V 1.0即已支援的快速移轉(Quick Migration)、到Windows Server 2008 R2 Hyper-V 2.0開始支援的即時移轉(live Migration), 新版的Hyper-V 3.0新推出的複寫(Replica)功能、無共用即時移轉(Shared Nothing Live Migration )和儲存即時移轉(Storage Live  Migration),讓Hyper-V3.0大步邁向雲端環境, 而本文的重點將介紹並說明如何使用Hyper-V 3.0的虛擬機器所新增的複寫功能,因為它將是Hyper-V 3另一項影響重大且不可或缺的強化功能。
許多企業組織於虛擬化的過程中,雖然可以經由硬體整合以及提升資源利用率的方式來降低成本,但是虛擬機器的備援成本仍然不低,因此即使在導入伺服器虛擬化的環境下,想要建構一個災變還原計劃對許多中小型企業而言仍須花費大筆預算,而新版的Hyper-V允許您以非常簡單的方式建立虛擬機器的複本,將虛擬機器設定複寫到另一部執行 Hyper-V 的伺服器並且維護非同步的更新,所以這項功能提供了一個簡易、低成本的虛擬機器持續運作和災變復原(Disaster recovery;DR)的解決方案。

Hyper-V 複寫機制與運作

Windows Server 2012 的Hyper-V內建複寫功能能夠讓管理人員將一部正在執行的虛擬機器經由IP網路複製到遠端另一部Hyper-V主機,這提供了一個節省成本的備援方式以備日後的意外恢復,換言之,這是小規模虛擬化網路環境下所樂見的災難復還技術,讓啟動的虛擬機器一旦遭遇了問題無法正常運作時可以利用複本伺服器來快速恢復運作。

Hyper-V的複寫機制採用了非同步(asynchronous)的複製方法,這意謂著變動的更新並非採用即時的方式,而是會有一定的時間延遲,而這種非同步的複寫運作過程如下:
一旦設定並啟動了虛擬機器複寫後,通常可以經由網路或媒體拷貝二種方式之一來建立複本伺服器的初始複本(initial replica),接下來的來源(主要)Hyper-V伺服器將會利用變更追蹤模組來追蹤任何虛擬機器的寫入變更,並且為虛擬磁碟維護一份Hyper-V 複本記錄檔(Hyper-V Replica Log File;HRL),以後發生虛擬機器的寫入變更時不僅會寫入到虛擬磁碟(VDHX),還會同時寫入到HRL,而這份記錄也會每隔五分鐘重播在複本伺服器的複本虛擬磁碟,亦即每隔五分鐘會產生一個記錄檔並將舊記錄檔複製至複本伺服器,這些HRL記錄檔案通常就直接儲放在虛擬磁碟所在的目錄--C:\Users\Public\Documents\Hyper-V\Virtual hard disks 底下。

hv-replica

Hyper-V複寫機制另一個有彈性的地方是允許維護多份還原點以及透過陰影複製來維持應用程式的一致性,這些牽涉到複本歷程記錄維護方式的可設定選項包括了:

  • 僅儲存取最新的復原點:最簡的複本維護方式是只有一個最新的復原點,因此所有的記錄資料均會被合併到被初始製到複本伺服器的VHDX檔,因此每次還原時均只能還原最新的磁碟狀況。
  • 儲存多份復原點:第二種複本歷程的維護方法是選擇儲存許多份復原點,在此情況下複本伺服器仍然每隔五分鐘接收到記錄檔並將其儲存起來,然後每隔一個小時(12個記錄檔)建立一個快照並將記錄檔寫入,至於快照需要維護多少份則由您在來源伺服器上設定虛擬機器複本時所輸入的"要儲放的額外復原點數目"來決定,一旦快照數達到上限了,則取舊的快照將會被合併到虛擬磁碟檔VHDX內。
  • 使用應用程式一致複本:另一種較為特別的複本歷程記錄的維護方式是建立應用程式一致性快照(application consistent snapshot ),建立應用程式一致性復原點需要需要擬機器使用『磁碟區陰影複製服務』(Volume Shadow copy Service, VSS)建立快照,複本伺服器仍然如上面的方式一樣,每隔五分鐘接收到記錄檔,然後每隔一個小時(12個記錄檔)建立一個快照而且這個快照將維護應用程式一致性(如果您選擇增量VSS複本複寫頻率為二小時,則代表著每隔一個快照就必需是應用程式一致性的快照),如果您在虛擬機器上執行 Active Directory, Exchange, SQL或 SharePoint等服務,則啟用支援VSS的應用程式一致性備份就顯得重要。下圖說明了備份不一致的問題,對於檔案伺服器、不太常變更資料為主的伺服器可能不會有太大的問題,但對於以資料庫為主的應用程式伺服器,此不一致的備份可能會導致問題。

下圖說明了備份時為何有檔案不一致的現象,此種現象對以資料庫為主的應用程式服務可能會造成問題。
app_inconsistent

虛擬機器複本功能的主要設計目的在於災變復原,並非像叢集技術的重點在於確保高度可用性,所以它並沒有叢集技術可以透過內部網路Heartbeat功能來自動容錯移轉,藉以儘量降低停擺時間達成其高度可用性目的,因此採用此種複本的方式,一旦出了任何問題就需要手動移轉虛擬機器,Hyper-V複本提供了三種不同的容錯移轉方法,不同的容錯移轉方法的設計目的並不相同,管理人員必需弄清楚各自的適用時機以確保在正確的時間點採用正確的移轉方式。

  • 測試容錯移轉 (Test Failover)
    顧名思義,測試容移轉主要是用來測試複本伺服器上的虛擬機器複本或還原點是否可以正常啟動並執行之,目的在於確認複本或還原點為正確而可用的,使用測試容錯移轉時並不會直接連上網路,所以您並不需要擔心它的啟動會影響或干擾到目前正在線上執行的主要虛擬機器。
  • 計劃的容錯移轉 (Planned Failover)
    必需關閉主要伺服器虛擬機器並且在主要伺服器上啟用的計劃的容錯移轉選項,計劃移轉將會複製任何擱置變更記錄至複本伺服器以確保無資料遺失,然後就會容錯移轉至複本機器的虛擬伺服器,並且反轉複寫方向,最後成功啟動複本虛擬機器後,原來的主要虛擬機器成為複本,而原來的複本機現在就成為了主要機器。
    此種計劃性的移轉方法通常使用時機時主要伺服器及虛擬伺服器仍然在線上正常運作,由於維護或其它因素您須要暫時停止虛擬伺服器的服務,所以您採用此種移轉方法來由遠端的虛擬機器複本來繼續提供服務,另一方面,基於效能上或其它任何因素的考量,您希望交換主要虛擬機器與複本虛擬機器的角色,那麼就應該使用計劃的容錯移轉。
  • 非計劃的容錯移轉(Unplanned failover)
    若主要伺服器由於發生特定的意外(例如軟硬體故障或營運場所發生災變)而導致非預期性的無法正常運作,為了能夠在複本伺服器上繼續提供服務,管理人員就需要在複本虛擬機器功能表上選取並執行"容錯移轉"選項,一旦開始執行這種非計劃的容錯移轉作業,由於不可能執行擱置的變更的複寫(主要伺服器已不在線上),系統將直接啟動並執行此部伺服器的虛擬機器複本於線上,此外,反轉複寫也必需手動啟用,以便讓這部複本伺服器將來可以轉換並執行主要伺服器的角色。

設定與使用 Hyper-V複寫功能條件

使用Hyper-V複寫功能非常簡單,基本上只需要符合下列二項條件:

  1. 二部已安裝 Windows Server 2012 Hyper-V角色的機器
  2. 二部機器之間具有網路連線

Hyper-V 3.0的複本機制其實就是一種虛擬機器的遠端複製技術,對於複製的虛擬機器並沒有太多條件限制,做為複寫的主要伺服器和複本伺服器均可以是獨立的Hyper-V主機亦或是叢集主機,因此您可以將獨立主機的虛擬機器複寫到叢集主機,也可以將叢集主機的虛擬機器複寫到獨立主機上,若要將叢集主機的虛擬機器複至另一部叢集主機自然也不成問題,所以相當有彈性。

另外,雖說Active Directory目錄服務環境並非使用Hyper-V複本的必要條件,但是若您的Hyper-V伺服器是部署在Active Directory目錄服務環境下,採用Kerberos驗證方式將是較為簡便並且無須額外設定,但假您並無架設Active Directory網域環境,那麼採用憑證為基礎的驗證方式將是唯一方法,不過您可能須要額外部署憑證服務架構。

Hyper-V複寫實務

啟用與管理維護 Windows Server 2012 Hyper-V 3.0的複寫功能相當簡單,您需要執行下列的工作:

  • 複本伺服器上啟用複寫功能
  • 在來源伺服器上設定虛擬機器複本
  • 檢查與確認複寫狀況
  • 測試容錯移轉 (Test Failover)
  • 計劃的容錯移轉
  • 手動容錯移轉、反轉複寫方向與取消容錯移轉
  • 刪除複本

底下分別依序說明其詳細步驟。

複本伺服器上啟用複寫功能

首先,您須要在複本伺服器(目的地伺服器)上啟用複寫功能,並且設定下列的複本組態資訊:

  • 驗證方法:
    Kerberos (HTTP):適用於Active Directory樹系內的Hyper-V伺服器複寫工作
    憑證 (HTTPS):適用於跨樹系的複寫或無Active Directory環境下使用,需由目的地的複本伺服器提供有效的SSL憑證。
  • 允許複寫的來源伺服器:您可以設定允許任何已通過驗證的伺服器,也可以明確指定那些伺服器為允許的複本來源。
  • 複本檔案的存放位置:預設的位置為 c:\user\public\documents\hyper-v\Virtual Hard Disks,但您也可以變更其它目錄。

想要在複寫目的地的複本伺服器上啟用複寫設定的步驟為:

  1. 啟用【Hyper-V管理員】。
  2. 先按下一伺服器節點,然後再於右側的動作窗格內按一下『Hyper-V設定』。
  3. 待畫面出現『伺服器名稱 的Hyper-V設定』對話方塊,於左側選項中選按『複寫設定』即可看到『複寫設定』相關項目。
     replica1
  4. 首先,核選『驗證與連接埠』,在本文範例中由於二部Hyper-V伺服器均隸屬於相同Active Directory樹系下,所以直接核選『使用Kerberos(HTTP)』,因而無須處理SSL憑證。 
  5. 接下來,於『授權與存放裝置』項目,選取『允許來自任何已驗證之伺服器的複寫』並接受預設位置,當然您也可以指定允許的來源伺服器和自訂位置。
  6. 設定完成後,按下『確定』,這時畫面會提醒您要設定防火牆例外。
    fwexcep
  7. 依據提示,您須要利用【具有進階安全性的Windows防火牆】工具,啟用『Hyper-V複本HTTP接聽式(TCP-In)規則』。
    fwexcep2
    或是利用底下的PowerShell cmdlet來啟動防火牆規則 :
    Enable-NetFirewallRule -DisplayName "Hyper-V Replica HTTP Listener (TCP-In)"

在來源伺服器上設定虛擬機器複本

啟用和設定了複本伺服器的複寫功能後,接下來,您還必需在來源的Hyper-V伺服器上設定虛擬機器複本,決定那些虛擬機器要以何種方式複製到那些目的地的Hyper-V伺服器,步驟與說明如下:

  1. 啟用【Hyper-V管理員】工具。
  2. 在需要複寫的虛擬機器右鍵功能表上選取『啟用複寫』選項以開啟設定精靈程式,並在第一個出現的『在您開始前』設定頁上直接按『下一步』繼續。
    replicaA
  3. 『指定複本伺服器』設定頁上輸入或選取要複寫的目的伺服器(即上面步驟已經啟用複寫的複本機器),按『下一步』繼續。
    replica5
  4. 『指定連線參數』設定頁上,設定複本伺服器所設定的複寫的連接埠、採用的驗證類型以及是否壓縮傳送資料,按『下一步』繼續。
    replica6
  5. 『選擇複寫』設定頁上勾選所想要複寫的虛擬硬碟(VHD、VHDX),您應該勾選這部虛擬機器所使用到一切虛擬硬碟以便將來能夠順利在複本伺服器上啟用系統及所有伺服功能,按『下一步』繼續。

  6. replica7
  7. 『設定復原歷程記錄』設定頁上,您需要設定是否使用額外的還原點(Recovery Point)及數目,以便除了可恢復最近的時間點之外,還可以恢復到更早的數個時間點,額外的復原點快照每小時建立一次,如果您要能夠恢復到一天前的狀況,則須要額外24個復原點,而每個復原點的建立大約會耗費2MB空間,此外,虛擬機器上若執行資料庫為主的應用服務,建議啟用應用程式一致複本功能並設定複寫頻率。
    replica9
  8. 『選擇初始複寫方法』設定頁上設定初始複寫方法,基本上您可以使用網路傳送或透過匯出到外部媒體二種方法之一來建立初始複本,一般而言,如果網路頻灣寬足夠自然可直接由網路傳輸,否則利用外部媒體來複製,然後排定複寫時間或立即複寫,在此接受預設值採用網路立即複寫。
    replica11
  9. 最後的『摘要』設定頁顯示了先前的設定資訊,如果檢視一切設定無誤,請按『完成』。

接下來,系統就會根據設定完成初始複本的建立工作。

檢查與確認複寫狀況

一旦完成設定後,或是日後任何時點,您均可以在主要伺服器或複本伺服器的虛擬機器上的右鍵功能選取『複寫↘檢視複寫健康情況』選項以了解目前的複寫狀況是否正常,是否有錯誤發生或時間延遲,最後一次複寫的時間,如下圖左側是健康正常沒有問題的檢查結果,右下圖則是存在有無法複寫有時間延遲的警告。

repliucahealthy
另一方面,於Hyper-V管理員工具上,可以於中間窗格按一下虛擬機器,並選擇下方的『複寫』標籤也可以看出目前的複寫狀況是否正常。

status

這個步驟也可以利用Powershell的 Get-VMReplication cmdlet來取得複寫狀態與健康狀況。

Get-VMReplication

測試容錯移轉 (Test Failover)

建立Hyper-V複本的主要目的提供有效的虛擬機器災變復原的機制,所以您必需確保萬一日後主要伺服器失效無法運作時,複本伺服器可以正常啟動以取代主要伺服器來繼續提供相同的服務,因此您可以在必要時或定期測試容錯移轉功能以便確認可以順利啟動複本來正常運作,測試容錯移轉的步驟簡單如下:

  1. 請從複本伺服器虛擬機器的右鍵功能表選取『複寫↘測試容錯移轉』選項,如果您先前已設定建立多個復原點,則這時還可以選擇那一復原點來測試容錯移轉。
    testfailoverA
  2. 這時Hyper-V系統會幫您建立一個複本虛擬機器的拷貝連結,它的虛擬機器名稱後面會附加上"測試"字樣,請直接啟動這個測試用途的虛擬機器並仔細查看可否正常啟動執行服務,您並不需要擔心這個測試機會影響或干擾到主要伺服器的正常運作,因為它並不會連上網路。
    testfailoverB
  3. 一旦測試容錯移轉完成後,您可以再由複本許虛擬機器的右鍵功能選取『複寫↘停止測試容錯移轉』選項,這個測試用的虛擬機器連結就會被刪除。
    testfailoverC

 

計劃的容錯移轉

如果主要伺服器基於維護、管理或效能上的考量須要將主要虛擬機器的角色移轉至另一部複本伺服器(亦即交換主要和複本角色),例如您想要暫時關閉主要伺服器以便替它新增額外的記憶體,這時就需要進行計劃的移轉以免這段時間無法提供服務,計劃的容錯移轉做法是:

  1. 計劃的容錯移轉需要您的主要伺服器仍在線上提供服務,但是您要先關閉主要伺服器上所規劃要移轉的虛擬機器。
  2. 接下來請於主要伺服器的虛擬機器右鍵功能表上選取『複寫↘計劃的容錯移轉』選項。
    planfailoverAA
  3. 待畫面出現『計劃的容錯移轉』對話方塊時,請按下方的『容錯移轉』按鈕。
  4. 接下來就會開始執行計劃的錯誤移轉程序,將尚未複寫的資料傳送到複本伺服器,反轉複寫方向,啟動複本虛擬機器。
    planfailoverBB
  5. 計劃的容錯移轉執行完成後,主要伺服器就變成複本伺服器,而原來的複本伺服器就成為主要伺服器繼續在網路上提供服務。

手動容錯移轉、反轉複寫方向與取消容錯移轉

一旦主要場所發生災變,或主要伺服器出了任何問題而導致虛擬機器無法正常運作,這時候就需要在最短時間之內將伺服器的服務移轉至備援場所的複本伺服器,由於Hyper-V的複本機制並無內部網路的Heartbeat功能,所以並沒有叢集自動容錯移轉的機制,因此一旦出現了問題,確認後得立即手動移轉服務,其做法與步驟為:

  1. 請於複本伺服器的虛擬機器上的右鍵功能表,按一下『複寫↘容錯移轉』選項,並於出現的『容錯移轉』對話方塊上選擇最新或較早的復原點後,按下『容錯移轉』按鈕。
    failoverA
  2. 一旦成功的完成容錯移轉後,這複本虛擬機器被會被自動啟動開始供服務。

另一項值得留意的容錯移轉設計是IP組態問題,預設上複本會使用主要虛擬機器原先的IP組態,但您有可能在災難發生時,容錯移轉到備援場所的複本虛擬機器時須要使用不同的IP組態,這時請預先在複本虛擬機器上的設定對話方塊,按一下右側的『硬體↘網路介面卡↘容錯移轉TCP/IP』就可以替複本虛擬機器設定不同的靜態 IP。
failoverip

容錯移轉的後續處理牽涉到的關鍵在於原來的主要伺服器上的虛擬機器日後是否仍會回到線上,如果日後又會回到線上,則接下來還需要考慮未來何者將要扮演主要伺服器的角色、如果您希望原來的主要伺服器一旦重新回到線上就轉換成複本伺服器,不再扮演其原先的主要伺服器角色,則您可以利用目前已執行容錯移轉選項的這部複本機器上,先執行 "反轉複寫方向",並且於"選擇初始複寫方法"設定頁時設定無需再傳送初始複本,這樣二部機器就會重新同步,可讓原來的主要虛擬伺服器接到到不在線上這一段時間所寫入的變更,一旦執行"反轉複寫方向"完畢後,目前執行容錯移轉的複本伺服器即會變成主要伺服器的角色,而有一段時間不在線上的主要伺服器就成為複本伺服器,但如果您仍偏好讓原來的主要伺服器回到線上後仍然要扮演主要伺服器的角色,則您須要再執行一次"計劃的容錯移轉"即可。另外有一種不建議的做法是於原來的主要伺服器重新回到線上後,您在執行容錯移轉選項的複本機器上直接選取『取消容錯移轉』選項,如此一來就會自動關閉這部複本虛擬機器並讓回到線上的主要伺服器仍使用其當掉時的複本資料繼續提供服務,不過其不在線上的時段中所變更任何資料均會遺失。

另一方面,若原來的主要伺服器已經毀損再也無法回到線上,則您可以執行"反轉複寫方向"選項,然後指向另一部正常可用的Hyper-V伺服器來重新建立初始複本即可。

底下說明如何在已容錯移轉的複本虛擬機器上執行反轉複寫方向選項:

  1. 請在執行容錯移轉的複本虛擬伺服器上右鍵功能表上選取『反轉複寫方向』選項。
    failover003
  2. 待畫面出現反轉複寫方向精靈程式時,按『下一步』繼續。
  3. 『指定複本伺服器』設定頁上輸入一部已經啟動可正常連線的複本伺服器的名稱(可能是原來的主要伺服器)。
  4. 『指定連線參數』設定頁輸入適當的驗證方法與連接埠。
  5. 『指定複原歷程記錄』設定頁選擇是否須要額外的復原點。
  6. 『選擇初始複寫方法』設定頁上決定是否需要複寫初始複本,如果這是一部新的尚無資料伺服器就須要複寫初始複本,但是若是原來的主要伺服器就可能無須複製初始複本。
    failover012
  7. 最後檢視摘要完成精靈程式,此時這部原本的複本伺服器就成了主要伺服器。

當然如上面的說明,您也可以在目前執行容錯移轉的複本伺服器上選取『取消容錯移轉』選項,讓其關閉虛擬機器成為正常複本狀態,由於並不會有任何同步複寫的動作,所以這段時間所變動的資料也隨之遺失。

failover013

虛擬機制的複本機制提供了遠端備援能力,一旦主要場所的機器出了問題,您需要如本節所示的執行手動容錯移轉才能藉由備援場所的複本繼續提供,它並沒有自動容錯移轉能力,不過由於Hyper-V 3.0的管理工作皆可透過PowerShell來完成,所以如果您希望達到自動容錯移轉並非不可能,只要撰寫PowerShell指令檔,定期檢查主要虛擬機器的健康與連線狀況,一旦出現無法連線服務超出所定的門檻值就觸發自動執行容錯移轉的cmdlet- "VMFailover -VM name"。

移除複本

如果不再須要維護虛擬機器的複本,則您可以移除原先建立的複本,不過記得您須要同時在主要伺服器和複本伺服器上的虛擬機器上選擇『移除複本』選項。

remove

結語

複寫機制無疑是Windows Server 2012 Hyper-V伺服器重要的賣點之一,在導入虛擬化的許多中小企業環境下,它提供了一個低成本又可達成企業RPO和RTO目標的災難還原技術,不過Hyper-V的複寫機制主要是替虛擬機器數量不多、預算不高的小型企業網路環境下所設計的災變復原技術,如果您的網路上擁有成百上千的虛擬機器,那麼Hyper-V的複寫機制恐難以符合效能與管理效率的須求,大型網路規模且大量虛擬化的網路環境仍然建議採用以儲存區域網路(SAN ;Storage Area Network)為主的技術來提供災變復原計劃。
另一方面,虛擬機器的複本機制既不是叢集技術,也非用來取代叢集技術,它僅不過就是一個針對虛擬機器所設計的非同步災變復原技術,不過若將它搭配叢集技術使用,於是由複本提供低成本的災變復原計劃,整合了Hyper-V主機安裝於微軟的容錯移轉叢集(Failover Cluster)內,利用光纖或iSCSI共用儲存區搭配Heartbeat方式來提供高度可用性,如此一來將可利用微軟的Hyper-V來建立一個兼具災變復原能力並提供高度可用性的虛擬化環境。