應用程式驅動的伺服器虛擬化方案 Oracle VM 第 4 回

提到 Linux 下的虛擬化方案,VMware、VirtualBox、Xen 和 KVM 都是比較多人認識的,但其實 Oracle 也有一個在一定條件下免費使用的 Oracle VM,一連五篇的連載將全面介紹 Oracle VM (OVM) 伺服器虛擬化的安裝與配置、基本功能與管理、容災方案、平台升級、以及不可或缺的故障處理和架構恢復,本篇將介紹 Oracle VM 伺服器虛擬化方案的高可用的原理以及配置。

高可用特性 (HA) 是虛擬化方案必備功能,在 OVM 上可以同時實現 OVS 伺服器以及虛擬機器級別的高可用性。OVS 伺服器的HA,是指當某個 OVS 伺服器出現異常如當機、心跳網路斷開以及無法更新仲裁盤時,該伺服器會被物理重啟,上面的虛擬機器會快速離線,遷移到同一個伺服器池其他的 OVS 伺服器上運行。但由於虛擬機器原來所在的 OVS 伺服器已徹底崩潰,所以虛擬機器是無法線上遷移的。所謂虛擬機器的 HA,是指設置了高可用的虛擬機器,在關機時會自動重啟。不過該特性視乎 OVM Xen Hypervisor 對虛擬機器狀態的判斷,以及是否可以通過 ovs-agent 將虛擬機器狀態正確傳遞到 OVM Manager。如果虛擬機器的狀態無法被正確識別,高可用就無法實現。例如虛擬機器崩潰了,但 Xen Hypervisor 上其進程和 ID 仍然存在,就可能無法觸發高可用。

設置 HA

在 OVM 上設置 HA 的方法簡單到只有一個步驟,就是點擊虛擬機器並選擇「編輯」,在虛擬機器屬性頁面中勾選 Enable High Availability 即可(圖 1),這樣在虛擬機器內執行關機命令將不生效。要關閉該虛擬機器,只有在 Servers and VMs 頁面選取該虛擬機器,並點擊 Stop 方可。當該虛擬機器所在的 OVS 伺服器出現崩潰、死機或者重啟時,該虛擬機器會自動在其他的 OVS 伺服器上啟動和運行。

圖1:針對虛擬機器啟用高可用
圖1:針對虛擬機器啟用高可用

測試 HA 的方法

測試的方法很簡單,我們可在運行虛擬機器的 OVS 伺服器上,執行一條命令。

echo c > /proc/sysrq-trigger [Enter]

以前我們多用這種方式來測試 Linux 系統上的 Kdump 是否正常工作,這將觸發 OVS 伺服器死機並重啟。通過 OVM 管理界面,可觀察到虛擬機器先會處於 Error 狀態,然後變成 Offline,之後很快就會在另外一台 OVS 伺服器上啟動並運行。通過跟蹤 OVMManager 上的 AdminServer.log,也可看到變化過程。高可用比線上遷移更快速完成虛擬機器的遷移,因為不涉及到記憶體複製和比對,只是虛擬機器上的業務多少會有停頓。因此對於重要業務,最好是使用其他虛擬機器應用程式本身提供的群集技術。

OVM 的仲裁

在 OVM 上實現高可用非常簡單,但在實際情況下 OVM 如何進行仲裁和判斷才是關鍵。尤其是銀行和金融領域客戶,對觸發高可用的各種場景和產生的結果非常關注。以下介紹在 OVM 的伺服器池中,當 OVS 伺服器出現各種故障的情況下,OVM 如何仲裁。伺服器池 (Server Pool) 是一個由多台 OVS 伺服器所組成的一個高可用群集基礎架構,群集中的節點就是該伺服器池中的多個 OVS 伺服器。支撐和仲裁該群集的方案,就是在伺服器池檔案系統上的 OCFSv2 所提供的高可用群集功能。

OCFSv2 簡介

OCFSv2 本身就是一個有 Global Heartbeat 功能,且基於分散式鎖管理 (DLM) 的群集基礎架構,所以在 OVM 的伺服器池中,節點管理、仲裁、隔離、投票等功能,都由 OCFSv2 檔案系統一手包辦。部署 OVM 時,OVS 伺服器使用的網路將被自動定義為心跳網路,通常管理網路,心跳網路和虛擬機器線上遷移網路,都是運行在同一個網路上的。心跳網路以每 2 秒一次的頻率,向其他節點發送 Hello 資訊,並將取得的節點狀態更新到仲裁盤中。如果當任何一個節點的 Hello 資訊,在 120 秒都無法被其他節點取得,或者在 120 秒內完全無法更新仲裁盤,該節點將被踢出 (Fence) 群集,OVS 伺服器將被重啟。

OCFSv2 群集的管理

120 秒這個值可在建立伺服器池時調整,在 OVM 管理界面上編輯伺服器池時,看到的叫做 Timeout for Cluster。對 Timeout for Cluster 產生影響的有兩個參數, 當進入任一台 OVS 伺服器查看 /etc/sysconfig/o2cb 設定檔, 可看到其中之一是 O2CB_HEARTBEAT_THRESHOLD,此值定義仲裁盤的判斷時間,單位為秒,預設為 61。他和剛才 Timeout for Cluster 的關係如下。

Timeout for Cluster = OC2B_HEARTBEAT_THROSHOLD x 2 – 1

當節點 60 秒不更新, 仲裁盤將會被判斷為失效, 而當時間累計到 120 秒, 則會被強制重啟。而另外一個參數 O2CB_IDLE_TIMEOUT_MS 定義的是網路心跳的超時時間, 和 Timeout for Cluster 的關係其實一樣。當然如果當網路和磁碟的故障, 在 60 秒到 120 秒的區間恢復, 原先被預判為失效的 OVS 伺服器則有機會逃過一劫。通過 ovs-agent 進程,正常的 OVS 伺服器將會獲知有哪些虛擬機器設置了,HA 可以自動將其重分佈並再次啟動。

你可能有興趣的內容

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *