RAID 全稱為獨立磁盤冗余陣列(Rdeundant Array of Independent Disks
),基本思想就是把 多個相對便宜的硬盤組合起來,成為一個硬盤陣列組,使性能達到甚至超過一個價格昂貴、 容量巨大的硬盤。RAID通常被用在服務器電腦上,使用完全相同的硬盤組成一個邏輯扇區, 因此操作系統只會把它當做一個硬盤。
提高IO能力:磁盤的并行讀寫
提高耐用性:磁盤的冗余來實現
標準的RAID
RAID 分為不同的等級,各個不同的等級均在數據可靠性及讀寫性能上做了不同的權衡。 在實際應用中,可以依據自己的實際需求選擇不同的RAID方案。
- RAID0
RAID0 稱為條帶化(
Striping
)存儲,將數據分段存儲于 各個磁盤中,讀寫均可以并行處理。因此其讀寫速率為單個磁盤的N倍(N為組成RAID0的磁盤個數),但是卻沒有數 據冗余,單個磁盤的損壞會導致數據的不可修復。
大多數striping
的實現允許管理者通過調節兩個關鍵的參數來定義數據分段及寫入磁盤的 方式,這兩個參數對RAID0
的性能有很重要的影響。
優點:極高的磁盤讀寫效率,不存在校驗,不會占用太多CPU資源,設計、使用和配置比較簡單
缺點:無冗余,不能用于對數據安全性要求高的環境
適用領域:視頻生成和編輯、圖像編輯。其他需要大的傳輸帶寬的操作
- RAID1
鏡像存儲(
mirroring
),沒有數據校驗。數據被同等地寫入兩個或多個磁盤中,可想而知,寫入速度會比較 慢,但讀取速度會比較快。讀取速度可以接近所有磁盤吞吐量的總和,寫入速度受限于最慢 的磁盤。RAID1
也是磁盤利用率最低的一個。如果用兩個不同大小的磁盤建立RAID1
,可以用空間較小 的那一個,較大的磁盤多出來的部分可以作他用,不會浪費。
優點:具有100%數據冗余,提供最高的數據安全保障,理論上可以實現2倍的讀取效率,設計和使用比較簡單
缺點:開銷大,空間利用率只有50%。在寫性能方面提升不大
適用領域:財務、金融等高可用、高安全的數據存儲環境
- RAID2
采用校驗冗余,把數據分散為位或塊,加入漢明碼,間隔寫入到磁盤陣列的每個磁盤中。采用了并行存取方式,花費大,成本昂貴。所 以RAID2適合于連續IO,大塊IO(比如視頻流服務)的情況。
- RAID3
數據塊被分為更小的塊并行傳輸到各個成員磁盤上,同時計算XOR校驗數據存放到專用的校驗磁盤上
優點:讀寫性能都比較好。當有磁盤損壞時,對整體吞吐量影響較小,減少了開銷
缺點:控制器設計復雜。采用并行存取方式,主軸同步時吞吐量沒有提高,校驗磁盤的寫性能有瓶頸
適用領域:視頻生成和圖像、視頻編輯等.需要高吞吐量的應用環境
- RAID5
采用獨立存取的陣列方式,校驗信息被均勻的分散到陣列的各個磁盤上
RAID5 把數據和相對應的奇偶校驗信息存儲到組成RAID5的各個磁盤上,并且奇偶校驗信息和 相對應的數據分別存儲于不同的磁盤上,其中任意N-1塊磁盤上都存儲完整的數據,也就是 說有相當于一塊磁盤容量的空間用于存儲奇偶校驗信息。因此當RAID5的一個磁盤發生損壞 后,不會影響數據的完整性,從而保證了數據安全。當損壞的磁盤被替換后,RAID還會自動 利用剩下奇偶校驗信息去重建此磁盤上的數據,來保持RAID5的高可靠性。
優點:讀性能比較高,中等的寫性能,校驗信息的分布式存取,避免出現寫操作的瓶頸
缺點:控制器設計復雜,磁盤重建的過程比較復雜
適用范圍:文件服務器、Email服務器、Web服務器等環境、數據庫應用
混合RAID
組合不同級別的RAID,目的是揚長避短,產生具有優勢特性的混合RAID級別
- RAID01
顧名思義,是RAID0和RAID1的結合。先做條帶(0),再做鏡像(1)。即先分兩堆做成
raid0
,而后將他們做成raid1
- RAID10
顧名思義,是RAID1和RAID0的結合。先做鏡像,在做條帶。即先兩兩一組做成raid1,而后將這一堆做成raid0
優點:讀性能很高,寫性能比較好,數據安全性好,允許同時有N個磁盤失效
缺點:空間利用率只有50%,開銷大
適用領域:多用于要求高可用性和高安全性的數據庫應用
- RAID50
RAID50是RAID5和RAID0的結合,先實現RAID5,再條帶化.
優點:比RAID5有更好的讀性能,比相同容量的RAID5重建時間更短,可以容許N個磁盤同時失效
缺點:設計復雜,比較難實現,同一個RAID5組內的兩個磁盤失效會導致整個陣列的失效
適用范圍:大型數據庫服務器、應用服務器、文件服務器等應用
RAID的實現方式
- 外接式磁盤陣列:通過擴展卡提供適配能力
- 內接式RAID:主板集成RAID控制器
-
Software RAID:需要結合內核中的md(
multi devices
)來實現模擬RAID,生產中不會用
mdadm命令介紹
mdadm
是linux下用于管理軟RAID設備的一個模式化的工具
語法格式:mdadm [mode] <raiddevice> [options] <component-devices>
支持的RAID級別:LINEAR, RAID0, RAID1, RAID4, RAID5, RAID6, RAID10;
它具備四種模式:創建、裝配、監控、和管理四種模式
- -C: 創建模式
-n #: 使用#個塊設備來創建此RAID;
-l #:指明要創建的RAID的級別;
-a {yes|no}:自動創建目標RAID設備的設備文件;
-c CHUNK_SIZE: 指明塊大小;
-x #: 指明空閑盤的個數;
- -D:顯示raid的詳細信息
mdadm -D /dev/md#
- 管理模式
-f: 標記指定磁盤為損壞;
-a: 添加磁盤
-r: 移除磁盤
- 觀察md的狀態
cat /proc/mdstat
- 停止md設備
mdadm -S /dev/md#
實戰:創建一個10G可用空間的RAID5
1.準備分區fdisk /dev/sda
Command (m for help): n
All primary partitions are in use
Adding logical partition 7
First sector (131033088-251658239, default 131033088):
Using default value 131033088
Last sector, +sectors or +size{K,M,G} (131033088-251658239, default 251658239): +5G
Partition 7 of type Linux and of size 5 GiB is set
Command (m for help): N
All primary partitions are in use
Adding logical partition 8
First sector (141520896-251658239, default 141520896):
Using default value 141520896
Last sector, +sectors or +size{K,M,G} (141520896-251658239, default 251658239): +5G
Partition 8 of type Linux and of size 5 GiB is set
Command (m for help): N
All primary partitions are in use
Adding logical partition 9
First sector (152008704-251658239, default 152008704): +5G
Value out of range.
First sector (152008704-251658239, default 152008704):
Using default value 152008704
Last sector, +sectors or +size{K,M,G} (152008704-251658239, default 251658239): +5G
Partition 9 of type Linux and of size 5 GiB is set
Command (m for help): N
All primary partitions are in use
Adding logical partition 10
First sector (162496512-251658239, default 162496512):
Using default value 162496512
Last sector, +sectors or +size{K,M,G} (162496512-251658239, default 251658239): +5G
Partition 10 of type Linux and of size 5 GiB is set
2.調整磁盤id號(fd)
Command (m for help): T
Partition number (1-10, default 10): 7
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'
Command (m for help): t
Partition number (1-10, default 10): 8
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'
Command (m for help): t
Partition number (1-10, default 10): 9
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'
Command (m for help): t
Partition number (1-10, default 10): 10
Hex code (type L to list all codes): fd
Changed type of partition 'Linux' to 'Linux raid autodetect'
Command (m for help): p
Disk /dev/sda: 128.8 GB, 128849018880 bytes, 251658240 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x00054abe
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 1001471 499712 83 Linux
/dev/sda2 1001472 84887551 41943040 83 Linux
/dev/sda3 84887552 126830591 20971520 83 Linux
/dev/sda4 126830592 251658239 62413824 5 Extended
/dev/sda5 126834688 131031039 2098176 82 Linux swap / Solaris
/dev/sda6 126832640 126834687 1024 83 Linux
/dev/sda7 131033088 141518847 5242880 fd Linux raid autodetect
/dev/sda8 141520896 152006655 5242880 fd Linux raid autodetect
/dev/sda9 152008704 162494463 5242880 fd Linux raid autodetect
/dev/sda10 162496512 172982271 5242880 fd Linux raid autodetect
3.強制內核重讀分區
[root@master-01 ~]# partx -a /dev/sda
partx: /dev/sda: error adding partitions 1-10
[root@master-01 ~]# cat /proc/partitions
major minor #blocks name
8 0 125829120 sda
8 1 499712 sda1
8 2 41943040 sda2
8 3 20971520 sda3
8 4 1 sda4
8 5 2098176 sda5
8 6 1024 sda6
8 7 5242880 sda7
8 8 5242880 sda8
8 9 5242880 sda9
8 10 5242880 sda10
11 0 1048575 sr0
4.創建RAID5
[root@master-01 ~]# mdadm -C /dev/md0 -a yes -n 3 -x 1 -l 5 /dev/sda{7,8,9,10}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
查看raid的信息
[root@master-01 ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sda9[4] sda10[3](S) sda8[1] sda7[0]
10477568 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
[=======>.............] recovery = 37.1% (1947524/5238784) finish=1.7min speed=31789K/sec
unused devices: <none>】
[root@master-01 ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sda9[4] sda10[3](S) sda8[1] sda7[0]
10477568 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
unused devices: <none>
格式化我們的raid盤
[root@master-01 ~]# mke2fs -t ext4 /dev/md0
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=128 blocks, Stripe width=256 blocks
655360 inodes, 2619392 blocks
130969 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2151677952
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
查看RAID詳細信息-D
[root@master-01 ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Thu Jan 5 02:14:18 2017
Raid Level : raid5
Array Size : 10477568 (9.99 GiB 10.73 GB)
Used Dev Size : 5238784 (5.00 GiB 5.36 GB) #校驗盤
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Thu Jan 5 02:22:19 2017
State : clean
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 512K
Name : master-01:0 (local to host master-01)
UUID : 8b64de29:07a5eb6d:4cbfdad8:81bfd5c9
Events : 18
Number Major Minor RaidDevice State
0 8 7 0 active sync /dev/sda7
1 8 8 1 active sync /dev/sda8
4 8 9 2 active sync /dev/sda9
3 8 10 - spare /dev/sda10 #空閑盤
掛載使用
[root@master-01 ~]# mkdir /mydata
[root@master-01 ~]# mount /dev/md0 /mydata/
[root@master-01 ~]# df -lh /dev/md0
Filesystem Size Used Avail Use% Mounted on
/dev/md0 9.8G 37M 9.2G 1% /mydata
[root@master-01 ~]# blkid /dev/md0
/dev/md0: UUID="83b83c5f-ddfd-4e90-8095-0a7495d85cd5" TYPE="ext4"
模擬損壞
將一個盤標記為損壞-f,此時會重新進行校驗
[root@master-01 ~]# mdadm /dev/md0 -f /dev/sda7
mdadm: set /dev/sda7 faulty in /dev/md0
[root@master-01 ~]# watch -n1 'cat /proc/mdstat'
[root@master-01 ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sda9[4] sda10[3] sda8[1] sda7[0](F)
10477568 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [_UU]
[===================>.] recovery = 96.6% (5061948/5238784) finish=0.1min speed=21402K/sec
unused devices: <none>
再次查看,我們可以發現原來的備用盤頂上去,以保證raid設備還能繼續運行
[root@master-01 ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Thu Jan 5 02:14:18 2017
Raid Level : raid5
Array Size : 10477568 (9.99 GiB 10.73 GB)
Used Dev Size : 5238784 (5.00 GiB 5.36 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Thu Jan 5 03:19:44 2017
State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 1
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Name : master-01:0 (local to host master-01)
UUID : 8b64de29:07a5eb6d:4cbfdad8:81bfd5c9
Events : 37
Number Major Minor RaidDevice State
3 8 10 0 active sync /dev/sda10
1 8 8 1 active sync /dev/sda8
4 8 9 2 active sync /dev/sda9
0 8 7 - faulty /dev/sda7
再損壞一塊盤,并查看raid5的信息
[root@master-01 ~]# mdadm /dev/md0 -f /dev/sda8
mdadm: set /dev/sda8 faulty in /dev/md0
[root@master-01 ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Thu Jan 5 02:14:18 2017
Raid Level : raid5
Array Size : 10477568 (9.99 GiB 10.73 GB)
Used Dev Size : 5238784 (5.00 GiB 5.36 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Thu Jan 5 03:24:47 2017
State : clean, degraded #降級工作
Active Devices : 2
Working Devices : 2
Failed Devices : 2
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Name : master-01:0 (local to host master-01)
UUID : 8b64de29:07a5eb6d:4cbfdad8:81bfd5c9
Events : 39
Number Major Minor RaidDevice State
3 8 10 0 active sync /dev/sda10
2 0 0 2 removed
4 8 9 2 active sync /dev/sda9
0 8 7 - faulty /dev/sda7
1 8 8 - faulty /dev/sda8
通過下面的操作,我們發現raid5仍然可以繼續工作
[root@master-01 ~]# cp /etc/fstab /mydata/
[root@master-01 ~]# ls /mydata/
fstab lost+found
將壞了的盤移除-r
[root@master-01 ~]# mdadm /dev/md0 -r /dev/sda7
mdadm: hot removed /dev/sda7 from /dev/md0
[root@master-01 ~]# mdadm /dev/md0 -r /dev/sda8
mdadm: hot removed /dev/sda8 from /dev/md0
[root@master-01 ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sda9[4] sda10[3]
10477568 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U]
unused devices: <none>
[root@master-01 ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Thu Jan 5 02:14:18 2017
Raid Level : raid5
Array Size : 10477568 (9.99 GiB 10.73 GB)
Used Dev Size : 5238784 (5.00 GiB 5.36 GB)
Raid Devices : 3
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Thu Jan 5 03:29:57 2017
State : clean, degraded
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric #左對稱
Chunk Size : 512K
Name : master-01:0 (local to host master-01)
UUID : 8b64de29:07a5eb6d:4cbfdad8:81bfd5c9
Events : 49
Number Major Minor RaidDevice State
3 8 10 0 active sync /dev/sda10
2 0 0 2 removed
4 8 9 2 active sync /dev/sda9
將磁盤重新加到raid設備中-a,此時raid5又會回到clean狀態
[root@master-01 ~]# mdadm /dev/md0 -a /dev/sda7
mdadm: added /dev/sda7