RAID簡介
RAID(Redundant Arry of Independent Disks)獨立冗余陣列,舊稱(Redundant Arry of Inexpensive Disks)廉價冗余陣列,其主要目的是將多個硬盤組成在一起來達到提高I/O、讀寫、冗余性。
RAID分為硬件RAID和軟件RAID
硬件RAID通過RAID卡連接多個硬盤、或者主板中集成了RAID控制器來實現RAID的相關功能。
軟件RAID則通過軟件層面模擬實現RAID的相關功能。
RAID常見級別介紹
RAID-0
將多塊硬盤平行組織起來并行處理以提高性能
簡單來說就是將要處理的數據塊(chunk)分別在兩個硬盤上同時處理, Disk0處理A1,Disk1處理A2,從而實現提高硬盤性能,但是這樣的話硬盤性能雖然提高了但是可靠性大大降低,由于RAID-0的特性,只要有一塊硬盤損壞,這個磁盤陣列上的所有數據都可能會丟失,生產環境中一般不會使用。
RAID-0總結
1、提高了磁盤讀、寫、IO性能,理論為硬盤原速度的*硬盤數
2、無容錯能力
3、最少使用2塊硬盤
4、硬盤可用空間,為所有硬盤中空間最小的硬盤空間乘以硬盤總數, 公式 N*min(Disk0..DiskN)
本文圖片轉自維基百科
RAID-1
將多個硬盤相互做成鏡像,提高冗余能力,讀取速度
簡單的來說就是兩個(一般情況下RAID-1都是兩個硬盤組成)或多個硬盤做成鏡像,例如:給Disk0寫入數據的時候,Disk1也寫入數據,當Disk0損壞,Disk1的數據還保存著。這樣極大提高了冗余能力,讀取時兩個硬盤也可以并行讀取來提高讀取性能,但是寫入速度略有下降。
RAID-1總結
1、提高了讀性能,寫性能下降
2、極大提高了容錯能力
3、最少使用2塊硬盤
4、硬盤可用空間,為所有硬盤中空間最小硬盤的空間大小, 公式 1*min(Disk0..DiskN)
本文圖片轉自維基百科
RAID-4
由3塊或3塊以上設備組成,并行處理提高磁盤性能,一個硬盤存儲冗余校驗碼,通過異或運算還原數據
簡單來說就是三個或三個以上的硬盤組成一組設備可以實現當某一個硬盤損壞可以使其數據通過異或運算還原,通過讀寫并行處理提高性能,但是因為冗余校驗碼都是存放在單一硬盤上,所以此硬盤性能可能會很差,并且易損壞。
RAID-4總結:
1、提高了讀寫、IO性能,但是存放校驗碼的硬盤性能差
2、提高硬盤容錯能力,但是使用一塊硬盤存放校驗碼,要是此硬盤損壞后果可想而知
3、最少使用3塊硬盤
4、最大硬盤使用空間,為所有硬盤中空間最小的硬盤的空間大小乘以硬盤數減去1, 公式(N-1)*min(Disk1..DiskN)
本文圖片轉自維基百科
RAID-5
相比于RAID-4而言,冗余校驗碼分別存放在每個硬盤中
簡單的來說,RAID-5就是RAID-4的升級版,彌補了RAID-4的缺陷,將RAID-4中被詬病的缺點:“冗余校驗碼存放在一個硬盤上”得以解決,RAID-5采用將冗余校驗碼分別存放在每一個磁盤上來達到負載均衡的效果,而且極大的提高了整體性能,但是只能提供一塊硬盤的冗余。
RAID-5總結
1、提高了讀寫、IO性能
2、提高了容錯能力,相比于RAID-4而言提高整體穩定性
3、最少使用3塊硬盤
4、最大硬盤使用空間,為所有硬盤中空間最小的硬盤的空間大小乘以硬盤數減去1, 公式(N-1)*min(Disk1..DiskN)
本文圖片轉自維基百科
RAID-10/01
簡單的來說,RAID-10/01是兩種混合型RAID,RAID-10先將所有硬盤分成N組組成RAID-1提高冗余性,然后將其按組組成RAID-0提高硬盤性能,最多可支持半數硬盤損壞而不丟失數據。RAID-01先將所有硬盤分成N組組成RAID0提高性能,然后將其按組組成RAID-1提高冗余性,運氣不好兩塊硬盤損壞就可能導致全部硬盤數據丟失。
RAID-10總結
1、提高了讀寫、IO性能
2、提高了容錯能力,最多支持半數硬盤損壞
3、最少使用4塊硬盤
4、最大硬盤使用空間,為所有硬盤中空間最小的硬盤的空間大小乘以2, 公式(N*min(Disk0..Disk1))/2
RAID-01總結
1、提高了讀寫、IO性能
2、提高了容錯能力,但是效果不是很好,因為先使用不可靠的RAID-0在使用可靠的RAID1,就好像建房子地基偷工減料,而頂層卻建的很結實
3、最少使用4塊硬盤
4、最大硬盤使用空間,為所有硬盤中空間最小的硬盤的空間大小乘以2, 公式(N*min(Disk0..Disk1))/2
本文圖片轉自維基百科
本文圖片轉自維基百科
實戰:在CentOS 6.7中使用mdadm建立軟RAID
mdadm介紹:
Linux中可以通過md模塊來實現軟RAID,我們在用戶空間用mdadm來管理創建軟RAID設備
mdadm
命令的語法格式:mdadm [mode] <raiddevice> [options] <component-device> 支持的RAID級別:LINEAR, RAID0, RAID1, RAID4, RAID5,RAID6,RAID10 模式: 創建模式:-C 裝配模式:-A 監控模式:-F 管理模式:-f, -r, -a <raiddevice>:/dev/md# <component-devices>:任意塊設備 -C:創建模式 -n #:使用#個塊設備來創建此RAID -l #:指明要創建的RAID的級別 -a {yes|no}:是否自動創建目標RAID設備的設備文件 -c CHUNK_SIZE:指明塊大小 -x #:指明空閑盤的個數 -D:查看raid的詳細信息 mdadm -D /dev/md# 管理模式 -f:當作錯誤的磁盤來對待 -r:移除 -a:添加磁盤
系統環境:
分區信息 [root@server2 ~]# fdisk -l Disk /dev/sda: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x0002777c Device Boot Start End Blocks Id System /dev/sda1 * 1 26 208813+ 83 Linux /dev/sda2 27 1985 15735667+ 83 Linux /dev/sda3 1986 2247 2104515 82 Linux swap / Solaris Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xdee177d5 Device Boot Start End Blocks Id System
實現目標:創建一個可用空間為8G的RAID1設備, 要求其chunk大小為128K, 文件系統為ext4, 開機可自動掛載至/backup目錄
創建相應分區,關于此操作如果有疑問可以查看我的相關博文
[root@server2 ~]# fdisk /dev/sdb WARNING: DOS-compatible mode is deprecated. It's strongly recommended to switch off the mode (command 'c') and change display units to sectors (command 'u'). Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-2610, default 1): Using default value 1 Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +8G Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 2 First cylinder (1046-2610, default 1046): Using default value 1046 Last cylinder, +cylinders or +size{K,M,G} (1046-2610, default 2610): +8G Command (m for help): t Partition number (1-4): 1 Hex code (type L to list codes): fd #創建軟RAID必須要將FileSystem ID調整為fd,否則在使用過程中可能會出錯 Changed system type of partition 1 to fd (Linux raid autodetect) Command (m for help): t Partition number (1-4): 2 Hex code (type L to list codes): fd Changed system type of partition 2 to fd (Linux raid autodetect) Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) Syncing disks.
通告內核重讀分區表
[root@server2 ~]# partx -a /dev/sdb BLKPG: Device or resource busy error adding partition 1 BLKPG: Device or resource busy error adding partition 2
使用mdadm命令創建RAID1
[root@server2 ~]# mdadm -C /dev/md0 -a yes -c 128 -n 2 -l 1 /dev/sdb{1,2} #這里用分區創建RAID,不推薦,為了實驗效果,請見諒 mdadm: /dev/sdb1 appears to contain an ext2fs file system size=10490412K mtime=Mon Jan 4 13:26:31 2016 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 Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started.
查看創建的RAID設備
[root@server2 ~]# mdadm -D /dev/md0 /dev/md0: Version : 1.2 Creation Time : Mon Jan 4 13:28:54 2016 Raid Level : raid1 Array Size : 8385728 (8.00 GiB 8.59 GB) Used Dev Size : 8385728 (8.00 GiB 8.59 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Mon Jan 4 13:29:36 2016 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Name : server2.example.com:0 (local to host server2.example.com) UUID : a6177d12:198d6c82:3e2f5ac9:5f3925b3 Events : 17 Number Major Minor RaidDevice State 0 8 17 0 active sync /dev/sdb1 1 8 18 1 active sync /dev/sdb2
格式化RAID設備
[root@server2 ~]# mke2fs -t ext4 /dev/md0 mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 524288 inodes, 2096432 blocks 104821 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=2147483648 64 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 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 20 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
設置RAID設備開機自動掛載
[root@server2 ~]# blkid /dev/md0 #建議使用UUID方式掛載 /dev/md0: UUID="f1f1a7f7-ea47-4bff-b28f-65e74fcdc0a0" TYPE="ext4" [root@server2 ~]# vim /etc/fstab # # /etc/fstab # Created by anaconda on Sat Jan 2 05:05:04 2016 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # UUID=3f5cfd75-ff54-4784-9aa3-47cbc77eed5a / ext4 defaults 1 1 UUID=0f99960c-0db8-44a9-81b6-f1adfcb0fc6c /boot ext4 defaults 1 2 UUID=bbcb90b4-d4a4-4a72-b66c-061afc7ce4e6 swap swap defaults 0 0 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 UUID="f1f1a7f7-ea47-4bff-b28f-65e74fcdc0a0" /backup ext4 defaults 0 0
驗證是否能夠掛載
[root@server2 ~]# mount -a [root@server2 ~]# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda2 15357672 3527392 11043500 25% / tmpfs 502384 0 502384 0% /dev/shm /dev/sda1 198123 36589 151094 20% /boot /dev/md0 8123000 18420 7685296 1% /backup
測試RAID1效果
[root@server2 ~]# cd /backup/ [root@server2 backup]# ls lost+found [root@server2 backup]# touch RAID-1-TEST #在RAID設備中創建文件 [root@server2 backup]# ls lost+found RAID-1-TEST [root@server2 backup]# cd / [root@server2 /]# mdadm -f /dev/md0 /dev/sdb1 #模擬sdb1損壞 mdadm: set /dev/sdb1 faulty in /dev/md0 [root@server2 /]# mdadm -D /dev/md0 #查看md0信息 /dev/md0: Version : 1.2 Creation Time : Mon Jan 4 13:28:54 2016 Raid Level : raid1 Array Size : 8385728 (8.00 GiB 8.59 GB) Used Dev Size : 8385728 (8.00 GiB 8.59 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Mon Jan 4 13:36:04 2016 State : clean, degraded Active Devices : 1 Working Devices : 1 Failed Devices : 1 Spare Devices : 0 Name : server2.example.com:0 (local to host server2.example.com) UUID : a6177d12:198d6c82:3e2f5ac9:5f3925b3 Events : 44 Number Major Minor RaidDevice State 0 0 0 0 removed 1 8 18 1 active sync /dev/sdb2 2 8 17 - faulty /dev/sdb1 #提示報錯 [root@server2 /]# cd /backup/ [root@server2 backup]# ls #發現數據并未丟失 lost+found RAID-1-TEST
總結:RAID的確可以提高生產環境中磁盤的性能和可靠性,但是不推薦使用軟RAID的方式來實現,數據無價!
原創文章,作者:Net18-AnyISalIn,如若轉載,請注明出處:http://www.www58058.com/12262