2009年11月13日

開放源碼虛擬平台—Linux VServer

在一般的情況下,每一部電腦只能同時使用一種作業系統。雖然有些技術或方法可以讓電腦同時安裝兩套 以上的作業系統,並透過多重開機的方式讓使用者在電腦開機時選擇想要執行的作業系統,但這樣的方式在同一時間還是只能執行其中一套作業系統,無法達到同時 執行不同作業系統的需求。為了解決這樣的問題,虛擬平台軟體很自然地在市面上出現,例如VMWare、VirtualBox等軟體都是使用這種技術所開發 出來的工具軟體。
虛 擬平台技術在這幾年可以說是大為流行,最主要的原因是這樣的技術可以讓使用者同時執行不同的作業系統,而且彼此互不干擾,即使虛擬平台中的作業系統 (Guest OS)發生問題,原先電腦所安裝的作業系統(Host OS)也不會因此而受到影響。虛擬平台可以說是虛擬化技術的其中一種,如果將說法簡化,虛擬化技術可以將電腦上的實際硬體資源進行分割,讓一部電腦同時執 行數種不同的作業環境。

大多數人可能會認為虛擬化技術只有類似VMWare或VirtualBox這種運作模式,也就是在Host OS中安裝一套軟體,藉由此軟體模擬出一部虛擬機器,再由使用者在此主機上進行作業系統的安裝。事實上,虛擬技術並非只有這種運作方式,虛擬化技術有許多 種選擇,並不是只有一種應用方式。比較常見的大約有四種,即模擬器、平行虛擬化、原生虛擬化與作業系統階層的虛擬化等等。

虛擬化技術的種類

以下分別介紹常見的模擬器、平行虛擬化、原生虛擬化以及作業系統階層的虛擬化等四種虛擬化技術。

模擬器(Emulation)

模擬器的原文是Emulator,但因為另外一個類似的單字Simulator也可以翻譯成模擬器,所以此處會以英文名詞作為區隔。簡而言 之,Emulator可以讓原先設計在A平台(此處的平台可能是電腦硬體架構,如不同的CPU;或是不同的作業系統)的程式,可以在原先並未直接支援的B 平台上執行。目前市面上常見的虛擬平台軟體,譬如VMWare或VirtualBox等等,便是屬於此一類型的虛擬化技術之實現。

與Simulator不同的是,Emulator會嘗試將被模擬的平台完整重現,執行時整體環境等於是在某平台上面建立出另外一個相同或不相同的作業平 台。但Simulator則只是讓程式的執行結果在不同的作業平台上重現,重點放在相異平台的程式如何在目前平台上執行,而不是模擬出真實環境供此程式執 行。

被模擬出來的作業平台,通常會被稱為虛擬主機。虛擬主機可以模擬出完整的硬體架構,並允許作業系統在未經過修改的情況下直接在原先不支援的CPU架構上執行。而一般所謂的「動態重新編譯技術」,指的也正是此種模擬技術。

平行虛擬化(Paravirtualization)

平行虛擬化的技術會提供一個虛擬主機的軟體介面,此介面十分類似其下的硬體所提供之架構,但並非完全雷同。此介面的目的在於,減少Guest OS進行一些不適合在虛擬環境下的處理動作時所花費的執行時間。對於這些工作,平行虛擬化技術可以讓虛擬機器監視器(Vitrual Machine Monitor)的設計變得較為簡化,也就是將這些可能造成效能問題的工作從Guest OS移到Host OS之中執行,以避免整體效能下降的問題發生。

使用平行虛擬化技術時,Guest OS本身需要移植相關的API開發介面,否則此OS無法在平行虛擬化的虛擬主機上執行。

原生虛擬化(Native Virtualization)

原生虛擬化技術基本上只模擬了部分所需的硬體裝置,並允許未經修改的Guest OS在系統中隔離運作。但這種虛擬技術因為沒有完整模擬所有的硬體,所以Guest OS在使用上有些限制。例如Guest OS與Host OS在設計時決定使用的CPU種類必須是相同的架構,才能進行模擬。

作業系統階層的虛擬化

作業系統階層的虛擬化,基本上可以視為是在作業系統核心階層將伺服器虛擬化的一種虛擬化技術。實際上執行作業系統的主機只有一部,但經過適當的「分割」作 業,即可將主機切割成數個較小的計算單元。每一個計算單元在外觀或操作上都像是一部實際的伺服器主機,亦可當成是UNIX系統中的chroot技術之進階 延伸。

Linux的VServer技術

由於計算機軟硬體技術的持續進步,讓使用者在一部電腦主機中建立數個虛擬主機,並且在每一個虛擬主機中執行不同的作業系統變得越來越容易。使用者甚至可以 將專門針對A架構所設計的作業系統,直接在B架構的CPU上執行。此時在Guest OS中所見到的硬體裝置,有些可能與Host OS共享,有些則是以模擬的方式建立。這樣的虛擬化技術雖然方便,可以提供一部主機同時執行不同的作業系統。如果使用者只想在主機上建立不同的虛擬主機, 但每一部虛擬主機執行的作業系統都相同,且共用實際上的硬體資源時,在這樣的情況下,採用像VMWare之類的虛擬主機系統顯得有些龐大,若改用 VServer技術或許可以更加貼近使用者的需求。因為大多數的程式本身並不需要直接存取硬體,也不會動用到Linux核心的程式碼。以VServer的 方式讓實際主機切割成數個不同的虛擬主機,在操作上方便許多。

Linux系統上的VServer本身是一種軟體分割概念,可以在一部實際的主機上建立許多虛擬私有伺服器(Virtual Private Server,VPS),並讓這些虛擬伺服器同時全速執行,且有效率地共享硬體資源。一部VPS可以提供幾乎接近傳統Linux伺服器所能提供的作業環 境,無論是系統服務、伺服器等各種軟體程式,都能在無須修改的情況下直接於VPS中執行,如同在實際主機上執行一般。

每一部VPS基本上都擁有各自的使用者帳號資料庫,root密碼也可以各自設定,彼此獨立而且不會互相干擾。從軟體上的觀點來看,每一部VPS都是獨立運作的主機。但如果從硬體觀點來看,事實上這些VPS存取的硬體資源都是同樣的設備或裝置。

為什麼會有這種VServer的VPS使用需求?假設主機的硬體資源相當充足,可以執行十倍於一般Linux主機在正常情況下所執行的程式數量,理論上並 不需要進行切割。但試想如果將這樣的主機切割成十部彼此獨立的小型虛擬主機,並且以更有效率的方式共享所有資源,則處理難度會降低許多。例如調整Web Server的效能時,也許會影響到Mail Server程式的執行結果。如果將這兩個伺服器程式放到不同的虛擬主機中,並各自針對彼此所需的部分進行最佳化,則因為這兩個程式執行時互不干擾,自然 也就不會出現衝突問題。

此外,萬一Web Server的程式發生問題遭人入侵,也不必擔心Mail Server的部分會跟著淪陷。因為VServer所建立的虛擬主機彼此獨立,自然不會因為單一系統或程式所產生的問題而造成其他服務也受到影響。

VServer目前僅支援Linux作業系統,因為這是屬於作業系統階層的虛擬化技術,所以實際主機的作業系統僅能使用開發時所設定的執行平 台:Linux。但在使用時,可以指定虛擬主機所模擬的Linux發行版本,例如實際主機執行的是Fedora系統,但虛擬主機則指定為Debian或其 他有支援的發行版本。

VServer的用途

一談到虛擬化技術,許多人會覺得那是有特殊需求的技術人員才會使用的高深工具。也許看起來十分新潮,但實際上沒有太大用途,也不適合所有人的使用需求。這 樣的想法在VServer技術上並不成立,因為VServer專案的主要目的,便是要讓系統管理員的工作儘量簡化,並且不會影響到主機上其他服務的正常運 作。

在硬體技術越來越發達的今天,各種作業系統都能夠允許在一部主機上同時執行更多工作,Linux也不例外。但這樣的作業環境在進行系統更新時是相當麻煩的 事情,因為要同時讓系統中已登入的使用者先行離線,並停止所有服務會是一件很困難的工作,尤其是作為主要伺服器的機器。

另外,無論系統上所執行的服務或程式彼此是否相近,都有可能在執行時互相影響。有些可能是因為設計時考慮不周詳所導致的後果,有些則是單純的彼此不相容,而且無法輕易解決,甚至無法排除這種衝突現象。

如果使用VServer技術,則上述現象都可輕易避免。將主機劃分為相同的虛擬主機,並在每個虛擬主機上執行不同的程式或服務。此時如果需要更新某個系統服務,也不必擔心這樣的更新動作會影響到其他程式或服務的執行。

由於VServer的每一部虛擬主機所使用的帳號、密碼資料庫並不互相共用,所以可以將網頁伺服器的管理者帳號與密碼直接傳遞給相關的人員,不必擔心這些 人會因為取得系統管理權而存取到其他服務或伺服器的相關資料。只要經過適當規劃,使用VServer技術讓不同服務的負責人只能處理各自負責的檔案或軟 體,並不是一件太困難的事。

除了在管理上的便利性之外,VServer也可以有效增進系統安全性。在未使用VServer的情況下,系統上任何一項服務或是程式的漏洞,都可能造成整 個系統被人攻擊的後果。但如果主機使用VServer技術,因為每一部虛擬主機各自擁有自己的使用環境,因此單一軟體或服務所造成的問題,並不會影響到其 他虛擬主機,更不會讓實際主機產生任何問題。

此外,因為VServer的虛擬主機採用較為嚴格的紀錄檔處理方式,所以虛擬主機本身無法更改或刪除紀錄檔的內容。即使該虛擬主機因為任何問題遭人入侵, 也不必擔心紀錄檔會被刪除而無法找出入侵紀錄的問題。另外,系統管理員也可以執行入侵偵測系統,在不被虛擬主機使用者察覺的情況下檢測虛擬主機的狀態。如 果該虛擬主機有安全上的問題,可以在入侵者尚未發現的情況下通知系統管理員,以提高系統的整體安全性。

VServer還可以達到資源獨立的執行狀態,也就是所有的虛擬主機都只是實際硬體的使用者,無法進行磁碟設定,不能更改核心程式,也不需要進行網路設 定。如此一來,大多數的硬體問題都不會影響到虛擬主機本身,所有的硬體細節設定都是由實際主機負責處理。也因為虛擬主機本身並不需要處理硬體方面的問題, 所以如果要將虛擬主機從一部實際主機移至另一部實際主機,在作業方面並不會有太大問題,需要進行的動作也只是相當簡單的幾個指令即可完成。

而在需要進行系統更新時,如果主機本身是主要的伺服器,自然不能輕易安裝新的更新軟體。萬一更新軟體本身有未被發現的問題,直接安裝很可能讓主機無法再度 正常運作。以往在未使用VServer技術時,最普遍的做法是將更新軟體在另一部功能相近的硬體上先行更新,確認不會有運作上的問題後,再回到實際運作的 主機上進行更新。但有時候二部主機的硬體未必相同,很可能在測試主機上不會有問題,但卻在正式主機上發現新問題。

這時候如果使用VServer並先行建立一部虛擬主機,將更新程式套用到此虛擬主機中,即可觀察更新程式會不會產生問題。萬一發生問題,也只需要移除此虛 擬主機即可,不需要進行主要伺服器的環境修復。除了更新程式之外,任何需要經過詳細測試的開發中軟體,也可以使用這種方式進行測試。

而在Linux世界中,最常被詢問的問題便是「那一套發行版本最適合XX用途使用?」。這個問題事實上並沒有標準答案,因為每個人都有自己所喜好的 Linux發行版本,也很可能只熟悉特定的發行版本。所以同樣的工作應該在何種發行版本上執行,很可能同時會得到Fedora、Ubuntu、 Debian等各種不同的答案,其中還可能受到當時所流行的Linux發行版本之影響。

因為該使用何種發行版本是相當主觀的問題,所以最好的解決辦法,還是實際安裝該發行版本進行測試。與更新軟體所遭遇的問題相同,為了進行測試,很可能需要 另行準備主機,並安裝待測的Linux發行版本。如果有了VServer的支援,則選擇發行版本便不再是使用Linux時的重要決策。由於VServer 在建立虛擬主機時可以指定虛擬主機所使用的發行版本為何,因此可以在實際進行測試後,再決定準備採用的發行版本,以避免各種問題的出現。

安裝注意事項

雖然VServer本身可以使用原始碼進行安裝,但因為安裝過程較為繁複,建議直接使用發行版本所提供的軟體套件管理功能進行安裝,可以省下許多麻煩。以Ubuntu 9.10為例,其安裝過程如下所示:

STEP 1執行「sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com BB9BFB5B」將金鑰匯入。

STEP 2在「/etc/apt/sources.list」中加入下列二行:

deb http://ppa.launchpad.net/christoph-lukas/ppa/ ubuntu karmic main deb-src http://ppa.launchpad.net/christoph-lukas/ppa/ ubuntu karmic main

STEP 3使用APT進行安裝:

sudo apt-get update sudo apt-get install linux-image-vserver linux-headers -vserver util-vserver

至於其他Linux發行版本的安裝過程,可以參考VServer官方網站所提供的安裝說明文件。一般而言依照文件中的說明操作,即可直接完成安裝過程,也不至於會遭遇預期之外的問題。

結語

虛擬主機技術早已經業界相當重視的一環,相關的軟體也有許多公司投入研發。雖然許多知名的虛擬主機軟體採用商業授權的方式發行,但這並不代表需要使用虛擬 主機技術的使用者非得花錢購買版權軟體不可。更何況並不是每個人都需要採用模擬器型態的虛擬主機軟體,作業系統階層的虛擬化技術,已經可以滿足許多人的需 求,而且在使用上也有許多不可取代的優點。由於篇幅限制,本文無法詳細介紹VServer虛擬主機的建立方式與操作方法,將來如果有機會再詳加介紹。

http://www.netadmin.com.tw/article_content.asp?sn=0911050001

沒有留言:

發佈留言