一、什麼是RAID
RAID稱之爲磁盤陣列,主要用於提升存儲的可用性,和性能上的改善,同時大大提升磁盤的容錯能力,磁盤陣列是由多個物理磁盤組成,可是對於操做系統而言,它就是一個邏輯磁盤,系統上存儲的數據會分佈在陣列中的多個物理磁盤。
二、RAID的幾種級別node
級別 | 說明 | 最少物理磁盤數 | 最大容錯能力 | I/O性能 | 磁盤容量利用率 |
---|---|---|---|---|---|
RAID 1 | 1級別又稱之爲磁盤鏡像,一樣是須要2塊盤,可是磁盤具備了容錯能力 | 須要2個磁盤 | 容許一塊硬盤發生故障 | 讀性能提高,寫入性能通常 | 50% |
RAID 5 | 5級別稱之爲分佈式奇偶校驗陣列,以數據的校驗位來保證數據的安全,可是數據的校驗位不是存放在單獨的磁盤,而是交互式的存放在各個陣列中的磁盤,若是陣列中任何一個磁盤出現故障,均可根據其餘盤的校驗位重建損壞的數據 | 至少3塊磁盤 | 容許一塊硬盤發生故障 | 讀寫性能較好 | 90% |
RAID 6 | 6級別與5級別相似,5級別會將數據的校驗信息存放在硬盤上,6級別會比5級別多保存一份校驗信息 | 至少須要4塊硬盤 | 容許兩塊硬盤發生故障 | 讀寫性能較好 | 80% |
RAID 10 | 稱之爲高可靠性與高效磁盤結構,兼具了0級別和1級別的優勢,此種級別先用兩個磁盤創建鏡像,而後將鏡像後的邏輯磁盤,作0級別 | 至少須要4塊硬盤 | 容許一塊盤發生故障 | 讀寫性能好 | 50% |
三、RAID種類centos
種類 | 說明 |
---|---|
軟RAID | 利用操做系統提供的軟件技術實現RAID功能,優勢廉價,幾乎沒有任何成本,缺點受限操做系統的穩定性,同時佔用必定的系統資源 |
硬RAID | 經過硬件RAID控制器實現,優勢是不須要佔用其餘硬件資源,同時提供了高速緩存機制,大大的提高了磁盤的讀寫性能,同時穩定性也是很是高 |
四、Linux系統上實現軟RAID
模擬平臺:VMware workstation
測試環境:centos7計算機一臺,添加一塊硬盤
使用工具:mdadm
【raid1】實現過程:
一、首先查看磁盤標籤類型
若是是MBR可使用fdisk建立相同大小的磁盤分區
若是是GPT可使用gdisk建立相同大小的磁盤分區緩存
[root@lab-236 ~]# fdisk -l /dev/sdb 磁盤 /dev/sdb:21.5 GB, 21474836480 字節,41943040 個扇區 Units = 扇區 of 1 * 512 = 512 bytes 扇區大小(邏輯/物理):512 字節 / 512 字節 I/O 大小(最小/最佳):512 字節 / 512 字節 磁盤標籤類型:gpt #硬盤類型GPT Disk identifier: 037192CD-B94D-4F5D-A559-A90B74EECA9D Start End Size Type Name
二、建立2個分區,並更改分區系統類型爲Linux RAID
由於咱們的磁盤標籤類型是GPT,因此使用gdisk執行安全
[root@lab-236 ~]# gdisk /dev/sdb GPT fdisk (gdisk) version 0.8.10 Partition table scan: MBR: protective BSD: not present APM: not present GPT: present Found valid GPT with protective MBR; using GPT. Command (? for help): n #建立新的分區 Partition number (1-128, default 1): 1 #分區編號1 First sector (34-41943006, default = 2048) or {+-}size{KMGTP}: #指定起始扇區,默認便可 Last sector (2048-41943006, default = 41943006) or {+-}size{KMGTP}: +5G #指定分區大小 Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): fd00 #更改分區系統類型爲LinuxRAID Changed type of partition to 'Linux RAID' Command (? for help): n #繼續建立第二分區 Partition number (2-128, default 2): 2 #分區編號2 First sector (34-41943006, default = 10487808) or {+-}size{KMGTP}: #指定起始扇區,默認便可 Last sector (10487808-41943006, default = 41943006) or {+-}size{KMGTP}: +5G #指定分區大小 Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): fd00 #更改分區系統類型爲LinuxRAID Changed type of partition to 'Linux RAID' Command (? for help): p #顯示分區信息 Disk /dev/sdb: 41943040 sectors, 20.0 GiB Logical sector size: 512 bytes Disk identifier (GUID): 037192CD-B94D-4F5D-A559-A90B74EECA9D Partition table holds up to 128 entries First usable sector is 34, last usable sector is 41943006 Partitions will be aligned on 2048-sector boundaries Total free space is 20971453 sectors (10.0 GiB) Number Start (sector) End (sector) Size Code Name 1 2048 10487807 5.0 GiB FD00 Linux RAID 2 10487808 20973567 5.0 GiB FD00 Linux RAID Command (? for help): w #保存分區信息 Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!! Do you want to proceed? (Y/N): Y #分區發生改變,提示是否繼續保存 OK; writing new GUID partition table (GPT) to /dev/sdb. The operation has completed successfully.
三、執行mdadm工具建立RAID1
注意建立RAID設備編號要從0開始app
[root@lab-236 ~]# mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdb2 mdadm: /dev/sdb1 appears to be part of a raid array: level=raid1 devices=2 ctime=Thu Dec 10 20:52:02 2020 mdadm: Note: this array has metadata at the start and may not be suitable as a boot device. If you plan to store '/boot' on this device please ensure that your boot-loader understands md/v1.x metadata, or use --metadata=0.90 mdadm: /dev/sdb2 appears to be part of a raid array: level=raid1 devices=2 ctime=Thu Dec 10 20:52:02 2020 Continue creating array? Y #提示建立是否繼續,是Y mdadm: Fail to create md0 when using /sys/module/md_mod/parameters/new_array, fallback to creation via node mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started.
注意:建立過程,有提示這個陣列不適合做爲啓動盤的信息,這個是因爲超級塊類型決定的,超級塊的類型可使用–metadata選項設置,默認是1.2,只有這個值不大於1.0時才能夠做爲啓動盤
四、檢查建立的RAID詳細信息和運行狀態分佈式
[root@lab-236 ~]# mdadm --detail /dev/md0 #查看RAID詳細信息 /dev/md0: Version : 1.2 Creation Time : Fri Dec 11 16:46:33 2020 Raid Level : raid1 Array Size : 5237760 (5.00 GiB 5.36 GB) Used Dev Size : 5237760 (5.00 GiB 5.36 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Fri Dec 11 16:46:59 2020 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Consistency Policy : resync Name : lab-236.com:0 (local to host lab-236.com) UUID : 52f68880:b4d10435:d271aaa2:261ed9cb Events : 17 Number Major Minor RaidDevice State 0 8 17 0 active sync /dev/sdb1 1 8 18 1 active sync /dev/sdb2
[root@lab-236 ~]# cat /proc/mdstat #查看運行狀態 Personalities : [raid1] md0 : active raid1 sdb2[1] sdb1[0] 5237760 blocks super 1.2 [2/2] [UU] unused devices: <none>
五、建立好RAID分區,接下來就是格式化文件系統,才能夠被使用ide
[root@lab-236 ~]# mkfs.xfs /dev/md0 #格式化爲xfs文件系統 meta-data=/dev/md0 isize=512 agcount=4, agsize=327360 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0 data = bsize=4096 blocks=1309440, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
六、掛載RAID分區到指定目錄,此處掛載到/mnt工具
[root@lab-236 ~]# mount /dev/md0 /mnt
經過df命令查看磁盤使用狀況性能
[root@lab-236 ~]# df -h 文件系統 容量 已用 可用 已用% 掛載點 devtmpfs 471M 0 471M 0% /dev tmpfs 488M 8.1M 480M 2% /run tmpfs 488M 0 488M 0% /sys/fs/cgroup /dev/mapper/centos-root 17G 4.5G 12G 28% / /dev/md0 5.0G 33M 5.0G 1% /mnt #能夠看到掛載成功
七、模擬磁盤故障,並修復磁盤RAID
首先咱們RAID分區掛載的目錄建立一個文件測試
[root@lab-236 ~]# echo "hello world" > /mnt/hello.txt
此時咱們經過mdadm工具將一個分區(/dev/sdb1)設置爲故障分區
[root@lab-236 ~]# mdadm /dev/md0 --fail /dev/sdb1 mdadm: set /dev/sdb1 faulty in /dev/md0
而後咱們在查看RAID的配置信息
[root@lab-236 ~]# mdadm --detail /dev/md0 /dev/md0: Version : 1.2 Creation Time : Fri Dec 11 16:46:33 2020 Raid Level : raid1 Array Size : 5237760 (5.00 GiB 5.36 GB) Used Dev Size : 5237760 (5.00 GiB 5.36 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Fri Dec 11 17:05:32 2020 State : clean, degraded Active Devices : 1 Working Devices : 1 Failed Devices : 1 Spare Devices : 0 Consistency Policy : resync Name : lab-236.com:0 (local to host lab-236.com) UUID : 52f68880:b4d10435:d271aaa2:261ed9cb Events : 21 Number Major Minor RaidDevice State - 0 0 0 removed 1 8 18 1 active sync /dev/sdb2 0 8 17 - faulty /dev/sdb1 #此時/dev/sdb1狀態時有缺陷的
咱們能夠看到/dev/sdb1的狀態提示爲faulty,是有缺陷的,存在故障。
查看運行狀況
[root@lab-236 ~]# cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sdb2[1] sdb1[0](F) 5237760 blocks super 1.2 [2/1] [_U] #發現超級塊數量變成[2/1],缺失1個 unused devices: <none>
八、此時咱們查看掛載目錄中文件是否正常
[root@lab-236 ~]# cat /mnt/hello.txt hello world
咱們發現文件正常,這就是RAID1的容錯能力,一塊磁盤出現故障,不影響數據文件的繼續使用
九、接下來咱們修復RAID
首先咱們要將已經有缺陷的磁盤分區移除
[root@lab-236 ~]# mdadm /dev/md0 --remove /dev/sdb1 mdadm: hot removed /dev/sdb1 from /dev/md0
而後咱們將購買的新磁盤,添加到這個RAID中,若是實際物理環境中,直接將物理磁盤換上,添加便可,這裏咱們模擬環境。就當/dev/sdb1修復後從新添加回去
[root@lab-236 ~]# mdadm /dev/md0 --add /dev/sdb1 mdadm: added /dev/sdb1
此時咱們查看RAID信息,能夠看到新加入的磁盤正在進行spare rebuilding RAID,這個過程須要時間,時間的長短與空間數據大小有關
[root@lab-236 ~]# mdadm --detail /dev/md0 /dev/md0: Version : 1.2 Creation Time : Fri Dec 11 16:46:33 2020 Raid Level : raid1 Array Size : 5237760 (5.00 GiB 5.36 GB) Used Dev Size : 5237760 (5.00 GiB 5.36 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Fri Dec 11 17:24:08 2020 State : clean, degraded, recovering Active Devices : 1 Working Devices : 2 Failed Devices : 0 Spare Devices : 1 Consistency Policy : resync Rebuild Status : 57% complete Name : lab-236.com:0 (local to host lab-236.com) UUID : 52f68880:b4d10435:d271aaa2:261ed9cb Events : 41 Number Major Minor RaidDevice State 2 8 17 0 spare rebuilding /dev/sdb1 1 8 18 1 active sync /dev/sdb2
總結:
一、配置過程若是此前建立過軟RAID,須要先將原來RAID設備中止
mdadm --stop /dev/md0
若是不中止會出現以下錯誤:mdadm: cannot open /dev/sdb1: Device or resource busy二、若是要重建軟RAID,步驟應以下:一、先卸載目錄二、中止RAID設備三、移除RAID設備中的磁盤