硬件阵列和软件阵列

硬件阵列需要使用磁盘阵列卡,系统要安装磁盘阵列的驱动器

 

RAID级别

RAID在存储的时候会将各个磁盘预划分为等同的小区块,在写数据时将数据按照磁盘小区(称为chunk)块的大小进行写数据。

 

RAID-0

  至少两块磁盘。在写数据时是按顺序依次写入各个磁盘中

优点:磁盘总容量是各磁盘之和。等量模式,性能最佳,写性能

缺点:1、任何一个磁盘损毁,整个RAID上面的数据都将丢失而无法读取。

      2、如果组成RAID-0的磁盘容量不等,那么等到容量小的磁盘用完,数据只能写入容量大的磁盘中。

 

性能提升:读,写

冗余能力:无

空间利用率:ns

 

RAID-1:映像模式,完整备份

  至少需要两块相同磁盘,如果不同,总容量将以容量小的磁盘容量为主

优点:数据完整备份,读性能好,写性能差

 

性能表现:写性能下降,读性能提升

冗余能力:有

空间利用率:1/2

 

RAID 0+1:先做两组RAID-0,在将两组RAID-0做成RAID-1

性能提升:读,写提升

冗错能力:有

空间利用率:1/2

 

RAID 1+0:先做两组RAID-1,在将两组RAID-1做成RAID-0

性能提升:读,写提升

冗错能力:每组只允许块一个磁盘

空间利用率:1/2

 

RAID-4 :至少需要3块磁盘,第三块磁盘做校验码

性能提升:读,写提升

冗错能力:有

空间利用率:(n-1/n

 

 

RAID-5至少三块磁盘,两块存数据,一块存校验码,只能允许有1块磁盘的损坏.在将数据块写入磁盘时采用校验码对角线存放的机制来保证数据的安全,分为左对角线存放(通常使用)和右对角线存放。

性能提升:读,写

冗余能力:有

空间利用率:(n-1/n

 

RAID-6是在RAID-5的基础上在加一块磁盘作为校验盘,可以允许出现两块磁盘损坏

性能提升:读,写

冗余能力:有

空间利用率:(n-2/n

 

 

JBOD技术:简单将多个磁盘逻辑成一个磁盘来应用,单纯扩容功能,读写速度和数据安全不变

性能提升:读,写

冗余能力:有

空间利用率:完全利用

 

 

提供磁盘阵列的软件是mdadm

硬盘类型:

SATA:133Bbps600Mbps6Gbps  串行

IDE:133Mbps  并行

CISC:  small computer system interface  并行总结

USB:3.0达到480Mbps  串行

SAS:

 

linux中有md模块支持做RAID磁盘阵列

使用mdadm命令,支持将任何模块设备做成RAID

模式化的命令: mdadm [mode] <raiddevice> [options] <component-devices>

创建模式

    -C

       -l :级别

       -n:设备个数

       -a:自动创建其设备文件。yes

       -x :指明空闲盘的个数

       -c:指明chunk大小(小分区块的大小)

管理模式

    -f: 标记指定磁盘为损坏;

    -a: 添加磁盘

    -r: 移除磁盘

    mdadm  /dev/md#  --fail或者-f  /dev/sdb1

增长模式

   -G

监控模式

   -F

装配模式

   -A

查看阵列的详细信息

-D 或者--detail

 

观察md的状态:

cat /proc/mdstat

 

停止md设备:

mdadm -S /dev/md#

 

watch命令:周期性的执行某个命令,并以全屏方式显示结果

watch  -n # commend

停用阵列

  -S   或者--stop

例如创建RAID-0

在同一磁盘不同分区创建RAID-0

第一步:创建两个2G的分区/dev/sdb1   /dev/sdb2,分区类型是fd

 

第二步:创建阵列/dev/md0

[root@localhost ~]# mdadm -C /dev/md0 -a yes -n 2 -l 0 /dev/sdb1 /dev/sdb2

mdadm: Defaulting to version 1.2 metadata

mdadm: array /dev/md0 started.

[root@localhost ~]# cat /proc/mdstat 

Personalities : [raid0] 

md0 : active raid0 sdb2[1] sdb1[0]

      4208640 blocks super 1.2 512k chunks

      

unused devices: <none>

 

第三步:格式化/dev/md0

[root@localhost ~]# mkfs -t ext3 /dev/md0

mke2fs 1.41.12 (17-May-2010)

文件系统标签=

操作系统:Linux

块大小=4096 (log=2)

分块大小=4096 (log=2)

Stride=128 blocks, Stripe width=256 blocks

263472 inodes, 1052160 blocks

52608 blocks (5.00%) reserved for the super user

第一个数据块=0

Maximum filesystem blocks=1077936128

33 block groups

32768 blocks per group, 32768 fragments per group

7984 inodes per group

Superblock backups stored on blocks: 

32768, 98304, 163840, 229376, 294912, 819200, 884736

 

正在写入inode完成                            

Creating journal (32768 blocks): 完成

Writing superblocks and filesystem accounting information: 完成

 

This filesystem will be automatically checked every 32 mounts or

180 days, whichever comes first.  Use tune2fs -c or -i to override.

[root@localhost ~]# 

 

第四步:挂载使用/dev/md0/mnt/md文件

[root@localhost ~]# mkdir /mnt/md

[root@localhost ~]# ls /mnt/md

[root@localhost ~]# ls /mnt

md

[root@localhost ~]# mount /dev/md0 /mnt/md

[root@localhost ~]# df

文件系统         1K-块      已用      可用 已用挂载点

/dev/sda1             10079084   2172384   7394700  23% /

tmpfs                   255464         0    255464   0% /dev/shm

/dev/sda3              3527712     72536   3275976   3% /home

/dev/sda2              5039616    141204   4642412   3% /usr/local

/dev/md0               4142444    139420   3792592   4% /mnt/md

[root@localhost ~]# 

[root@localhost ~]# cd /mnt/md

[root@localhost md]# ls

lost+found

[root@localhost md]#

 

RAID-0完成

构建RAID-1

/dev/sdc上创建/dev/sdc1   /dev/sdc2

创建RAID-1

[root@localhost mnt]# mdadm -C /dev/md1 -n 2 -l 1 /dev/sdc1 /dev/sdc2

[root@localhost mnt]# partprobe 

[root@localhost mnt]# cat /proc/partitions 

[root@localhost mnt]# cat /proc/mdstat 

[root@localhost mnt]# mkfs -t ext3 /dev/md1

[root@localhost mnt]# mount /dev/md1 /mnt/md1

 

RAID 模拟错误救援模式

 

模拟/dev/md0下的/dev/sdb1损坏

[root@localhost mnt]# mdadm /dev/md1 --fail /dev/sdc2

mdadm: set /dev/sdc2 faulty in /dev/md1

[root@localhost mnt]# mdadm --detail /dev/md1

/dev/md1:

        Version : 1.2

  Creation Time : Tue Jun 30 01:23:45 2015

     Raid Level : raid1

     Array Size : 2102400 (2.01 GiB 2.15 GB)

  Used Dev Size : 2102400 (2.01 GiB 2.15 GB)

   Raid Devices : 2

  Total Devices : 2

    Persistence : Superblock is persistent

 

    Update Time : Tue Jun 30 01:38:09 2015

          State : clean, degraded 

 Active Devices : 1

Working Devices : 1

 Failed Devices : 1

  Spare Devices : 0

 

           Name : localhost.localdomain:1  (local to host localhost.localdomain)

           UUID : 232ccdda:5a8d76ba:f42a131a:3ce54a72

         Events : 20

 

    Number   Major   Minor   RaidDevice State

       0       8       33        0      active sync   /dev/sdc1

       1       0        0        1      removed

 

       1       8       34        -      faulty spare   /dev/sdc2

 

[root@localhost mnt]# mdadm /dev/md1 --remove /dev/sdc2

mdadm: hot removed /dev/sdc2 from /dev/md1

[root@localhost mnt]# mdadm --detail /dev/md1

/dev/md1:

        Version : 1.2

  Creation Time : Tue Jun 30 01:23:45 2015

     Raid Level : raid1

     Array Size : 2102400 (2.01 GiB 2.15 GB)

  Used Dev Size : 2102400 (2.01 GiB 2.15 GB)

   Raid Devices : 2

  Total Devices : 1

    Persistence : Superblock is persistent

 

    Update Time : Tue Jun 30 01:41:17 2015

          State : clean, degraded 

 Active Devices : 1

Working Devices : 1

 Failed Devices : 0

  Spare Devices : 0

 

           Name : localhost.localdomain:1  (local to host localhost.localdomain)

           UUID : 232ccdda:5a8d76ba:f42a131a:3ce54a72

         Events : 23

 

    Number   Major   Minor   RaidDevice State

       0       8       33        0      active sync   /dev/sdc1

       1       0        0        1      removed

[root@localhost mnt]#

 

在重启系统之后重启RAID 启动不了,查看cat /proc/partitions 文件,发现之前设定的RAID0RAID1 变成了RAID 126RAID 127 .

解决办法,执行mdadm -Ds > /etc/mdadm.conf RAID信息记录到文件中,重启系统重新启动RAID就不会出错了

 

RAID调优:

可以在格式化RAID的时候指定条带(stride)参数

mkfs -t ext3 -E stride=16 -b 4096 /dev/md0  

注意 stride=chunk/block  的倍数

 

 

创建RAID-10

创建第一组RAID-1

[root@localhost ~]# mdadm -C /dev/md1 -n 2 -c 16M -l 1 /dev/sdb{5,6}

[root@localhost ~]# cat /proc/mdstat

Personalities : [raid1] 

md1 : active raid1 sdb6[1] sdb5[0]

      1059200 blocks super 1.2 [2/2] [UU]

      

unused devices: <none>

创建第二组RAID-1

[root@localhost ~]# mdadm -C /dev/md2 -n 2 -c 16M -l 1 /dev/sdb{7,8}

[root@localhost ~]# cat /proc/mdstat 

Personalities : [raid1] 

md2 : active raid1 sdb8[1] sdb7[0]

      1059200 blocks super 1.2 [2/2] [UU]

      

md1 : active raid1 sdb6[1] sdb5[0]

      1059200 blocks super 1.2 [2/2] [UU]

      

unused devices: <none>

 

在此基础上创建RAID-0

[root@localhost ~]# mdadm -C /dev/md10 -n 2 -l 10 /dev/md{1,2}

查看RAID-10

[root@localhost ~]# mdadm -D /dev/md10

/dev/md10:

        Version : 1.2

  Creation Time : Thu Aug 27 06:56:55 2015

     Raid Level : raid10

     Array Size : 1057792 (1033.17 MiB 1083.18 MB)

  Used Dev Size : 1057792 (1033.17 MiB 1083.18 MB)

   Raid Devices : 2

  Total Devices : 2

    Persistence : Superblock is persistent

 

    Update Time : Thu Aug 27 06:57:03 2015

          State : clean 

 Active Devices : 2

Working Devices : 2

 Failed Devices : 0

  Spare Devices : 0

 

         Layout : near=2

     Chunk Size : 512K

 

           Name : localhost.localdomain:10  (local to host localhost.localdomain)

           UUID : 20bbfec0:fda1c342:18cb8605:2c9964af

         Events : 17

 

    Number   Major   Minor   RaidDevice State

       0       9        1        0      active sync set-A   /dev/md1

       1       9        2        1      active sync set-B   /dev/md2

 

格式化RAID-10

[root@localhost ~]# mke2fs -t ext3 -L "RAID-10" /dev/md10

查看RAID-10信息

[root@localhost ~]# blkid /dev/md10

/dev/md10: LABEL="RAID-10" UUID="b12da796-fa15-48ad-a46e-d94b90fa62b5" SEC_TYPE="ext2" TYPE="ext3" 

挂载RAID-10/mnt目录

 [root@localhost ~]# mount /dev/md10 /mnt

然后就可以正常使用了。