11.15 Linux RAID(磁盤陣列)完全攻略
LVM 最大的優(yōu)勢在于可以在不卸載分區(qū)和不損壞數(shù)據(jù)的情況下進行分區(qū)容量的調(diào)整,但是萬一硬盤損壞了,那么數(shù)據(jù)一定會丟失。 本節(jié)講的 raid(磁盤陣列)的優(yōu)勢在于硬盤讀寫性能更好,而且有一定的數(shù)據(jù)冗余功能。
raid 功能已經(jīng)內(nèi)置在 linux 2.0 及以后的內(nèi)核中,為了使用這項功能,還需要特定的工具來管理 RAID,在絕對多數(shù) linux 發(fā)行版本中,更多的是使用 mdadm,讀者可以自行下載并安裝這個工具。
RAID 簡介
RAID(Redundant Arrays of Inexpensive Disks,磁盤陣列),翻譯過來就是廉價的、具有冗余功能的磁盤陣列。其原理是通過軟件或硬件將多塊較小的分區(qū)組合成一個容量較大的磁盤組。這個較大的磁盤組讀寫性能更好,更重要的是具有數(shù)據(jù)冗余功能。
那什么是數(shù)據(jù)冗余呢?從字面上理解,冗余就是多余的、重復的。在磁盤陣列中,冗余是指由多塊硬盤組成一個磁盤組,在這個磁盤組中,數(shù)據(jù)存儲在多塊硬盤的不同地方,這樣即使某塊硬盤出現(xiàn)問題,數(shù)據(jù)也不會丟失,也就是磁盤數(shù)據(jù)具有了保護功能。
讀者也可以這樣理解,RAID 用于在多個硬盤上分散存儲數(shù)據(jù),并且能夠“恰當”地重復存儲數(shù)據(jù),從而保證其中某塊硬盤發(fā)生故障后,不至于影響整個系統(tǒng)的運轉(zhuǎn)。RAID 將幾塊獨立的硬盤組合在一起,形成一個邏輯上的 RAID 硬盤,這塊“硬盤”在外界(用戶、LVM等)看來,和真實的硬盤一樣,沒有任何區(qū)別。
RAID 的組成可以是幾塊硬盤,所以我們在講解原理時使用硬盤舉例,但是大家要知道不同的分區(qū)也可以組成 RAID。
RAID 根據(jù)組合方式的不同,有多種設計解決方案,以下介紹幾種常見的 RAID 方案(RAID 級別)。
RAID 0
RAID 0 也叫 Stripe 或 Striping(帶區(qū)卷),是 RAID 級別中存儲性能最好的一個。RAID 0 最好由相同容量的兩塊或兩塊以上的硬盤組成。如果組成 RAID 0 的兩塊硬盤大小不一致,則會影響 RAID 0 的性能。
這種模式下會先把硬盤分隔出大小相等的區(qū)塊,當有數(shù)據(jù)需要寫入硬盤時,會把數(shù)據(jù)也切割成相同大小的區(qū)塊,然后分別寫入各塊硬盤。這樣就相當于把一個文件分成幾個部分同時向不同的硬盤中寫入,數(shù)據(jù)的讀/寫速度當然就會非常快。
從理論上講,由幾塊硬盤組成 RAID 0,比如由 3 塊硬盤組成 RAID 0,數(shù)據(jù)的寫入速度就是同樣的數(shù)據(jù)向一塊硬盤中寫入速度的 3 倍。我們畫一張 RAID 0 的示意圖,如圖 1 所示。
解釋一下這張示意圖。我們準備了 3 塊硬盤組成了 RAID 0,每塊硬盤都劃分了相等的區(qū)塊。當有數(shù)據(jù)要寫入 RAID 0 時,首先把數(shù)據(jù)按照區(qū)塊大小進行分割,然后再把數(shù)據(jù)依次寫入不同的硬盤。每塊硬盤負責的數(shù)據(jù)寫入量都是整體數(shù)據(jù)的 1/3,當然寫入時間也只有原始時間的 1/3。所以,從理論上講,由幾塊硬盤組成 RAID 0,數(shù)據(jù)的寫入速度就是數(shù)據(jù)只寫入一塊硬盤速度的幾倍。
RAID 0 的優(yōu)點如下:
通過把多塊硬盤合并成一塊大的邏輯硬盤,實現(xiàn)了數(shù)據(jù)跨硬盤存儲。
通過把數(shù)據(jù)分割成等大小的區(qū)塊,分別存入不同的硬盤,加快了數(shù)據(jù)的讀寫速度。數(shù)據(jù)的讀/寫性能是幾種 RAID 中最好的。
多塊硬盤合并成 RAID 0,幾塊小硬盤組成了更大容量的硬盤,而且沒有容量損失。RAID 0 的總?cè)萘烤褪菐讐K硬盤的容量之和。
RAID 0 有一個明顯的缺點,那就是沒有數(shù)據(jù)冗余功能,RAID 0 中的任何一塊硬盤損壞,RAID 0 中所有的數(shù)據(jù)都將丟失。也就是說,由幾塊硬盤組成 RAID 0,數(shù)據(jù)的損毀概率就是只寫入一塊硬盤的幾倍。
我們剛剛說了,組成 RAID 0 的硬盤的大小最好都是一樣的。那有人說我只有兩塊不一樣大小的硬盤,難道就不能組成 RAID 0 嗎?
答案是可以的。假設有兩塊硬盤,一塊大小是 100GB,另一塊大小是 200GB。由這兩塊硬盤組成 RAID 0,那么當最初的 200G 數(shù)據(jù)寫入時,是分別存放在兩塊硬盤當中的;但是當數(shù)據(jù)大于 200GB 之后,第一塊硬盤就寫滿了,以后的數(shù)據(jù)就只能寫入第二塊硬盤中,讀/寫性能也就隨之下降了。
一般不建議企業(yè)用戶使用 RAID 0,因為數(shù)據(jù)損毀的概率更高。如果對數(shù)據(jù)的讀/寫性能要求非常高,但對數(shù)據(jù)安全要求不高時,RAID 0 就非常合適了。
RAID 1
RAID 1 也叫 Mirror 或 Mirroring(鏡像卷),由兩塊硬盤組成。兩塊硬盤的大小最好一致,否則總?cè)萘恳匀萘啃〉哪菈K硬盤為主。RAID 1 就具備了數(shù)據(jù)冗余功能,因為這種模式是把同一份數(shù)據(jù)同時寫入兩塊硬盤。
比如有兩塊硬盤,組成了 RAID 1,當有數(shù)據(jù)寫入時,相同的數(shù)據(jù)既寫入硬盤 1,也寫入硬盤 2。這樣相當于給數(shù)據(jù)做了備份,所以任何一塊硬盤損壞,數(shù)據(jù)都可以在另一塊硬盤中找回。RAID 1 的示意圖如圖 2 所示。
RAID 1 具有了數(shù)據(jù)冗余功能,但是硬盤的容量卻減少了 50%,因為兩塊硬盤當中保存的數(shù)據(jù)是一樣的,所以兩塊硬盤際上只保存了一塊硬盤那么多的數(shù)據(jù),這也是我們把 RAID 1 稱作鏡像卷的原因。
RAID 1 的優(yōu)點如下:
具備了數(shù)據(jù)冗余功能,任何一塊硬盤出現(xiàn)故障,數(shù)據(jù)都不會丟失。
數(shù)據(jù)的讀取性能雖然不如 RAID 0,但是比單一硬盤要好,因為數(shù)據(jù)有兩份備份在不同的硬盤上,當多個進程讀取同一數(shù)據(jù)時,RAID 會自動分配讀取進程。
RAID 1 的缺點也同樣明顯:
RAID 1 的容量只有兩塊硬盤容量的 50%,因為每塊硬盤中保存的數(shù)據(jù)都一樣。
數(shù)據(jù)寫入性能較差,因為相同的數(shù)據(jù)會寫入兩塊硬盤當中,相當于寫入數(shù)據(jù)的總?cè)萘孔兇罅恕km然 CPU 的速度足夠快,但是負責數(shù)據(jù)寫入的芯片只有一個。
RAID 10 或 RAID 01
我們發(fā)現(xiàn),RAID 0 雖然數(shù)據(jù)讀/寫性能非常好,但是沒有數(shù)據(jù)冗余功能;而 RAID 1 雖然具有了數(shù)據(jù)冗余功能,但是數(shù)據(jù)寫入速度實在是太慢了(尤其是軟 RAID)。
那么,我們能不能把 RAID 0 和 RAID 1 組合起來使用?當然可以,這樣我們就即擁有了 RAID 0 的性能,又擁有了 RAID 1 的數(shù)據(jù)冗余功能。
我們先用兩塊硬盤組成 RAID 1,再用兩塊硬盤組成另一個 RAID 1,最后把這兩個 RAID 1 組成 RAID 0,這種 RAID 方法稱作 RAID 10。那先組成 RAID 0,再組成 RAID 1 的方法我們作 RAID 01。我們通過示意圖 3 來看看 RAID 10。
我們把硬盤 1 和硬盤 2 組成了第一個 RAID 1,把硬盤 3 和硬盤 4 組成了第二個 RAID 1,這兩個 RAID 1 組成了 RAID 0。因為先組成 RAID 1,再組成 RAID 0,所以這個 RAID 是 RAID 10。
當有數(shù)據(jù)寫入時,首先寫入的是 RAID 0(RAID 0 后組成,所以數(shù)據(jù)先寫入),所以數(shù)據(jù) 1 和數(shù)據(jù) 3 寫入了第一個 RAID 1,而數(shù)據(jù) 2 和數(shù)據(jù) 4 寫入了第二個 RAID 1。當數(shù)據(jù) 1 和數(shù)據(jù) 3 寫入第一個 RAID 1 時,
因為寫入的是 RAID 1,所以在硬盤 1 和硬盤 2 中各寫入了一份。數(shù)據(jù) 2 和數(shù)據(jù) 4 也一樣。
這樣的組成方式,既有了 RAID 0 的性能優(yōu)點,也有了 RAID 1 的數(shù)據(jù)冗余優(yōu)點。但是大家要注意,雖然我們有了 4 塊硬盤,但是由于 RAID 1 的缺點,所以真正的容量只有 4 塊硬盤的 50%,另外的一半是用來備份的。
RAID 5
RAID 5 最少需要由 3 塊硬盤組成,當然硬盤的容量也應當一致。當組成 RAID 5 時,同樣需要把硬盤分隔成大小相同的區(qū)塊。當有數(shù)據(jù)寫入時,數(shù)據(jù)也被劃分成等大小的區(qū)塊,然后循環(huán)向 RAID 5 中寫入。
每次循環(huán)寫入數(shù)據(jù)的過程中,在其中一塊硬盤中加入一個奇偶校驗值(Parity),這個奇偶校驗值的內(nèi)容是這次循環(huán)寫入時其他硬盤數(shù)據(jù)的備份。當有一塊硬盤損壞時,采用這個奇偶校驗值進行數(shù)據(jù)恢復。通過示意圖來看看 RAID 5 的存儲過程,如圖 4 所示。
在這張示意圖中,我們使用三塊硬盤組成了 RAID 5。當有數(shù)據(jù)循環(huán)寫入時,每次循環(huán)都會寫入一個奇偶校驗值(Parity),并且每次奇偶校驗值都會寫入不同的硬盤。這個奇偶校驗值就是其他兩塊硬盤中的數(shù)據(jù)經(jīng)過換算之后產(chǎn)生的。因為每次奇偶校驗值都會寫入不同的硬盤,所以任何一塊硬盤損壞之后,都可以依賴其他兩塊硬盤中保存的數(shù)據(jù)恢復這塊損壞的硬盤中的數(shù)據(jù)。
需要注意的是,每次數(shù)據(jù)循環(huán)寫入時,都會有一塊硬盤用來保存奇偶校驗值,所以在 RAID 5 中可以使用的總?cè)萘渴怯脖P總數(shù)減去一塊的容量之和。
比如,在這張示意圖中,由三塊硬盤組成了 RAID 5,但是真正可用的容量是兩塊硬盤的容量之和,也就是說,越多的硬盤組成 RAID 5,損失的容量占比越小,因為不管由多少塊硬盤組成 RAID 5,奇偶校驗值加起來只占用一塊硬盤。而且還要注意,RAID 5 不管是由幾塊硬盤組成的,只有損壞一塊硬盤的情況才能恢復數(shù)據(jù),因為奇偶校驗值加起來只占用了一塊硬盤,如果損壞的硬盤超過一塊,那么數(shù)據(jù)就不能再恢復了。
RAID 5 的優(yōu)點如下:
因為奇偶校驗值的存在,RAID 5 具有了數(shù)據(jù)冗余功能。
硬盤容量損失比 RAID 1 小,而且組成 RAID 5 的硬盤數(shù)量越多,容量損失占比越小。
RAID 5 的數(shù)據(jù)讀/寫性能要比 RAID 1 更好,但是在數(shù)據(jù)寫入性能上比 RAID 0 差。
RAID 5 的缺點如下:
不管由多少塊硬盤組成 RAID 5,只支持一塊硬盤損壞之后的數(shù)據(jù)恢復。
RAID 5 的實際容量是組成 RAID 5 的硬盤總數(shù)減去一塊的容量之和。也就是有一塊硬盤用來保存奇偶校驗值,但不能保存數(shù)據(jù)。
從總體上來說,RAID 5 更像 RAID 0 和 RAID 1 的折中,性能比 RAID 1 好,但是不如 RAID 0;數(shù)據(jù)冗余比 RAID 0 好,而且不像RAID 1 那樣浪費了 50% 的硬盤容量。
軟 RAID 和硬 RAID
我們要想在服務器上實現(xiàn) RAID,可以采用磁盤陣列卡(RAID 卡)來組成 RAID,也就是硬 RAID。RAID 卡上有專門的芯片負責 RAID任務,因此性能要好得多,而且不占用系統(tǒng)性能,缺點是 RAID 卡比較昂貴。
如果我們既不想花錢又想使用 RAID,那就只能使用軟 RAID 了。軟 RAID 是指通過軟件實現(xiàn) RAID 功能,沒有多余的費用,但是更加耗費服務器系統(tǒng)性能,而數(shù)據(jù)的寫入速度比硬 RAID 慢。
Linux 云備份
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。