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

在「永不停機的 Linux 解決方案 Ksplice (二)」介紹了Ksplice 的基本原理及取得方法,本篇將介紹實際使用的具體步驟,以及使用上的常見問題。

非 Oracle 用戶的做法

那麼對於沒有購買 Oracle Linux Premier 服務的用戶又怎麼辦?沒有購買服務便沒有 CSI,無法註冊到 Oracle ULN,也沒有辦法取得 Access_key。對於這種情況,在 Ksplice 官方網站上通過註冊,可以取得一個 30 天的體驗期,完成註冊之後,Ksplice 網站將提供這個 Access_key,用戶只需要按照輔助說明作業,將該私人鑰下載下來,並通過該私人鑰安裝 uptrack 工具集,然後即可下載所有的線上核心更新(圖 29 和 30)。另外還有一點非常重要,Ksplice 的安裝和使用也支援 Red Hat Enterprise Linux,所以 RHEL 5 和 6 的用戶,也可以體驗到 Ksplice 所帶來的這項重要特徵。

圖29:安裝 uptrack 工具集。
圖29:安裝 uptrack 工具集。

 

圖30:未購買 Oracle 服務的使用者可獲得 30 天體驗期。
圖30:未購買 Oracle 服務的使用者可獲得 30 天體驗期。

無法上網時使用 Ksplice

伺服器在無法連接互聯網的情況下,也可使用 Ksplice。這種場景更貼近於真實生產環境,因為安全性的考慮,大多數的伺服器根本無法存取外部網路。針對這種情況,Ksplice 從今年初開始提供了離線升級的解決方案。具體的方法是,可以在內部網路環境中設置一個升級伺服器,實際上就是先設置一個 yum 的升級伺服器,然後其他內網的伺服器,均可通過該 yum 伺服器,取得 Ksplice 的升級。yum 伺服器的設置方法非常簡單,不過麻煩的是必須先要將 Ksplice 頻道包括工具和升級套件,都要完整地下載作為內網升級資源,這時就需要 Linux 授權能夠存取到 Ksplice 的頻道,實際上也就意味著至少要有一個 Oracle Linux Premier 的服務授權。當確認時授權後,可以通過之前的方法,將該伺服器註冊到 Oracle ULN 上,然後手動加入整個 Ksplice 的軟體頻道。最後通過 reposync 命令,同步該頻道上的所有資訊。

具體步驟

安裝一台 RHEL 或 Oracle Linux 伺服器,原則上版本 5 或者版本 6 均可,但由於之後要下載整個頻道的套裝軟體,筆者將使用 /var/www/html/ 作為軟體頻道下載目錄,所以必須預留足夠的磁碟空間。對 Ksplice 軟體頻道最好預留 30GB 或者以上的磁碟空間。註冊到 Oracle ULN 網路,並手動加入 Ksplice 軟體頻道。註冊成功後登入 ULN 找出已經註冊的伺服器,然後編輯屬性(圖 31),勾選 Yum Server(圖 32)。此步驟可以確保當前系統能夠註冊到任意主要版本的軟體頻道,例如當前系統是 Oracle Linux 6,但是也能夠註冊到 Oracle Linux 5 的軟體頻道,並下載相關的套裝軟體。接下來安裝 HTTP 套件,未來將通過 HTTP 服務將 Ksplice 頻道共用出來。

圖31:找出已經註冊的伺服器編輯屬性。
圖31:找出已經註冊的伺服器編輯屬性。

 

圖32:註冊和勾選 yum 伺服器。
圖32:註冊和勾選 yum 伺服器。

yum install httpd [Enter]

修改 /etc/httpd/conf.d/welcome.conf,將 Index 前面的「-」去掉,這樣可以支援客戶端在瀏覽器中,以檔清單形式瀏覽整個HTTP 共用資訊,重啟 HTTP 服務配置即告完成。

/etc/init.d/httpd start [Enter]
chkconfig httpd on [Enter]
mkdir /var/www/html/yum [Enter]

使用 reposync 命令將整個頻道同步到區域,先取得 repo ID。

yum repolist [Enter]

然後根據獲得的 repo ID 下載整個 Ksplice 頻道。

reposync -l -m -p /var/www/html/yum -r ol6_x86_64_ksplice –
norepopath [Enter]

這 樣整個 Ksplice 頻道將被同步到 /var/www/html/yum 目錄下。如果覺得 reposync 命令比較麻煩,可以先到 Oracle ULN 網站的 add-ons 頻道,下載和安裝一個名叫 uln-yum-mirror 的 rpm 套件,這是 Oracle 專門提供的一個供頻道同步和下載的工具。只要伺服器註冊到 ULN 網站上,執行該包所提供的腳本 /usr/bin/ulnyum-mirror,就會自動將該伺服器所註冊的所有軟體頻道,下載到區域的 /var/www/html/yum 目錄中。實際上 uln-yum-mirror 是一個 shell 腳本,打開之後發現其實該腳本使用的還是 reposync 工具,因此對該腳本中的下載行為和方式,可以直接通過編輯其設定檔 /etc/sysconfig/uln-yum-mirror,甚至 /usr/bin/uln-yummirror 予以修改。不過大多數情況下,我們不需要改動任何配置,直接執行即可。

/usr/bin/uln-yum-mirror [Enter]

之 後就是漫長的等待了,因為一個完整的 Ksplice 頻道,可能會有約 20GB 大小。當 Ksplice 頻道中的所有的套裝軟體同步完成之後,我們會發現類似下面的目錄結構。除了 Ksplice 工具包 uptrack 之外,還有一大堆的以 uptrack-updates 開頭的 rpm 套件,而且容量不小(圖 33)。實際上這些都是 Ksplice 針對不同核心版本,所打包的線上升級修正檔,在升級的時候,只要選擇與自己系統版本相同的升級修正檔即可。

圖33:Ksplice 頻道的內容。
圖33:Ksplice 頻道的內容。

客戶端配置

而在客戶端上的配置相對就簡單很多,實際上只需要將自己的yum repo 指向到升級伺服器的 HTTP 共用即可。例如在升級伺服器上的 Ksplice 軟體頻道所在的目錄如下。

/var/www/html/yum/OracleLinux/OL6/ksplice/x86_64/
getPackage/

那麼在客戶端上,只要在 /etc/yum.repos.d 目錄下建立一個 repo 設定檔 ksplice.repo,內容如下。

[ksplice]
name=ksplice
baseurl=http://yum-server/yum/OracleLinux/OL6/ksplice/
getPackage
enabled=1
gpgcheck=0

儲存結束之後,客戶端一般執行兩個步驟,先安裝 Ksplice 的離線升級工具包 uptrack-offline。

yum install uptrack-offline [Ener]

安裝與當前系統個對應的 uptrack-updates 升級套件(圖 34)。

圖34:安裝與當前系統版本一致的修正檔集。
圖34:安裝與當前系統版本一致的修正檔集。

yum install uptrack-updates-`uname -r` [Enter]

這樣即完成了 Ksplice 的離線升級,而且我們再用那段程式碼檢測會發現一樣有效。

不過有點小遺憾的是,根據官方資訊,目前 Ksplice 的這種離線升級解決方案,只支援 Oracle Linux 系統。將該離線方案應用到 RHEL 系統方面,經過筆者測試也是成功的,只不過離線升級之後,使用 uptrack-uname 可能無法正確獲得已經生效的版本編號,但是實際上 Ksplice 的修正檔已經打上去,而且能夠正常工作。或者可以採用 Oracle ULN 上提供的方法和工具,將 RHEL 系統轉換成 Oracle Linux,這樣就可使用線上或者離線的 Ksplice 功能。

RHEL 變身 Oracle Linux

在 ULN 首頁上,就有相關的連結以及應用於不同版本、圖形或者字元界面的轉換工具包(圖 35 及 36),以 RHEL 6 為例,下載對應套件,將四個 rpm 套件放在任意目錄下。安裝之前最好是用對應版本的系統安裝光碟做一個區域的 yum 倉庫,這樣進入到套件所在的目錄執行以下命令時,系統將自動解決依賴關係。

圖35:RHEL 變身 Oracle Linux。
圖35:RHEL 變身 Oracle Linux。

 

圖36:轉換為 Oracle Linux工具。
圖36:轉換為 Oracle Linux工具。

yum install *.rpm [Enter]

下載和安裝這幾個 rpm 套件有三個作用,首先 RHEL 的標誌會被替換掉,新的 uln_register 工具集會將原來的 RHN 的指向修改為 linux.oracle.com。增加公用的 yum 軟體倉庫的指向,Oracle 實際上就是通過這種方式提供系統所有軟體的升級。完成後系統已經變成了 Oracle Linux,這些轉變僅是替換非常週邊的一些設置和檔案,不會觸及任何核心、底層庫等關鍵檔和配置資訊,系統基本上依然是 RHEL,一般僅僅幾分鐘即可完成。

常見問題

有人問使用 Ksplice 和使用 yum 進行核心升級,哪個會更好一些? Ksplice 是一個線上升級或者降級核心修正檔的一個工具和方案,推薦使用 Ksplice 是為了儘量避免和減少可能的停機時間與維護方面的麻煩。但是一般情況下,升級系統核心以及其他的 rpm 套件應使用 yum 。所以實際上這兩種方案可以同時使用,並互為補充。有用戶擔心使用 Ksplice 升級的過程中如果系統斷電,會否導致系統無法啟動。其實這個問題不用擔心,所有 Ksplice 修正檔應用到系統核心中的作業,完全是在記憶體中完成的。但與此同時,我們會發現在系統的 /var/cache/uptrack 目錄中,會儲存這些修正檔的緩存,實際上是 Ksplice 臨時編譯出來的模組。當系統下次重啟過程中,會自動通過這些緩存,來載入模組並重建一個被「修正的核心」。當然我們可以通過編輯 /etc/uptrack/uptrack.conf 設定檔來改變該行為,例如讓系統在重啟過程中,不去載入這些模組。在該目錄中,每個修正檔都有自己對應的目錄和模組,如果當伺服器在應用線上修正檔過程中 突然出現異常,充其量 Ksplice 臨時編譯的模組無法儲存到緩存中,伺服器重啟之後可能充其量無法應用某些歌模組而已,但是之前正常下載和編譯的 Ksplice 模組,都可以正常載入。

既然 Ksplice 和 yum 都會更新核心到最新的版本,而且當使用 Ksplice 時系統重啟會預設載入 Ksplice 提供的線上升級緩存,當兩種升級手段同時使用時,一旦伺服器重啟,到底會使用哪種核心? Oracle 或 Red Hat 通常會首先提供基於 yum 升級的核心版本,而 Oracle 也需要做一些額外的工作,來將這些升級做成支援 Ksplice 的升級套件,就是我們之前看到的一大堆以 uptrackupdates 開頭的套件。有可能 Ksplice 提供的升級核心相比於標準升級包來說會有一點點延遲,不過當我們同時使用這兩種方案的時候,這些都不是問題,兩種升級都採用的情況下,系統重啟會不會有衝 突。大家不妨通過一個簡單的試驗獲得結論,例如伺服器使用的核心版本是 2.6.32-220,如果同時通過 Ksplice,系統的核心版本已經到了 2.6.32-358,在系統重啟之前,我們會發現在預設情況下,使用 yum 升級核心實際上執行的是 rpm -i 的作業,也就是說,yum 預設會安裝新版本的核心,並在 GRUB 中產生新的啟動項同時,以新的啟動項啟動系統,而不是通過 rpm-U,去變更原有核心再用原來的啟動項啟動系統。所以結論是,當使用 yum 升級核心之後,系統重啟一定會用新的核心,這個時候原來應用了 Ksplice 的舊核心根本就不會被使用,自然也不會再去載入之前 Ksplice 的緩存。所以,除非我們修改 yum 升級系統的行為,讓他必須覆蓋舊的核心,否則這種衝突是不可能出現的。而反過來,我們貌似也很難找到一個理由說明為什麼要修改 yum 的升級行為,使用 rpm -i 來升級核心畢竟會為我們多留一條後路。

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

 

你可能有興趣的內容

發表迴響

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