常见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.178linux.com/12262

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

相关推荐

  • corosync+pacemaker+pcs 使用ansible配置高可用LAMP构架

    前言: 这篇博客的实验主要是配置两个节点基于corosync + pacemaker的高考用lamp, 是我搞得最痛苦的一次,并且结果还不稳定。主要问题是corosync 1.x + pacemaker 时,如果把pacemaker当成插件使用,尝试很多次都不成功,后来把pacemaker当成半独立的服务进行配置。 但是如此一来crm就没办法进行资源配置,只…

    Linux干货 2016-01-27
  • 网络配置与进程管理

    一、网络配置 1、ifconfig命令  ifconfig [IFACE]      显示所有启动的网络接口信息,包括网卡别名;指明网络接口时,显示指定网络接口信息 ifconfig -a     显示所有网络接口的信息,包括未启动的网卡接口。 if…

    Linux干货 2016-09-08
  • Linux各发行版、哲学思想、基础目录

    Linux发行版本? Linux操作系统的发行版本可以大体分为两类,一类是商业公司维护的发行版本,一类是社区组织维护的发行版本,前者以著名的Redhat(RHEL)为代表,后者以Debian为代表。               R…

    Linux干货 2016-10-26
  • locate、find命令使用总结

    一、简介    在linux系统中存在"一切皆文件"的说法,这就足以说明文件的重要性,因此查找文件也是我们必须要掌握的技能。这时候熟练使用locate、find命令也就显得至关重要。尤其是find命令常用于日常工作中如安装完某个软件之后要查看这些软件的安装配置路径,或是需要按指定条件直接查找我们需要操作的文件。因此更需…

    Linux干货 2015-08-31
  • bash的基础特性[更新中]

    2、bash的工作特性之命令执行状态返回值和命令行展开所涉及的内容及其示例演示。
    3、请使用命令行展开功能来完成以下练习:
    (1)、创建/tmp目录下的:a_c, a_d, b_c, b_d
    (2)、创建/tmp/mylinux目录下的:
    mylinux/
    ├── bin
    ├── boot
    │   └── grub
    ├── dev
    ├── etc
    │   ├── rc.d
    │   │   └── init.d
    │   └── sysconfig
    │   └── network-scripts
    ├── lib
    │   └── modules
    ├── lib64
    ├── proc
    ├── sbin
    ├── sys
    ├── tmp
    ├── usr
    │   └── local
    │   ├── bin
    │   └── sbin
    └── var
    ├── lock
    ├── log
    └── run
    5、如何定义一个命令的别名,如何在命令中引用另一个命令的执行结果?
    6、显示/var目录下所有以l开头,以一个小写字母结尾,且中间至少出现一位数字(可以有其它字符)的文件或目录。
    7、显示/etc目录下,以任意一个数字开头,且以非数字结尾的文件或目录。
    8、显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录。
    9、在/tmp目录下创建以tfile开头,后跟当前日期和时间的文件,文件名形如:tfile-2016-05-27-09-32-22。
    10、复制/etc目录下所有以p开头,以非数字结尾的文件或目录到/tmp/mytest1目录中。
    11、复制/etc目录下所有以.d结尾的文件或目录至/tmp/mytest2目录中。
    12、复制/etc/目录下所有以l或m或n开头,以.conf结尾的文件至/tmp/mytest3目录中。

    2018-03-17
  • LVM逻辑卷&RAID管理&磁盘配置详解

    LVM逻辑卷管理 应用场景:想象一下,你通过传统的硬盘分区方式为某些用户提供了一块磁盘,随着用户数据的不断增加,分区的容量告急。这时要增加容量,只能选择用另一块容量更大的硬盘或分区来替换,在这个过程中,你需要将数据先拷贝至新设备,拷贝完成之后,再用新设备替换容量告罄的设备。假设你很有耐心并且整个数据的拷贝过程是顺顺利利的,你也需要考虑靠背后文件的权限变化、替…

    Linux干货 2016-09-02