叢集系統介紹:OpenMosix 實戰

作者:徐秉義(Albert Hsu)

叢集系統(Cluster)對於一般人來說,就好像冰山美人一般的難以親近,原因大多在於叢集系統一直給人們難以架設的印象。本文就是藉由 OpenMosix 這個比較容易架設的叢集系統,使讀者能夠感受到叢集系統威力,並且搭配應用 Linux 上音樂多媒體轉檔程式,將 WAV 格式轉成 ogg 或 mp3 格式,來驗證 OpenMosix 叢集系統性能。

簡介叢集系統

叢集系統(Cluster)簡單說:就是將多台電腦資源,整合應用起來像是一台超級電腦。

叢集系統類型

常見叢集系統類型如下:

『High-availability (HA) clusters』高可用度叢集:提供高度可用之電腦系統,單點故障不會影響整體運作(failover),適用於關鍵任務的電腦服務(mission critical)。

『Load balancing clusters』負載平衡叢集:將負載分散到多台電腦之叢集,很適合重型負載服務(Heavy Loading)。

『High-performance (HPC) clusters』高效能叢集:需要大量運算之電腦系統,最適合使用 HPC 來處理,事實上有些高效能叢集系統同時也是負載平衡系統。

『Grid computing』網格運算:分散式運算架構,將運算需求分配給許多電腦,同時也是高效能 HPC 叢集。

OpenMosix 叢集系統簡介

OpenMosix 叢集,屬於 HPC Cluster 系統實做,也算是 Load balancing clusters 一種,您可以使用多台電腦,營造出像是一台超級電腦一般,其中的每一台電腦其實是一個運算節點(Node),當某單點(某一個 Node)被下達了許多行程(Process)需要執行,但是卻來不及運算時,OpenMosix 會將行程轉移(migrate)給其他較空閒或是運算能力較強的節點來運算,運作情況有點類似一台主機多顆 CPU 運算方式,OpenMosix 使得不同台電腦上的 CPU ,整合成像是一台擁有多顆 CPU 的超級電腦。

Note:OpenMosix 現階段只做到行程(Process)分散,不能做到執行緒(Thread)分散。

openMosix 架構示意圖檔

實做開始

俗話說:「工欲善其事,必先利其器。」,底下先行了解架設 openMosix 所需要軟、硬體設備,接著再按部就班實做,即可感受到 openMosix Cluster 威力。

事前準備-硬體部份

在硬體方面,openMosix 需要準備兩台以上的電腦,使用區域網路連接起來即可,電腦規格不盡相同也沒有關係,因為 openMosix Cluster 不一定需要相同硬體規格電腦所組成。舉例來說:您可以混用 Intel P3、P4 或 AMD K7、K8 主機當成叢集節點,唯一需注意到是必須使用相同版本的 openMosix Kernel,這與一般需要相同硬體規格的叢集系統不同,OpenMosix 會儘量分散負載給硬體規格較強的節點運算,『不需相同硬體規格』同時也是 openMosix 特色之一。

LAN 與 Nodes 示意圖檔

事前準備-軟體部份

因為 openMosix 作法是將 Linux kernel 部份改寫而成的 Cluster 系統,所以若要成為 openMosix Cluster ,簡單說就是把原來 Linux kernel 換成 openMosix 版本 kernel 就可以囉!我們可以到「http://openmosix.sourceforge.net/」下載「openMosix-kernel-2.4.26」(Kernel)與「openmosix-user」(Tools)工具。

筆者分別下載到的檔案名稱為:

 

openMosix 核心 RPM 格式檔案openMosix 工具 RPM 格式檔案
openmosix-kernel-2.4.26-openmosix1.i686.rpmopenmosix-tools-0.3.6-2.i386.rpm

另外較需注意的是,建議使用以 kernel 2.4 為基礎 Linux distribution(例如:RedHat 9 或 Fedora core 1 ),因為 openMosix 2.6 kernel 的版本至筆者截稿前,還在開發中(beta)階段,若讀者想測試看看 2.6 kernel 版本 openMosix,也可以自行下載做測試,只是實做難度會比 2.4 kernel 版本高出許多。

sourceforge.net 下載圖檔

實驗設備介紹

測試設備如下:使用一般乙太網路交換機連接起來的兩台電腦,分別為 Node A 與 Node B

 

 Node ANode B
處理器PIII 600 MHzPIII 600 MHz
記憶體192 MB SDRAM64 MB SDRAM
硬碟40 GB(IDE 介面)20 GB(IDE 介面)
網路卡100 Mbit 乙太網路100 Mbit 乙太網路
DistributionRedHat 9RedHat 9

安裝 openMosix kernel 與 openMosix tools

使用下列指令安裝 openMosix kernel 與 openMosix tools
「 rpm -ivh openmosix-kernel-2.4.26-openmosix1.i686.rpm 」
「 rpm -ivh openmosix-tools-0.3.6-2.i386.rpm 」

Note:在您安裝完 openmosix-tools 時,openmosix 服務( service openmosix )已經設定好成開機自動啟動。

進階學習:openMosix 會自動發現網路上其他 openMosix 節點,除非您自行編輯「/etc/openmosix.map」檔案來設定叢集節點。

openMosix 安裝圖檔

使用 openMosix kernel 開機並設定開機預設使用 openMosix kernel

在安裝完 openMosix kernel RPM 檔案後,會自動將開機選單寫入檔案「 /boot/grub/menu.lst」

其中 title 帶有 openmosix 字眼的就是 openMosix kernel 開機選單,而 title 沒有 openmosix 則是原來舊 kernel 的開機選單。

另外「 default=1 」代表開機使用『第二個』title(RedHat 9 內建的),若要使用第一個 title 開機(openMosix),則改成「 default=0 」(建議值)

Note:記得重新開機使用 openMosix kernel 來運行您的 Linux

menu.lst 圖檔

基礎測試與觀察

接下來使用指令「 mosmon 」來觀察 openmosix cluster 運作情形(按下 q 可離開 mosmon),當兩個 Node 皆正常使用 openmosix kernel 開機運行時,會自動偵測成為一個 Cluster 系統,下圖為兩個 Node 執行「 mosmon 」情形。

mosmon 圖檔

Tips:使用指令「 rpm -ql openmosix-tools | grep bin 」可列出所有 openmosix 工具指令(包括 mosmon)

list all openmosix tools 圖檔

實戰多媒體檔案轉換

電腦運算中,以多媒體(影音)檔案格式轉換最需要 CPU 資源,接下來我們藉由多媒體檔案格式轉換,來感受一下 openmosix cluster 威力。

將音樂 CD 轉出成 WAV 格式

接著將身邊隨便一片音樂 CD(不是 mp3 喔!),放入光碟機中。使用指令「 cdda2wav -B dev=/dev/hdc 」將所有光碟中的歌曲轉出到硬碟成 WAV 格式檔案。

上述指令中,參數 -B 代表「所有曲目」,dev 則指向到光碟機(/dev/hdc)

cdda2wav 圖檔

Tips:除了 cdda2wav 指令(套件)可以擷取出 WAV 檔案,還有一個常用是 cdparanoia 指令(套件)
同樣也是使用 -B 參數將所有曲目轉出,使用指令「 cdparanoia -B 」

cdparanoia 圖檔

WAV 轉成 ogg 格式

使用指令「 oggenc audio_01.wav 」或「oggenc track01.cdda.wav」來將 wav 格式轉成 ogg 格式檔案

oggenc 圖檔

Note:程式 oggenc 是放在「vorbis-tools」套件中

WAV 轉成 mp3 格式

使用指令「 lame -h audio_01.wav audio_01.mp3」或「lame -h track01.cdda.wav track01.cdda.mp3」來將 wav 格式轉成 mp3 格式檔案,-h 參數是 higher quality (高品質之意)

lame 圖檔

進階學習:許多 Linux Distribution 都沒有內建包含 lame 這個套件,所以欲使用 lame 的話,大多採用自行安裝方式,您可自行至「 http://lame.sourceforge.net/」下載、編譯與安裝 lame 或是從網路上找找看有沒有別人包裝好的 lame rpm 格式檔案,但使用來路不明 rpm 依然是有風險的。

Tips:筆者是在 http://ftp.freshrpms.net/pub/freshrpms/redhat/9/lame/lame-3.93.1-fr2.i386.rpm 下載到 lame 現成 rpm (RedHat 9 可使用)

下載 lame 圖檔

叢集測試報告

筆者準備 7 個長短不一的 WAV 檔,使用 oggenc 轉檔工具來測試「單機」與「叢集」差別,配合 scripts 來同時轉 7 個 WAV 檔,並將結果紀錄成檔案,觀察轉檔所需時間差別。

7 個 WAV 檔的大小如下:可使用「 ls -lh audio_0*.wav 」來一併顯示

-rw-r--r--    1 root     root          27M May 22 18:20 audio_01.wav
-rw-r--r--    1 root     root          32M May 22 18:21 audio_02.wav
-rw-r--r--    1 root     root          24M May 22 18:21 audio_03.wav
-rw-r--r--    1 root     root          24M May 22 18:21 audio_04.wav
-rw-r--r--    1 root     root          21M May 22 18:21 audio_05.wav
-rw-r--r--    1 root     root          24M May 22 18:21 audio_06.wav
-rw-r--r--    1 root     root          22M May 22 18:21 audio_07.wav

單機轉檔所需時間

筆者先以單機來轉檔,使用指令「for i in `seq 1 7`; do oggenc audio_0$i.wav 2> log$i.txt & done」

在所有 oggenc 行程皆執行完畢後,使用指令「grep Elapsed log?.txt」來觀察一次轉換 7 個 WAV 檔,每個檔案從開始轉換到結束所需時間(筆者的大約五分鐘)

Tips:上述指令其中 for 是用來跑迴圈的,seq 1 7 會預先執行產生「 1 2 3 4 5 6 7 」,交給 i 變成變數(也就是迴圈會跑 7 次),依序做 oggenc audio_01.wav ... 到 audio_07.wav 分別將錯誤輸出(2>)至 log1.txt ... 到 log7.txt,encode 後會產生 audio_01.ogg ... 到 audio_07.ogg

encode 單機 圖檔

Tips:在 encode 這段時間內,可執行「 top -d 1 」來觀察系統負載,load average 會上升(筆者測試值約 7),CPU 會幾乎 100% 被使用。

top 單機 圖檔

叢集轉檔所需時間

接著以叢集來轉檔,使用指令「for i in `seq 1 7`; do oggenc audio_0$i.wav 2> logMosix$i.txt & done」

其中有異動到的,只有 log 檔案改名為 logMosix1.txt ... 到 logMosix7.txt

在所有 oggenc 行程皆執行完畢後,使用指令「grep Elapsed logMosix?.txt」來觀察使用叢集系統後,在一次轉換 7 個 WAV 檔,每個檔案從開始轉換到結束所需時間是否比較短(筆者的大約三分鐘左右)

encode 叢集 圖檔

Tips:在使用叢集 encode 這段時間內,可執行「 mosmon 」來觀察叢集系統整體負載,也可按下 s / m / r 提供不同資訊,像是 cpu 、 記憶體 等等,也可以按下「 h 」觀看輔助說明,按下「 q 」離開 mosmon 執行畫面

mosmon 叢集 encode 圖檔

在使用叢集 encode 這段時間內,也是可以執行「 top -d 1 」來觀察系統負載,load average 會上升但會比單機數值低(筆者測試值約 3),還會明顯發現有些 oggenc 行程狀態是 s (Sleep)並且會耗用別台 cpu 資源來運算

top 叢集 圖檔

其他

為何要先轉成 WAV 再轉成 ogg 或 mp3 ?

其實 Linux 也是可以直接從音樂 CD 片轉成 ogg 或 mp3。我們測試時沒如此做,是考量 I/O 效能將會影響到測試結果的問題,畢竟 CD-ROM 算是一個較低速設備(相對於硬碟),所以先將 CD 音樂轉到硬碟,這樣 I/O 效能對於測試結果的影響會比較小些。

進階學習:指令「cdda2wav dev=/dev/hdc -t 2 - | oggenc - -o track2.ogg」可將第二首歌直接轉成 track2.ogg ,而「cdda2wav dev=/dev/hdc -t 2 - | lame -h - track2.mp3」則是轉成 mp3(其中 -t 2 是第二首歌、- 是標準輸出輸入之意)

直接轉成 ogg、mp3 圖檔

如果同時間只轉一首歌曲,效能上有差別嗎?

如果同時間只轉一首歌曲,意味著同時間只有一個 Process 需要大量運算資源,這時 openMosix 就無法滿足您需要的功能,意思是若是你「依序」轉十個音樂檔案,效能上則不會有太大差異,必須要「同時」轉十個音樂檔案,才會感受到差異。

Tips:若是您是要找「依序」轉檔也可加快速度之 cluster 系統,則需要另外想辦法

除了文字模式(例如:mosmon)工具外,openMosix 有無圖形化(GUI)工具?

在 openMosix 主網頁,可以連結到「openMosixview」,這是一個 openMosix 圖形監控工具,讀者若有興趣,也可以自行下載安裝及測試。

openMosixView 圖檔

openMosix 可使用 Live CD 嗎?(光碟開機運作)

在 openMosix 主網頁連結「Instant Clusters」可以看到 openMosix 使用 DVD、CD 就可以運行的一些相關資料,這樣就可以使用無硬碟主機當作叢集節點。

Instant Clusters 圖檔

該如何編寫 /etc/openmosix.map 來限定叢集節點?

一般最簡便方式,就是使用 openMosix 自動發現網路上叢集功能,若是想要限制叢集節點成員,可參考 /etc/openmosix.map 內容來設定。

openmosix.map 圖檔

openMosix 可以應用在那方面?

openMosix 應該會是應用在需要執行很多行程(Multi Process)但單機卻無法負荷,有著很重 loading ,需要多 CPU 運算情形,比如說點閱率很高之 Web Site、郵件量很重的 Mail Server 或是查詢量很大之資料庫服務,另外一項重點是:openMosix 也許能幫您節省下不少費用。

openMosix 如何做磁碟共享?

一般 Unix 上磁碟共享常常採用 NFS,openMosix 也可以這樣做,另外 openMosix 還提供一種 MFS 檔案系統,你可以撰寫每一個節點之 /etc/fstab 加入這一行「 cluster /mfs mfs odfsa=1 0 0 」然後做出掛載點「 mkdir /mfs 」在重開機或是重起 openMosix 服務即發現 /mfs/<node>/ 下會是節點之檔案系統資料

Note:我們這一版由 rpm 檔案格式安裝 openMosix 經過測試後,發現她不支援 mfs 檔案系統,所以需要測試 mfs 功能的朋友,需自行下載 openmosix 之 tar.gz 格式檔案來編譯與安裝,才能使 openMosix 支援 mfs 檔案系統

如何在 Linux 下播放轉換出來的 ogg 與 mp3?

ogg 格式使用指令「 ogg123 <ogg檔案> 」來播放,mp3 格式則使用指令「 mpg321 <mp3檔案>」來播放

oggenc、ogg123、oggdec 皆是套件 vorbis-tools 成員,通常 ditribution 就內建 vorbis-tools 所以直接找安裝光碟將套件裝起來就可以用了

mpg321 來源 http://mpg321.sourceforge.net/ ,在 redhat 9 有非官方 rpm 下載點列於下表:

另外 mpg321 還相依於 libid3tag 與 libmad 套件,需一併安裝方可使用

 

mpg321http://rpmfind.net/linux/RPM/dag/redhat/9/i386/mpg321-0.2.10-8.rh9.rf.i386.html
libid3taghttp://fr.rpmfind.net/linux/RPM/dag/redhat/9/i386/libid3tag-0.15.1b-3.0.rh9.dag.i386.html
libmadhttp://rpmfind.net/linux/RPM/dag/redhat/9/i386/libmad-0.15.1b-3.0.rh9.dag.i386.html

Tips:播放前最好先測試音效卡是否已經正常驅動,否則將無法播放。

ogg 播放 圖檔

筆者在此次測試所使用到 rpm 列表

測試採用 RedHat 9 英文方式、最小安裝、沒有開啟防火牆,之後補裝套件列表如下:

主要使用到軟體:openmosix-kernel、openmosix-tools、cdda2wav、cdparanoia、vorbis(oggenc 與 ogg123)、lame、mpg321 等等(其餘因為相依性而安裝)

arts-1.1-7.i386.rpm
audiofile-0.2.3-6.i386.rpm
cdda2wav-2.0-6.i386.rpm
curl-7.9.8-5.i386.rpm
esound-0.2.28-4.i386.rpm
fontconfig-2.1-9.i386.rpm
freetype-2.1.3-6.i386.rpm
lame-3.93.1-fr2.i386.rpm
libao-0.8.3-3.i386.rpm
libid3tag-0.15.1b-3.0.rh9.dag.i386.rpm
libjpeg-6b-26.i386.rpm
libmad-0.15.1b-3.0.rh9.dag.i386.rpm
libmng-1.0.4-3.i386.rpm
libogg-1.0-4.i386.rpm
libpng-1.2.2-16.i386.rpm
libvorbis-1.0-7.i386.rpm
mpg321-0.2.10-8.rh9.rf.i386.rpm
openmosix-kernel-2.4.26-openmosix1.i686.rpm
openmosix-tools-0.3.6-2.i386.rpm
qt-3.1.1-6.i386.rpm
vorbis-tools-1.0-3.i386.rpm
XFree86-libs-4.3.0-2.i386.rpm
XFree86-libs-data-4.3.0-2.i386.rpm
XFree86-Mesa-libGL-4.3.0-2.i386.rpm
XFree86-Mesa-libGLU-4.3.0-2.i386.rpm

Valid XHTML 1.0! Valid CSS! Get Firefox

Creative Commons License
This site is licensed under a Creative Commons Attribution 2.5 Taiwan License.