1-15-1 RAID磁盘阵列的原理和搭建

大纲:

1.1-1-企业级RAID磁盘阵列

RAID磁盘阵列的原理

RAID0,1,5,10的搭建

硬件RAID卡

1.2-1-使用廉价的磁盘搭建RAID磁盘阵列

实战-配置RAID0带区卷

========================================

1.1 企业级RAID磁盘阵列

RAID磁盘阵列的原理:

RAID(Redundant Array of Independent Disks)独立磁盘冗余阵列

可以提供较普通磁盘更高的速度、安全性,所以服务器在安装时,都会选择创建RAID

RAID有两种创建方式:第一种-->软RAID(通过操作系统软件实现);第二种--->硬RAID(通过硬件阵列卡实现)。

在企业中使用最多的是:raid1、raid10和raid5。不过随着云的高速发展,供应商一般可以把硬件问题解决掉。

RAID磁盘阵列的分类:

raid 阵列有7个基本的级别:0-6,最常用的是0、1、5

不同raid级别的作用、性能、成本是不同的

==========================================

RAID磁盘阵列的工作原理:

raid 0:条带(strping

需要两块或以上磁盘(最好大小相同)

原理:将数据分段后,分别传输到两块磁盘中

提高的写入和读取的速度

(即搬运工,原来一个人搬,现在多了一个人,所以速度成倍增加)。

但是由此,每一个磁盘的数据都是很重要的,不能损坏。

特点:成本低、提高整个磁盘性能和吞吐量,即速度快

缺点:没有冗余或错误修复能力

磁盘利用率:100%

任何一个磁盘的损坏将损坏全部数据(分别存储,均分)

==========================================

RAID 1 mirroring(镜像卷)

需要两块及以上磁盘,当两块磁盘大小不一样时,RAID磁盘阵列大小已最小的计算

原理:把一个磁盘中的数据镜像到另一个磁盘(即同步)。

两个磁盘中的内容是完全一致的。

我们还可以准备一个热备盘,当其中一个磁盘短暂暂停工作时,

可以让热备盘顶替使用。在恢复工作后,自动恢复。

特点:有容错能力

缺点:速度慢、占用率低

磁盘利用率:50%

2块100G磁盘组成RAID1,实际使用容量还是100G,而且两块磁盘中数据是相同的

==========================================

RAID 5:

需要三块或以上磁盘

原理:每次存储数据时,数据被平均分配到n-1个磁盘中,随机选中一个磁盘生成校验码。当有一个磁盘坏掉时,还可使用其他磁盘,将这个磁盘中的数据恢复。但若有两个磁盘损坏时,数据将全部损坏

可以提供热背叛实现故障修复;只损坏一块,没有问题,但是损坏两份,则数据全部损坏

空间利用率:n-1/n

每次存储,随意的会有一个盘存储校验码,校验码为异或运算结果

奇偶校验信息的作用:

当RAID5的一个磁盘数据发生损坏后,利用剩下的数据和相应的奇偶校验信息去恢复被损坏的数据。

扩展异或运算:相对简单的异或运算(相同为0,相异为1

A

B

Xor

0

0

0

1

0

1

0

1

1

1

1

0

==========================================

RAID 10:镜像+条带(组合)

原理:将RAID1与RAID0 组合在一起使用,

 

RAID 0+1的特点:特别适用于既有大量数据需要存取,同时又对数据安全性要求严格的领域。例如:银行、金融、商业超市、仓库库房、各种档案管理等。

创建步骤:应先创建RAID1,然后使用创建的RAID1设备创建RAID0

==========================================

硬件RAID卡

RAID卡可以分为硬RAID卡软RAID卡两种。

硬RAID卡:通过硬件来实现RAID功能的就是硬RAID,独立的RAID卡。

主板集成的RAID芯片都是硬RAID。

软RAID卡:通过软件并使用CPU的RAID卡(指使用CPU来完成RAID的常用计算)

软RAID占用CPU资源较高,绝大部分服务器设备是硬件RAID。

Adaptec SATA RAID 2410SA

亚当普特克 ¥550

亚当普特克RAID卡

RAID功能:RAID0、1、5、10、JBOD

接口:Serial ATA

数据传输率:1.5Gb/s 普通硬盘速率:6G

通道数:4

最多连接设备:4

==========================================

管理软raid工具---mdadm

在Linux系统中,我们使用mdadm命令,来管理软RAID

参数

######################

###  mdadm --help  ###

######################

mdadm is used for building, managing, and monitoring

Linux md devices (aka RAID arrays)

Usage: mdadm --create device options...  #创建一个磁盘阵列 –C

            Create a new array from unused devices.

       mdadm --assemble device options...  #激活一个磁盘阵列 –A

            Assemble a previously created array.

       mdadm --build device options...   #创建一个没有metadata的磁盘阵列,很少用

            Create or assemble an array without metadata.

       mdadm --manage device options...  #对已存在的磁盘阵列进行修改

            make changes to an existing array.

       mdadm --misc options... devices  # 报告或修改相关设备

            report on or modify various md related devices.

       mdadm --grow options device  #更新修改的磁盘阵列

            resize/reshape an active array

       mdadm --incremental device  #从一个阵列中添加或移除一个设备(插拔)

            add/remove a device to/from an array as appropriate

       mdadm --monitor options...  #监控重大变化的一个或多个数组。

            Monitor one or more array for significant changes.

       mdadm device options...

            Shorthand for --manage.  #管理阵列使用--manage选项

Any parameter that does not start with '-' is treated as a device name

or, for --examine-bitmap, a file name.

The first such name is often the name of an md device.  Subsequent

names are often names of component devices.

For detailed help on the above major modes use --help after the mode

e.g.

         mdadm --assemble --help

For general help on options use

         mdadm --help-options

##############################

###  mdadm --help-options  ###

##############################

Any parameter that does not start with '-' is treated as a device name

or, for --examine-bitmap, a file name.

The first such name is often the name of an md device.  Subsequent

names are often names of component devices.

Some common options are:

  --help        -h   : General help message or, after above option,

                       mode specific help message

  --help-options     : This help message

  --version     -V   : Print version information for mdadm #版本信息

  --verbose     -v   : Be more verbose about what is happening  #过程信息

  --quiet       -q   : Don't print un-necessary messages #不打印不需要的信息

  --brief       -b   : Be less verbose, more brief #显示简短的过程信息

  --export      -Y   : With --detail, --detail-platform or --examine use

                       key=value format for easy import into environment #

  --force       -f   : Override normal checks and be more forceful #强制执行

  --assemble    -A   : Assemble an array #激活磁盘阵列

  --build       -B   : Build an array without metadata

  --create      -C   : Create a new array

  --detail      -D   : Display details of an array #打印阵列设备详细信息

  --examine     -E   : Examine superblock on an array component ##检测设备块是否在一个阵列数组中

  --examine-bitmap -X: Display the detail of a bitmap file #

  --examine-badblocks: Display list of known bad blocks on device #

  --monitor     -F   : monitor (follow) some arrays #监控

  --grow        -G   : resize/ reshape and array #

  --incremental -I   : add/remove a single device to/from an array as appropriate

  --query       -Q   : Display general information about how a

                       device relates to the md driver

  --auto-detect      : Start arrays auto-detected by the kernel

热备份盘(hot spare or hot standby driver):为了加强容错的功能以及使系统在磁盘故障的情况下能迅速的重建数据,以维持系统的性能,一般的磁盘阵列系统都可使用热备份功能。

Chunk(块): raid存储数据时每个数据段的大小。 4K,64K

chunk(块):每个数据段大小。以K为单位

=============================================================

实战:搭建RAID0磁盘阵列

第一步:添加两块硬盘,并检查

[root@localhost ~]# ls /dev/sd*

/dev/sda  /dev/sda1  /dev/sda2  /dev/sdb  /dev/sdc

第二步:分别对两块磁盘进行分区操作,并检查

使用以下方法,分别对/dev/sdb、/dev/sdc进行分区操作

[root@localhost ~]# fdisk /dev/sdb

Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.

Be careful before using the write command.

Device does not contain a recognized partition table

Building a new DOS disklabel with disk identifier 0x630e77d6.

Command (m for help): n

Partition type:

   p   primary (0 primary, 0 extended, 4 free)

   e   extended

Select (default p): #默认

Using default response p

Partition number (1-4, default 1): #默认

First sector (2048-41943039, default 2048): #默认

Using default value 2048

Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): #默认

Using default value 41943039

Partition 1 of type Linux and of size 20 GiB is set

Command (m for help): p

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk label type: dos

Disk identifier: 0x630e77d6

   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1            2048    41943039    20970496   83  Linux

Command (m for help): l

0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris       

1  FAT12           27  Hidden NTFS Win 82  Linux swap / So c1  DRDOS/sec (FAT-

2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-

3  XENIX usr       3c  PartitionMagic  84  OS/2 hidden C:  c6  DRDOS/sec (FAT-

4  FAT16 <32M      40  Venix 80286     85  Linux extended  c7  Syrinx        

5  Extended        41  PPC PReP Boot   86  NTFS volume set da  Non-FS data   

6  FAT16           42  SFS             87  NTFS volume set db  CP/M / CTOS / .

7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux plaintext de  Dell Utility  

8  AIX             4e  QNX4.x 2nd part 8e  Linux LVM       df  BootIt        

9  AIX bootable    4f  QNX4.x 3rd part 93  Amoeba          e1  DOS access    

a  OS/2 Boot Manag 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O       

b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor     

c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad hi eb  BeOS fs       

e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT           

f  W95 Ext'd (LBA) 54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/

10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC b

11  Hidden FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor     

12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f4  SpeedStor     

14  Hidden FAT16 <3 61  SpeedStor       ab  Darwin boot     f2  DOS secondary 

16  Hidden FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS   

17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE

18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fd  Linux raid auto

1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep       

1c  Hidden W95 FAT3 75  PC/IX           be  Solaris boot    ff  BBT           

1e  Hidden W95 FAT1 80  Old Minix     

Command (m for help): t

Selected partition 1

Hex code (type L to list all codes): fd

Changed type of partition 'Linux' to 'Linux raid autodetect'

Command (m for help): p

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes / 512 bytes

I/O size (minimum/optimal): 512 bytes / 512 bytes

Disk label type: dos

Disk identifier: 0x630e77d6

   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1            2048    41943039    20970496   fd  Linux raid autodetect

Command (m for help): w

The partition table has been altered!

Calling ioctl() to re-read partition table.

Syncing disks.

[root@localhost ~]# mdadm -E /dev/sd[b-c] #检查sdb 和 sdc状态

/dev/sdb:

   MBR Magic : aa55

Partition[0] :     41940992 sectors at         2048 (type fd)

/dev/sdc:

   MBR Magic : aa55

Partition[0] :     41940992 sectors at         2048 (type fd)

[root@localhost ~]# mdadm -E /dev/sd[b-c]1 #检查sdb1和sdc1状态

mdadm: No md superblock detected on /dev/sdb1.

mdadm: No md superblock detected on /dev/sdc1.

[root@localhost ~]#

第三步:使用mdadm命令,创建RAID0磁盘阵列,并检查

[root@localhost ~]# mdadm -C -v /dev/md1 -l 0 -n 2 /dev/sd[b-c]1

mdadm: chunk size defaults to 512K

mdadm: Defaulting to version 1.2 metadata

mdadm: array /dev/md1 started.

检查:

[root@localhost ~]# mdadm -E /dev/sd[b-c]

/dev/sdb:

   MBR Magic : aa55

Partition[0] :     41940992 sectors at         2048 (type fd)

/dev/sdc:

   MBR Magic : aa55

Partition[0] :     41940992 sectors at         2048 (type fd)

[root@localhost ~]# mdadm -E /dev/sd[b-c]1

/dev/sdb1:

          Magic : a92b4efc

        Version : 1.2

    Feature Map : 0x0

     Array UUID : b7ca701c:f851d48b:c04edb48:5e427145

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

  Creation Time : Thu Aug 18 21:57:07 2016

   Raid Level : raid0

Raid Devices : 2

Avail Dev Size : 41908224 (19.98 GiB 21.46 GB)

    Data Offset : 32768 sectors

   Super Offset : 8 sectors

   Unused Space : before=32680 sectors, after=0 sectors

          State : clean

    Device UUID : 8239d484:1a906768:b758cc5b:aaacda58

    Update Time : Thu Aug 18 21:57:07 2016

  Bad Block Log : 512 entries available at offset 72 sectors

       Checksum : 45d25591 - correct

         Events : 0

Chunk Size : 512K

Device Role : Active device 0

   Array State : AA ('A' == active, '.' == missing, 'R' == replacing)

/dev/sdc1:

          Magic : a92b4efc

    Version : 1.2

    Feature Map : 0x0

     Array UUID : b7ca701c:f851d48b:c04edb48:5e427145

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

  Creation Time : Thu Aug 18 21:57:07 2016

     Raid Level : raid0

   Raid Devices : 2

Avail Dev Size : 41908224 (19.98 GiB 21.46 GB)

    Data Offset : 32768 sectors

   Super Offset : 8 sectors

   Unused Space : before=32680 sectors, after=0 sectors

          State : clean

  Device UUID : a4adb898:e645b661:175ed13a:9ca57053

    Update Time : Thu Aug 18 21:57:07 2016

  Bad Block Log : 512 entries available at offset 72 sectors

       Checksum : 2ca07dd2 - correct

         Events : 0

     Chunk Size : 512K

Device Role : Active device 1

   Array State : AA ('A' == active, '.' == missing, 'R' == replacing)

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

/dev/md1:

    Version : 1.2

  Creation Time : Thu Aug 18 21:57:07 2016

     Raid Level : raid0

     Array Size : 41908224 (39.97 GiB 42.91 GB)

   Raid Devices : 2

  Total Devices : 2

    Persistence : Superblock is persistent

    Update Time : Thu Aug 18 21:57:07 2016

          State : clean

Active Devices : 2

Working Devices : 2

Failed Devices : 0

  Spare Devices : 0

     Chunk Size : 512K

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

           UUID : b7ca701c:f851d48b:c04edb48:5e427145

         Events : 0

    Number   Major   Minor   RaidDevice State

       0       8       17        0      active sync   /dev/sdb1

       1       8       33        1      active sync   /dev/sdc1

[root@localhost ~]# mdadm -E /dev/md1

mdadm: No md superblock detected on /dev/md1.

第四步:创建文件系统

[root@localhost ~]# mkfs.ext4 /dev/md1

mke2fs 1.42.9 (28-Dec-2013)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

Stride=128 blocks, Stripe width=256 blocks

2621440 inodes, 10477056 blocks

523852 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=2157969408

320 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, 2654208,

4096000, 7962624

Allocating group tables: done                           

Writing inode tables: done                           

Creating journal (32768 blocks): done

Writing superblocks and filesystem accounting information: done  

[root@localhost ~]#

第五步:挂载,并设置开机自动挂载

[root@localhost ~]# mkdir /disk

[root@localhost ~]# mount /dev/md1 /disk

[root@localhost ~]# df | tail -1

/dev/md1               41118944   49176  38957976   1% /disk

[root@localhost ~]#

设置开机自动挂载:

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

/dev/md1: UUID="7b702168-4653-43cb-8fb0-6c692a6ff8df" TYPE="ext4"

[root@localhost ~]# vim /etc/fstab

[root@localhost ~]# df | tail -1

/dev/md1               41118944   49176  38957976   1% /disk

[root@localhost ~]# umount /disk

[root@localhost ~]# mount -a

[root@localhost ~]# df | tail -1

/dev/md1               41118944   49176  38957976   1% /disk

[root@localhost ~]#

第六步:模拟一块磁盘损坏

取消开机自动挂载后,直接卸载掉一块磁盘,重启即可。因为RAID0不具备容错能力,当有一个磁盘损坏时,磁盘阵列自然失败!!!

cat !$  # !$-->上一条命令的最后一个参数

watch cat /proc/mdstat #支持查看这条命令的执行结果

cat /proc/mdstat  #查看当前磁盘阵列状态

posted @ 2016-08-21 00:02  小甘丶  阅读(1451)  评论(0编辑  收藏  举报