常見RAID級別原理, Linux中軟RAID實現方式詳解

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)

File:RAID 0.svg本文圖片轉自維基百科

RAID-1

    將多個硬盤相互做成鏡像,提高冗余能力,讀取速度

    簡單的來說就是兩個(一般情況下RAID-1都是兩個硬盤組成)或多個硬盤做成鏡像,例如:給Disk0寫入數據的時候,Disk1也寫入數據,當Disk0損壞,Disk1的數據還保存著。這樣極大提高了冗余能力,讀取時兩個硬盤也可以并行讀取來提高讀取性能,但是寫入速度略有下降。

RAID-1總結

    1、提高了讀性能,寫性能下降

    2、極大提高了容錯能力

    3、最少使用2塊硬盤

    4、硬盤可用空間,為所有硬盤中空間最小硬盤的空間大小, 公式 1*min(Disk0..DiskN)

File:RAID 1.svg本文圖片轉自維基百科

RAID-4

    由3塊或3塊以上設備組成,并行處理提高磁盤性能,一個硬盤存儲冗余校驗碼,通過異或運算還原數據

    簡單來說就是三個或三個以上的硬盤組成一組設備可以實現當某一個硬盤損壞可以使其數據通過異或運算還原,通過讀寫并行處理提高性能,但是因為冗余校驗碼都是存放在單一硬盤上,所以此硬盤性能可能會很差,并且易損壞。

RAID-4總結:

    1、提高了讀寫、IO性能,但是存放校驗碼的硬盤性能差

    2、提高硬盤容錯能力,但是使用一塊硬盤存放校驗碼,要是此硬盤損壞后果可想而知

    3、最少使用3塊硬盤

    4、最大硬盤使用空間,為所有硬盤中空間最小的硬盤的空間大小乘以硬盤數減去1, 公式(N-1)*min(Disk1..DiskN)

File:RAID 4.svg本文圖片轉自維基百科

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)

File:RAID 5.svg本文圖片轉自維基百科

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

File:RAID 10.svg本文圖片轉自維基百科

File:RAID 01.svg本文圖片轉自維基百科

實戰:在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

(0)
Net18-AnyISalInNet18-AnyISalIn
上一篇 2016-03-09 10:08
下一篇 2016-03-09 10:15

相關推薦

  • linux基礎學習第十二天(shell函數、數組以及yum使用及編譯安裝)

    2016-08-18 授課內容: shell編程基礎(select 循環與菜單、函數) yum管理、定制yum倉庫 select 循環與菜單         select variable in list       &…

    Linux干貨 2016-08-21
  • 文件、目錄練習

    將/etc/issue文件的內容轉換為大寫保存到/tmp/issue.out文件中: 將當前系統登錄用戶信息轉換為大寫后保存至/tmp/who.out文件中: 將/root/下文件列表,顯示成一行,文件名之間用空格隔開: file1文件的內容為“1 2 3 4 5 6 7 8 9 10”計算出所有數字的總和: 處理字符串“xt.,| 1 jr#!$mn 2 …

    Linux干貨 2016-08-05
  • 馬哥linux2014|2015全套教程

    1、本課程全程將基于集成了Openstack云環境、支持高精度時間(PTP)及虛擬化性能大大提升的RHEL 6.5或CentOS 6.6,間或介紹CentOS 7系統的使用; 2、此文章給出的只是個課程知識點框架,實際講解過程相當精細;另外,知識點講授的次序未必同此文章所標示的順序相同; 3、第15期面授班定于2015年3月24號開課;本期將會是馬哥教育數年…

    Linux干貨 2015-07-14
  • 馬哥教育網絡班22期第一周課程練習

    1.描述計算機的組成及其功能     計算機的組成部分分為硬件部分與軟件部分         硬件部分: I/O設備 + 運算器 + 存儲器 + 控制器       &n…

    Linux干貨 2016-08-15
  • 一個不想被打斷腿的人的學習宣言

    聽說不曬學習宣言的會被某人打斷腿,忍了好幾天,思考了好幾天,想了想,還是腿比較重要。廢話就不多說了。上圖~~!  生命中總要去經歷一些,好讓自己在老的時候回憶起來,不至于說:“哎,怎么就沒有去拼一下呢!”

    Linux干貨 2016-10-27
  • LVS(Linux Virtual Server)學習筆記

    LVS(Linux Virtual Server)學習筆記 此文主要對lvs負載均衡學習的總結,一為記錄,二為鞏固。主要介紹:1、lvs基礎;2、lvs的配置;3、lvs的實現 前提:負載均衡(LB Cluster)     負載均衡實現方法有兩種:硬件實現和軟件實現;    &…

    Linux干貨 2017-02-13
欧美性久久久久