KVM虛擬化環境高可用方案探討
KVM是成熟的開源虛擬化解決方案,將其部署於企業生產環境,其高可用性也是必須要仔細考慮的問題。
高可用性(High Availability)是指系統提供不間斷服務的能力,也就是儘可能的減少系統停止服務的時間。KVM虛擬化環境也存在HA的問題,KVM主機軟硬體或外部環境都有可能出現問題甚至是災難,這就必須要考慮一些高可用方案。
KVM高可用方案無非就是如何能最大限度的讓客戶機保持正常執行。目前想到的HA方案有如下幾個。
1、DRBD
DRDB(Distributed Replicated Block Device),可以直譯為"分散式複製塊裝置",其工作方式為通過網路來映象塊裝置,可以稱其為網路RAID1(Network RAID1)。 DRDB在本地接受IO請求,除了將資料寫入本地硬碟外,還會通過網路傳送給另一主機,另一主機將其寫入自己的本地硬碟,從而保持兩臺主機的塊裝置實時同步。
從kernel 2.6.33開始DRDB已經進入mainline。DRBD 9.0之前只能將資料複製到一個節點,9.0之後將提供複製到多個節點的能力。
通過與heartbeat結合可以做到自動的failover,從而達到高可用性。
DRBD是一種通用解決方案,KVM虛擬化環境完全可以使用這一高可用技術。
2、Sheepdog
Sheepdog是專為QEMU/KVM開發的分散式塊儲存系統。它可以提供QEMU/KVM可以直接掛接使用的高可用塊級儲存卷。Sheepdog可以擴大到上百個節點,並且支援高階卷管理特性,比如快照、克隆、thin provisioning等。它是針對KVM的專用叢集儲存方案。
這玩意兒聽起來真像那麼一回事兒,但目前版本為0.3.0,成熟度貌似還很不夠。不過很看好這專案。
3、雙機
雙機共享儲存,但這種方式仍然存在單一故障點,那就是儲存,所以這種方式並不是一種很好的方式,雖然儲存的可靠性比主機要高的多。
目前正在採用這種方式,兩臺伺服器分別通過多路徑連線到共享的磁碟陣列,但同一時刻只能有一臺伺服器掛載磁碟陣列。因為磁碟陣列使用的是ext4檔案系統,這種單機檔案系統是不支援兩臺主機同時訪問的,會造成資料混亂,甚至檔案系統崩潰。
KVM客戶機客戶機磁碟映象檔案和啟動KVM客戶機的命令指令碼都放在共享儲存上面,當正在使用磁碟陣列的主機出現故障時,可以使用備機掛載磁碟陣列來執行KVM客戶機。因為有了共享儲存,也可以通過NFS來做客戶機的動態遷移,即V2V熱遷移,客戶機可以在幾乎沒有任何中斷的情況下從一臺主機遷移到另一臺主機。
因為儲存是單一故障點,所以有必要經常備份KVM客戶機。但目前KVM客戶機還不能熱備份,也就是要想完整備份客戶機,只能將客戶機停掉,然後拷貝其磁碟映象檔案。顯然這樣太麻煩了。
熱備份的問題可以通過檔案系統快照來間接實現。ext4不支援snapshot,ZFS是更好的選擇。ZFS on linux是ZFS到linux的原生移植,以核心模組的方式來繞過license限制。通過ZFS給檔案系統做快照,然後將快照傳輸到遠端主機,來間接的實現KVM虛擬機器的熱備份。
近期會測試這種方式,ZFS on linux 現在的版本為0.6.0-rc8,不知道穩定性如何!
當然還有一種備份方式,現在的磁碟陣列大部分提供一種功能叫做遠端卷映象RVM(remote volume mirroring)的特性,但這種方式有許多缺點,比如硬體投資高,靈活性差,而且RVM會忠實的映象一切資料,包括錯誤,一旦原卷資料損壞,可能遠端映象卷也會無法使用,如果RVM能提供事務支援就更好了,當然也有陣列提供snapshot功能。但是能用軟體方案解決的問題還是儘量不要用硬體解決方案。
總結
總的來說,使用DRBD或Sheepdog是更好的解決方案,Sheepdog還不太成熟,也許DRDB是目前一個很好的選擇。雙機熱備這種古老的技術其實並不靈活也不十分可靠,叢集才是高可用和高效能的方向。