永不停機的 Linux 解決方案 Ksplice(一)

真正的生產和關鍵任務環境中,任何原因所導致的系統停機或者重啟,都可能會帶來經濟上的重大的損失。在 Oracle Linux 的眾多技術特徵中,有一項相當重要的輔助技術,可確保整個作業系統真正擁有接近於 100% 線上時間和可用性,這就是零停機線上修正檔技術 Ksplice,Linux Pilot 將會接連 3 篇為大家介紹。

圖1:Oracle 解決方案堆疊。
圖1:Oracle 解決方案堆疊。

Oracle Linux 專案最早開始於 2006 年,是 Oracle 為了更好地支援其應用體系和未來戰略所提供的 Linux 作業系統解決方案。當時 Oracle 通過長期的市場調查發現,市面上有超過 80% 的資料庫、50% 的中介軟體與 30% 的各類應用軟體,實際上都是運行在不同的 Linux 系統平台上的,為 Oracle 投入和開發自己的 Linux 作業系統平台,提供了源動力,徹底的完善應用和解決方案的架構(圖 1)。

Oracle 與開源的關係

很多人會持有懷疑 Oracle 作為一個閉源的資料庫廠商,在 Linux 的研發和技術實力方面缺乏積澱。但實際上 Oracle 早在 1998 年,就已經推出了第一個運行於 Linux 作業系統之上的商業版關係型資料庫系統,此之後十多年,Oracle 也並非完全對開源項目沒有貢獻,包括了以 OCFS 為代表的不同的檔案系統,如 NFS、Btrfs 等,虛擬化 Hypervisor Xen、TCP/IP 協定、非同步 I/O 演算法、核心調度演算法、以及 Oracle 自己的作業系統核心 Unbreakable Enterprise Kernel (UEK) 等(圖 2)。目前 Oracle Linux 主要對外提供服務和支援的有 x86 和 x86_64 兩個架構,包括了 Oracle Linux 5 和 6,分別對應 Red Hat Enterprise Linux 5 和 6。

圖2:Oracle 和開源的關係。
圖2:Oracle 和開源的關係。

Oracle Linux 和 RHEL

Oracle Linux 和 Red Hat Enterprise Linux (RHEL) 的主體幾乎是完全一樣的,甚至連 RHEL 所提供的功能附加元件 (Add-ons)也是一樣的。除了 UEK 核心之外,Oracle Linux 維護著和 Red Hat 完全一樣的軟體倉庫,任何 Red Hat 發佈的 RPM 套裝軟體,都會在 Oracle Linux 的軟體頻道中提供。至於 Oracle 自己加入到 Linux 中的軟體,將生成新的 RPM 套件,包括 UEK 核心、Oracle Validated Configuration、OCFS 檔案系統及工具以及一些其他的與 UEK 核心相關的套件。好處就是不用擔心使用方法和習慣方面需要重新去適應,而且 Oracle Linux 的安裝方法、作業界面、命令列參數等和 RHEL 可以說是完全一模一樣的。

並非「完全抄襲」

Oracle Linux 並非「完全抄襲」Red Hat 的 RHEL, 也有「原創」的部分,其中最有價值的是 Oracle 自己研發的 UEK 核心。UEK 核心第一個版本基於 Linux 3.0 以上版本開發,特徵包括 NUMA 架構、調度演算法、快閃記憶體管理、檔案系統管理、高效能網路、記憶體管理、資源控制等多個方面。圍繞著 UEK 核心,Oracle Linux 也整合了一些新技術提高系統的穩定性、可用性以及易用性。這些技術特徵包括 Dtrace 和新的資料完整性檢查機制(圖3),這項在 2012 年由 Intel、Emulex 和 EMC 所共同提出的資料完整性保護方案,簡而言之就是在資料從應用程式的產生到寫入磁碟的每個環節中,都引入了校驗和檢查,最終確保寫入到磁碟的資料是完整和有效的。當然在整個環節中,已經被整合到 UEK 核心中的 ASMLib 起到關鍵的作用,因為所有使用 ASMLib 寫入到磁片的 Oracle 資料,都將會被增加校驗資訊,並在之後真正寫入磁碟之前的每個環節和子系統中被層層校驗。

圖3:UEK 功能——資料完整性檢查。
圖3:UEK 功能——資料完整性檢查。

Oracle 的「回饋開源」

不少開源社區的朋友對 Oracle 都抱有戒心,但幸好 Oracle Linux 歸根結底也是開源的作業系統,必須按照開源的規則全部公開其程式碼,所以 UEK 核心的初始程式碼,以及在 UEK 核心中的所有程式碼的變更情況都會被公開。Oracle Linux 光碟映像檔、修正檔和套裝軟體,也都可以免費從 Oracle 網站取得。任何用戶只需要在 Oracle 官方網站上註冊一個帳號,就可以下載和使用 Oracle Linux,並從 Oracle 維護的網站上,免費獲得基本上和 RHEL 一樣的所有套裝軟體修正檔,只有當需要 Oracle 技術支援時,才需要支付一定的服務費用。在 Oracle Linux 的眾多技術特徵中,有一項相當重要的輔助技術,可確保整個作業系統真正擁有接近於 100% 線上時間和可用性,這就是下面將要重點介紹的零停機線上修正檔技術 Ksplice。

Ksplice 基本原理

眾所周知 Linux 系統的修正檔一般分為兩種類型,即應用程式修正檔和核心修正檔。以 RHEL、Fedora 或 CentOS 為例,當我們使用 yum 來對整個系統進行升級的時候,實際上會調用 rpm 的「-U」選項升級原來的 rpm 套件。在這個過程中,所有對應用程式的升級均可以直接生效,但是對核心的升級,就必須重啟系統才可以完全生效。Linux 核心的更新,從誕生的那天起就沒有停止過。不管是哪種 Linux 版本,只要涉及對系統核心的更新,伺服器重啟一定是少不了的(圖 4)。單是在 2009 到 2010 一年間,Linux 因為核心更新而導致的系統重啟平均達到了十次以上。

圖4:因為核心升級導致系統重啟的頻率。
圖4:因為核心升級導致系統重啟的頻率。

伺服器的重啟影響大

不同於平時我們自己的測試和實驗環境,真正的生產和關鍵任務環境中,任何原因所導致的系統停機或者重啟,都可能會帶來經濟上的重大的損失。以筆者曾經接觸過的銀行非核心業務系統為例,一旦維護的內容涉及到伺服器的重啟,運維人員必須提交詳細的維護計畫和報告,列出事件原因、維護時間、維護步驟和計畫、作業流程、備份方案、應急預案、所涉及的人員部門等多方面資訊,而且報告必須經過層層審批和得到最終確認同意,才能真正予以執行。在真正實施之前,當然還需要提前對外公告。維護任務的執行幾乎無一例外都在午夜、凌晨這些非工作時間,而且往往需要調派和協調其他部門的人員來進行應急準備。在維護的過程中大家祈禱的是一切能夠按照預案執行,並且結果在預期之內。但是一旦維護過程中出現任何的問題,例如伺服器重啟失敗、無法引導系統、無法啟動應用、丟失配置等,且又無法在計畫的時間帶內恢復,最終導致的結果將是災難性的,Ksplice 正是為了解決這個問題出現的。

Ksplice 的功能

Ksplice 技術本身是開源的,最初始於 MIT 的一些研究專案,當時的主要研究人員以此為名成立了公司,不過目前該公司已經被 Oracle 收購了,並將該技術應用於 Oracle Linux 環境當中。Ksplice 的最終目的,是使 Linux 系統在不重啟的情況下,可以升級和應用核心修正檔。而與此同時,系統的守護進程、資料連接、傳輸等均不會受到任何的影響。Ksplice 不光可以使系統核心線上升級,也可以實現線上的降級,徹底將系統從風險和麻煩中解脫出來。那麼 Ksplice 如何能做到這一點呢?簡單地說就是不需要預先在核心中設置探測點 (Probe Point),而是對比安裝修正檔前後的核心(即「前核心」和「後核心」)。發現差異後,即在需要修正的部分,跳到修正後的程式碼執行。當修正檔部分執行完成後,又會傳回原來的核心,繼續執行原來的程式碼。過程中核心沒有變化,只是增加了新的物件程式碼和幾個函式呼叫重導命令(圖 5),而且整個對核心修補的過程,可完全在記憶體中直接實現。

圖5:Ksplice 簡單原理。
圖5:Ksplice 簡單原理。

Ksplice 可以影響資料結構,只是需要多做一點程式設計工作。Ksplice 可以在更新期間執行程式碼,來幫助執行這種變更。Ksplice 還提供一對勾子函數 (Hooks),可以在更新核心的前後清理程式碼,還可以在核心中添加新函數。原則上任何核心甚至是那些在 Ksplice 開發出來之前就存在的核心,都可以使用 Ksplice。要銜接核心,必須有核心的初始程式碼、希望應用的修正檔以及編譯器,編譯器必須能夠在物件程式碼中,把核心中的每個函數和資料結構隔離在他們各自的部分中。不過這個不是問題,在一般 Linux 版本中都提供了 GCC,在安裝 Ksplice 相關套件時,也會被作為依賴關係自動安裝。

取得 Ksplice

下面我們將通過兩個場景的實際作業,介紹 Ksplice 的使用方法。Oracle 針對 Linux 所提供的 Ksplice 功能,原則上需要使用者購買服務才能獲得,而且使用者需要購買 Premier 級別的服務。使用者需要將自己的伺服器註冊到 Unbreakable Linux Network (ULN) 上,ULN 功能相當於 Red Hat 的 RHN,之後加入 Ksplice 頻道,就可以通過 yum 下載到所有 Ksplice 的工具集。並通過該工具集提供的命令,來升級經過打包的 Ksplice 修正檔。可以將自己的伺服器註冊到該網站上來實現一些簡單生命週期管理的功能,包括伺服器資訊統計、升級管理等,用戶也可以通過該網站來直接搜尋獲得授權的頻道、所需軟體和相關修正檔包。對沒有購買 Oracle Linux 的用戶來說,在 Ksplice 網站並完成註冊,就可以得到得一個 30 天的免費體驗期。

下一篇將會介紹在 ULN 使用 Ksplice 的步驟,緊貼 Linux Pilot 留意!

登記下載試用版 Ksplice,體驗免停機的解決方案
http://ksplice.oracle.com/try/trial

你可能有興趣的內容

One thought on “永不停機的 Linux 解決方案 Ksplice(一)

發表迴響

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