磁盤陣列(RAID)實例詳解
raid技術分類
軟raid技術
硬raid技術
Raid和lvm的區別
爲什麼選擇用raid
RAID詳解
RAID-0
RAID-1
RAID-5
Raid-10
Raid的管理
案例:創建一個raid10+冗餘盤
磁盤陣列(RAID)實例詳解
Raid(磁盤陣列)級別介紹
Raid有”廉價磁盤冗餘陣列”的意思,就是利用多塊廉價的硬盤組成磁盤組,讓數據分部儲存在這些硬盤裏面,從而達到讀取和寫入加速的目的;也可以用作數據的冗餘,當某塊硬盤損毀後,其他硬盤可以通過冗餘數據計算出損壞磁盤的數據,這樣就提高了數據儲存的安全性。可以提供較普通磁盤更高的速度、安全性,所以服務器在安裝時都會選擇創建RAID。RAID的創建有兩種方式:軟RAID(通過操作系統軟件來實現)和硬RAID(使用硬件陣列卡)。
raid技術分類
常見的raid技術分兩類
基於硬件raid技術和基於軟件的raid技術
軟raid技術
在Linux下安裝系統的過程中或者安裝系統後通過自帶的軟件就能實現raid功能,使用軟raid可省去購買硬件raid控制器和附件就能極大地增強磁盤的IO性能和可靠性,由於是用軟件實現的raid功能,所以它配置靈活,管理方便,同時使用軟件raid,還可以將幾個物理磁盤合併成一個更大的虛擬設備,從而達到性能改進和數據冗餘的目的
硬raid技術
基於硬件raid解決方案比基於軟件raid技術在使用性能和服務性能上會更勝一籌,具體表現在檢測和修復多位錯誤的能力,錯誤磁盤自動檢測和陣列重建等方面,從安全性能考慮,基於硬件的raid解決方案也是更安全的,因此,在實際的生產場景工作中,基於硬件的raid解決方案應該是我們的首選,互聯網公司常用的生產dell服務器,默認就會支持raid0,1。如果raid5,10就需要買raid卡(或者個別配置自帶有,購買前,看參數)
Raid和lvm的區別
LVM(Logical Volume Manager)是Linux環境下對硬盤分區進行管理的一種機制,可以實現多塊硬盤空間的動態劃分和調整,跨硬盤儲存文件等功能。常用於裝備大量硬盤並隨時需要增加或刪除硬盤的環境,也同樣適於僅有一、兩塊硬盤的環境。(可以靈活的管理磁盤容量,讓磁盤分區隨意變大變小,便於管理磁盤剩餘的容量)如果過於強調性能和備份,還是優先選擇硬件raid功能
爲什麼選擇用raid
磁盤陣列可以把多個磁盤驅動器通過不同的連接方式連接在一起協同辦公,大大提高了讀寫速度,同時把磁盤系統的可靠性提高到接近無措的境界,使其可靠性極高。
用raid最直接的好處是:
提高數據安全性
提升數據讀寫性能
提供更大的單一邏輯磁盤數據容量存儲
RAID詳解
RAID-0
D1 | D2 |
數據1 | 數據2 |
數據3 | 數據4 |
數據5 | 數據6 |
RAID-0 :striping(條帶模式)特點:在讀寫的時候可以實現併發,所以相對其讀寫性能最好,每個磁盤都保存了完整數據的一部分,讀取也採用並行方式,磁盤數量越多,讀取和寫入速度越快。因爲沒有冗餘,一個硬盤壞掉全部數據丟失。至少兩塊硬盤才能組成Raid0陣列。
容量:所有硬盤之和。磁盤利用率爲100%。
生產應用場景
1、負載均衡集羣下面的多個相同RS節點服務器
2、分佈式文件存儲下面的主節點或CHUNK server
3、MySQL主從複製的多個slave服務器
4、對性能要求很高,對冗餘要求很低的相關業務
RAID-1
D1 | D2 |
數據1 | 數據1 |
數據2 | 數據2 |
數據3 | 數據3 |
RAID-1 :mirroring(鏡像卷),至少需要兩塊硬盤,raid大小等於兩個raid分區中最小的容量(最好將分區大小分爲一樣),數據有冗餘,在存儲時同時寫入兩塊硬盤,實現了數據備份;
磁盤利用率爲50%,即2塊100G的磁盤構成RAID1只能提供100G的可用空間。
RAID-5
D1 | D2 | D3 |
數據1 | 數據2 | 校驗和1 |
校驗和2 | 數據3 | 數據4 |
數據5 | 校驗和3 | 數據6 |
特點:採用奇偶校驗,可靠性強,磁盤校驗和被散列到不同的磁盤裏面,增加了讀寫速率。只有當兩塊磁盤同時丟失時,數據才無法恢復,至少三塊硬盤並且硬盤大小應該相等才能組成Raid5陣列。
容量:所有硬盤容量之和減去其中一塊硬盤的容量,被減去的容量被分配到三塊硬盤的不同區域用來存放數據校驗信息。
Raid-10
D1 | D2 | D3 | D4 |
數據1 | 數據1 | 數據2 | 數據2 |
數據3 | 數據3 | 數據4 | 數據4 |
Raid10(Raid1+Raid0)是現在比較常用的一種磁盤陣列級別,它的容錯好,讀寫數據效率較高,但經費相對也較高。
特點:備份和併發式存取數據,可靠性強。D1、D2組成一個陣列Raid1,其中D1是數據盤,D2是備份盤;D3、D4也組成一個Raid1,其中D3是數據盤,D4是備份盤;在這個基礎上將D1、D2作爲一個整體,將D3、D4也作爲一個整體,這兩個整體之間再組成一個Raid0陣列。這樣不僅僅讀取數據會非常快,併發寫入的速度也會隨着磁盤的增多而變快。至少四塊硬盤並且每塊硬盤大小應該相等才能組成Raid10陣列。
容量:所有硬盤容量之和的一半(一半寫數據,一半用來備份數據)。
Raid的管理
主要用到的命令:mdadm;
參數: -C
或–creat 建立一個新陣列 -r 移除設備 -A
激活磁盤陣列 -l 或–level= 設定磁盤陣列的級別 -D
或–detail 打印陣列設備的詳細信息 -n
或–raid-devices= 指定陣列成員(分區/磁盤)的數量 -s
或–scan 掃描配置文件或/proc/mdstat得到陣列缺失信息 -x
或–spare-devicds= 指定陣列中備用盤的數量 -f
將設備狀態定爲故障 -c
或–chunk= 設定陣列的塊chunk大小 ,單位爲KB -a
或–add 添加設備到陣列 -G
或–grow 改變陣列大小或形態 -v
–verbose 顯示詳細信息
CentOS7中mdadm默認已安裝,如果沒有安裝,可以使用yum在線安裝,如下:
首先確保已經連接到互聯網,搜索一下yum服務器上是否存在mdadm
[root@localhost ~]# yum search mdadm
案例:創建一個raid10+冗餘盤
總共7塊盤,創建一個raid 10 使用4塊盤,熱備2塊,使用中1塊出現故障,熱備頂上,再加一塊熱備,把壞的T下來
1、創建raid陣列
[root@localhost ~]# mdadm -C /dev/md0 -a yes -l 10 -n 4 -x 2 /dev/sd{b,c,d,e,f,g}
2、查看raid陣列信息
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid10]
md0 : active raid10 sdg[5](S) sdf[4](S) sde[3] sdd[2] sdc[1] sdb[0]
41910272 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
[=====>...............] resync = 27.5% (11542784/41910272) finish=2.4min speed=206250K/sec
unused devices: <none>
// 四塊盤在用,兩塊S熱備
3、生成配置文件
[root@localhost ~]# mdadm -D --scan > /etc/mdadm.conf
4、格式化掛載使用
[root@localhost ~]# mkfs.ext4 /dev/md0
[root@localhost ~]# mkdir /data
[root@localhost ~]# mount /dev/md0 /data/
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg0-root 20G 333M 19G 2% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 34M 147M 19% /boot
/dev/mapper/vg0-usr 9.8G 1.9G 7.4G 21% /usr
/dev/mapper/vg0-var 20G 113M 19G 1% /var
/dev/md0 40G 48M 38G 1% /data
//我一塊20G,raid10一半數據,一半備份數據
5、模擬故障一個磁盤
先往data目錄拷貝點文件,看看壞了一塊數據是否丟失
[root@localhost ~]# du -sh /data/
1.4M /data/
//輸入命令或者直接把硬盤斷開連接
[root@localhost ~]# mdadm /dev/md0 -f /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md0
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid10]
md0 : active raid10 sdg[5] sdf[4](S) sde[3] sdd[2] sdc[1] sdb[0](F)
41910272 blocks super 1.2 512K chunks 2 near-copies [4/3] [_UUU]
[=>...................] recovery = 6.6% (1400064/20955136) finish=1.6min speed=200009K/sec
unused devices: <none>
// sdb (F) 故障狀態了,原來sdg的S沒有了,說明,已經頂上去了
[root@localhost ~]# du -sh /data/
1.4M /data/
//數據沒有丟失
6、把壞的T下去,把新硬盤加上去
硬盤壞了,肯定要加新的熱備盤上去,把舊的卸下來
//把故障硬盤卸載下來
[root@localhost ~]# mdadm -r /dev/md0 /dev/sdb
mdadm: hot removed /dev/sdb from /dev/md0
//添加新的硬盤
[root@localhost ~]# mdadm -a /dev/md0 /dev/sdh
mdadm: added /dev/sdh
[root@localhost ~]# cat /proc/mdstat
Personalities : [raid10]
md0 : active raid10 sdh[6](S) sdg[5] sdf[4](S) sde[3] sdd[2] sdc[1]
41910272 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
//查看狀態,已經發現新硬盤,舊硬盤已經沒有了
unused devices: <none>
[root@localhost ~]# mdadm -D /dev/md0
Number Major Minor RaidDevice State
5 8 96 0 active sync set-A /dev/sdg
1 8 32 1 active sync set-B /dev/sdc
2 8 48 2 active sync set-A /dev/sdd
3 8 64 3 active sync set-B /dev/sde
4 8 80 - spare /dev/sdf
6 8 112 - spare /dev/sdh
//陣列還是原來的,沒變