RAID及构建RAID-10

在过去,我们能使用的硬盘容量不大,特别是个人电脑里。但在某些情况下会用到很大的储存空间,例如公司中存储着大量的客户信息,而这些磁盘想必就不够用了。其实有一中存储机制,称为磁盘阵列(RAID)。那么什么是RAID?

RAID:

RAID:『Redundant Arrays of Inexpensive Disks, RAID 』,英翻中的意思是:容错式廉价磁盘阵列。RAID 可以透过一个技术(软件或硬件),将多个较小的磁盘整合成为一个较大的磁盘装置;而这个较大的磁盘功能可不止是储存而已,他还具有数据保护的功能呢。整个 RAID 由于选择的等级(level) 不同,而使得整合后的磁盘具有不同的功能,基本常见的level 有这几种
RAID-0:

RAID -0:等量模式



这种模式如果使用相同型号与容量的磁盘来组成时,效果较佳。即至少两块磁盘。
当有数据要写入 RAID 时,资料会先被切割成符合小区块的大小,然后再依序一个一个的放置到不同的磁盘去。由于数据已经先被切割并且依序放置到不同的磁盘上面,因此每颗磁盘所负责的数据量都降低了!
它的优势是读写性能的提升,利用率达到了100%缺点是没有容错能力,有一个磁盘损坏,那么这个阵列失效了,文件就会都损坏。

RAID-1:

RAID-1 (镜像模式,):完整备份两块磁盘始终同步。



这种模式也是需要相同的磁盘容量的,最好是一模一样的磁盘如果是不同容量的磁盘组成RAID-1 时,那么总容量将以最小的那一颗磁盘为主!
当一份数据传送到RAID-1 之后会被分为两股,并分别写入到各个磁盘里头去。读性能提升,但写性能略有下降,有冗余能力,防止物理损坏。

RAID-5:

RAID-5:效能与数据备份的均衡考虑



RAID-5 至少需要三块以上的磁盘才能够组成这种类型的磁盘阵列。这种磁盘阵列的数据写入有点类似RAID-0 ,不过每个循环的写入过程中(striping),在每颗磁盘还加入一个同位检查数据这个数据会记录其他磁盘的备份数据, 用于当有磁盘损毁时的救援。
它的优势是读写性能的提升,有容错能力,允许最多一块磁盘的损坏。

另外,由于RAID 5 仅能支持一颗磁盘的损毁,所以还发展出另外一种等级,就是RAID 6 ,这个RAID 6 则使用两颗磁盘的容量作为parity 的储存,因此整体的磁盘容量就会少两颗,但是允许出错的磁盘数量就可以达到两颗了! 也就是在 RAID 6 的情况下,同时两颗磁盘损毁时,数据还是可以救回来!

RAID-10和RAID-01:

RAID-10和RAID-01:都是由RAID-0与RAID-1的组合,那么最少需要用到四块硬盘。优点就是RAID-0与RAID-1的组合。读写的性能提升。
区别于RAID-10是先由两两组合成RAID1,再由两个RAID1组合成RAID-0,



而RAID-01是先由两两组合成RAID0,再由两个RAID0组合成RAID-1



但是由于是不同的组合,稍微还是有点差别的,像RAID-01,如果disk a损坏那么左边的RAID0就用不了,就只剩下右边RAID0在工作,相当于一下就损失了两块硬盘。而RAID-10,如果是disk a损坏,那么就只有disk a不能使用,disk b还能继续使用,不影响。所以在实际中如果选择RAID-0和RAID-1的组合大部分会选择RAID-10这种。

对于RAID阵列的优点其实重点在于:

  1. 数据安全与可靠性:指的并非网络信息安全,而是当硬件(指磁盘) 损毁时,数据是否还能够安全的救援或使用之意;
  2. 读写效能:例如RAID 0 可以加强读写效能,让你的系统I/O 部分得以改善;
  3. 容量:可以让多颗磁盘组合起来,故单一文件系统可以有相当大的容量。


下面我们在虚拟中设定磁盘阵列RAID-10,
1.假设我们在虚拟机中添加了如下硬盘:



刚开始系统没经过重启是不识别的,这里有两种方式可以让系统识别新增加的磁盘。

1.重启虚拟机(在实际机器中重启机器)
2.用命令:这样在不重启的情况下就可识别磁盘。



这里我们可以看到已经识别了,多出了sdb.sdc,sdd,sde这四块盘下面我们就可以设置了。

2.设定前我们需先了解下mdadm这个命令,这个命令可实现软件RAID的实现。

mdadm:
  命令语法格式:mdadm[mode] <raiddevice> [options] <component-devices>
常见模式:
        创建: -C    装配 : -A       管理:-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: 标记指定磁盘为损坏
           -a: 添加磁盘
           -r: 移除磁盘
观察md的状态:
           cat /proc/mdstat

2.用mdadm创建并定义RAID的设备

[root@centos7 ~]#mdadm -C /dev/md0 -a yes -l 10 -n 4 /dev/sd{b,c,d,e}  注:这里创建的RAID名为md0
mdadm: largest drive (/dev/sde) exceeds size (20955136K) by more than 1%
Continue creating array? y 注:输入y就自动创建了
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[root@centos7 ~]#cat /proc/mdstat  注:我们通过观察md的状态可得知进度,同时也可以通过mdadm -D /dev/md0详细的信息
Personalities : [raid10] 
md0 : active raid10 sde[3] sdd[2] sdc[1] sdb[0]
      41910272 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
      [===========>.........]  resync = 59.3% (24873216/41910272) finish=1.3min speed=207256K/sec
      
unused devices: <none>
[root@centos7 ~]#mdadm -D /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Thu Jun 22 21:11:48 2017
     Raid Level : raid10
     Array Size : 41910272 (39.97 GiB 42.92 GB)
  Used Dev Size : 20955136 (19.98 GiB 21.46 GB)
   Raid Devices : 4
  Total Devices : 4
    Persistence : Superblock is persistent

    Update Time : Thu Jun 22 21:15:17 2017
          State : clean 
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

         Layout : near=2
     Chunk Size : 512K

           Name : centos7.3.zj.com:0  (local to host centos7.3.zj.com)
           UUID : 2d988da3:c46ab5c4:ae86d5db:43b3b96b
         Events : 17

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync set-A   /dev/sdb
       1       8       32        1      active sync set-B   /dev/sdc
       2       8       48        2      active sync set-A   /dev/sdd
       3       8       64        3      active sync set-B   /dev/sde

通过上面的命令,创建RAID可以说已经成功一大半了。下面就是对文件系统的格式化。
3.生成RAID的配置文件

[root@centos7 ~]#ll /etc/mdadm.conf 注:默认开始不存在
ls: cannot access /etc/mdadm.conf: No such file or directory
[root@centos7 ~]#mdadm -Ds /dev/md0 >/etc/mdadm.conf 注:导入生成
[root@centos7 ~]#ll /etc/mdadm.conf
-rw-r--r--. 1 root root 93 Jun 22 21:43 /etc/mdadm.conf

4.用文件系统对每个RAID设备进行格式化。

[root@centos7 ~]#mkfs.xfs /dev/md0 注:文件系统格式化默认生成下面信息,如需特别要求可加选项来指定对文件系统的要求。
meta-data=/dev/md0               isize=512    agcount=16, agsize=654720 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=10475520, imaxpct=25
         =                       sunit=128    swidth=256 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=5120, version=2
         =                       sectsz=512   sunit=8 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

5.用blkid命令查看生成好的md0等磁盘的文件系统格式及UUID,到这里基本就成功了,接下来就是挂载。

[root@centos7 ~]#blkid
/dev/sdb: UUID="2d988da3-c46a-b5c4-ae86-d5db43b3b96b" UUID_SUB="659aba42-0617-295d-c9a4-aa49bc59624d" LABEL="centos7.3.zj.com:0" TYPE="linux_raid_member" 
/dev/sdc: UUID="2d988da3-c46a-b5c4-ae86-d5db43b3b96b" UUID_SUB="79c73d4a-0e1b-070e-849d-38416cbf91fe" LABEL="centos7.3.zj.com:0" TYPE="linux_raid_member" 
/dev/sda1: UUID="637077c6-3003-40e0-8689-1556bb4fa00e" TYPE="xfs" 
/dev/sda2: UUID="e8d7cbe2-0fd0-4355-b535-a7b54c3febd9" TYPE="xfs" 
/dev/sda3: UUID="4ca027ad-66c8-4132-809f-9ef47aa068b8" TYPE="xfs" 
/dev/sda5: UUID="52ceaf06-70a8-4ce2-9bea-e4be30b6af18" TYPE="swap" 
/dev/sda6: UUID="3fb7ca42-0efc-4412-a8cc-40d98d83870b" TYPE="xfs" 
/dev/sr0: UUID="2016-12-05-13-52-39-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" 
/dev/sde: UUID="2d988da3-c46a-b5c4-ae86-d5db43b3b96b" UUID_SUB="81532d29-9dbe-5769-0e87-07f293de4d96" LABEL="centos7.3.zj.com:0" TYPE="linux_raid_member" 
/dev/md0: UUID="afdbce67-6209-4393-ab48-3f7881f0465c" TYPE="xfs" 
/dev/sdd: UUID="2d988da3-c46a-b5c4-ae86-d5db43b3b96b" UUID_SUB="d9ae2865-8631-085d-bd34-a7cdb3a188d7" LABEL="centos7.3.zj.com:0" TYPE="linux_raid_member" 

6.挂载RAID10,并进行文件测试。

[root@centos7 ~]#mkdir /mnt/raid10  注:在mnt下创建一个raid10的挂载点
[root@centos7 ~]#mount /dev/md0 /mnt/raid10   注:挂载
[root@centos7 ~]#df -h  注:用df查看是否挂载成功
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2       100G  5.0G   95G   5% /
devtmpfs        474M     0  474M   0% /dev
tmpfs           489M   88K  489M   1% /dev/shm
tmpfs           489M   14M  476M   3% /run
tmpfs           489M     0  489M   0% /sys/fs/cgroup
/dev/sda6        10G   37M   10G   1% /home
/dev/sda1      1014M  169M  846M  17% /boot
/dev/sda3        50G   63M   50G   1% /app
tmpfs            98M   24K   98M   1% /run/user/0
/dev/sr0        7.8G  7.8G     0 100% /run/media/root/CentOS 7 x86_64
/dev/md0         40G   33M   40G   1% /mnt/raid10
[root@centos7 ~]#cd /mnt/raid10      注:进入raid10进行文件的测试
[root@centos7 raid10]#dd if=dev/zero of=bigfile bs=1M count=1024
dd: failed to open ‘dev/zero’: No such file or directory
[root@centos7 raid10]#dd if=/dev/zero of=bigfile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 1.82217 s, 589 MB/s
[root@centos7 raid10]#ll -h
total 1.0G
-rw-r--r--. 1 root root 1.0G Jun 22 22:03 bigfile
[root@centos7 raid10]#df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2       100G  5.0G   95G   5% /
devtmpfs        474M     0  474M   0% /dev
tmpfs           489M   88K  489M   1% /dev/shm
tmpfs           489M   14M  476M   3% /run
tmpfs           489M     0  489M   0% /sys/fs/cgroup
/dev/sda6        10G   37M   10G   1% /home
/dev/sda1      1014M  169M  846M  17% /boot
/dev/sda3        50G   63M   50G   1% /app
tmpfs            98M   24K   98M   1% /run/user/0
/dev/sr0        7.8G  7.8G     0 100% /run/media/root/CentOS 7 x86_64
/dev/md0         40G  1.1G   39G   3% /mnt/raid10  注:这里空间增加,说明raid10创建成功,可以使用了。

接下来要进行最后一步,就是写进fstab。
7.对md0的UUID写进etc下的fstab,为什么要写进fstab呢?因为/etc/fstab 文件负责配置Linux开机时自动挂载的分区。 磁盘被手动挂载之后都必须把挂载信息写入/etc/fstab这个文件中,否则下次开机启动时仍然需要重新手动挂载。

UUID=e8d7cbe2-0fd0-4355-b535-a7b54c3febd9 /                      xfs     defaults        0 0
UUID=4ca027ad-66c8-4132-809f-9ef47aa068b8 /app                    xfs     defaults        0 0
UUID=637077c6-3003-40e0-8689-1556bb4fa00e /boot                   xfs     defaults        0 0
UUID=52ceaf06-70a8-4ce2-9bea-e4be30b6af18 swap                    swap    defaults        0 0
UUID=3fb7ca42-0efc-4412-a8cc-40d98d83870b /home                   xfs     defaults       0 0
UUID=afdbce67-6209-4393-ab48-3f7881f0465c /mnt/md0                xfs     defaults       0 0 
注:按原有格式填写好。

到这里创建raid10就完成了。

拓展:对raid10增加一个备用磁盘防止意外某块磁盘损坏,备用磁盘自动替换。

1.在虚拟机下模拟增加一个磁盘



2.使用命令让系统识别

[root@centos7 ~]#echo '- - -' > /sys/class/scsi_host/host2/scan 
[root@centos7 ~]#lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE   MOUNTPOINT
sda      8:0    0  200G  0 disk   
├─sda1   8:1    0    1G  0 part   /boot
├─sda2   8:2    0  100G  0 part   /
├─sda3   8:3    0   50G  0 part   /app
├─sda4   8:4    0    1K  0 part   
├─sda5   8:5    0    2G  0 part   [SWAP]
└─sda6   8:6    0   10G  0 part   /home
sdb      8:16   0   20G  0 disk   
└─md0    9:0    0   40G  0 raid10 /mnt/raid10
sdc      8:32   0   30G  0 disk   
└─md0    9:0    0   40G  0 raid10 /mnt/raid10
sdd      8:48   0   40G  0 disk   
└─md0    9:0    0   40G  0 raid10 /mnt/raid10
sde      8:64   0   50G  0 disk   
└─md0    9:0    0   40G  0 raid10 /mnt/raid10
sdf      8:80   0   20G  0 disk   注:这里以成功识别到
sr0     11:0    1  7.7G  0 rom    /run/media/root/CentOS 7 x86_64

3.对raid10增加备用磁盘。

[root@centos7 ~]#mdadm /dev/md0 -a /dev/sdf
mdadm: added /dev/sdf
[root@centos7 ~]#mdadm -D /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Thu Jun 22 21:11:48 2017
     Raid Level : raid10
     Array Size : 41910272 (39.97 GiB 42.92 GB)
  Used Dev Size : 20955136 (19.98 GiB 21.46 GB)
   Raid Devices : 4
  Total Devices : 5
    Persistence : Superblock is persistent

    Update Time : Thu Jun 22 22:22:14 2017
          State : clean 
 Active Devices : 4
Working Devices : 5
 Failed Devices : 0
  Spare Devices : 1

         Layout : near=2
     Chunk Size : 512K

           Name : centos7.3.zj.com:0  (local to host centos7.3.zj.com)
           UUID : 2d988da3:c46ab5c4:ae86d5db:43b3b96b
         Events : 18

    Number   Major   Minor   RaidDevice State
       0       8       16        0      active sync set-A   /dev/sdb
       1       8       32        1      active sync set-B   /dev/sdc
       2       8       48        2      active sync set-A   /dev/sdd
       3       8       64        3      active sync set-B   /dev/sde

       4       8       80        -      spare   /dev/sdf  注:已成功加入称为备用磁盘

4.模拟磁盘的损坏

[root@centos7 ~]#mdadm /dev/md0 -f /dev/sdb  注:用-f命令模拟sdb盘损坏
mdadm: set /dev/sdb faulty in /dev/md0
[root@centos7 ~]#mdadm -D /dev/md0  注:查看信息
/dev/md0:
        Version : 1.2
  Creation Time : Thu Jun 22 21:11:48 2017
     Raid Level : raid10
     Array Size : 41910272 (39.97 GiB 42.92 GB)
  Used Dev Size : 20955136 (19.98 GiB 21.46 GB)
   Raid Devices : 4
  Total Devices : 5
    Persistence : Superblock is persistent

    Update Time : Thu Jun 22 22:27:07 2017
          State : clean, degraded, recovering 
 Active Devices : 3
Working Devices : 4
 Failed Devices : 1
  Spare Devices : 1

         Layout : near=2
     Chunk Size : 512K

 Rebuild Status : 22% complete      注:重建状态:完成22%

           Name : centos7.3.zj.com:0  (local to host centos7.3.zj.com)
           UUID : 2d988da3:c46ab5c4:ae86d5db:43b3b96b
         Events : 23

    Number   Major   Minor   RaidDevice State
       4       8       80        0      spare rebuilding   /dev/sdf  注:这里自动把sdf盘替换为损坏的sdb盘
       1       8       32        1      active sync set-B   /dev/sdc
       2       8       48        2      active sync set-A   /dev/sdd
       3       8       64        3      active sync set-B   /dev/sde

       0       8       16        -      faulty   /dev/sdb  注:损坏的sdb以替换下来,接下来我们就可以移除它了。

5.移除损坏的磁盘

[root@centos7 ~]#mdadm /dev/md0 -r /dev/sdb
mdadm: hot removed /dev/sdb from /dev/md0
[root@centos7 ~]#mdadm -D /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Thu Jun 22 21:11:48 2017
     Raid Level : raid10
     Array Size : 41910272 (39.97 GiB 42.92 GB)
  Used Dev Size : 20955136 (19.98 GiB 21.46 GB)
   Raid Devices : 4
  Total Devices : 4
    Persistence : Superblock is persistent

    Update Time : Thu Jun 22 22:36:56 2017
          State : clean 
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

         Layout : near=2
     Chunk Size : 512K

           Name : centos7.3.zj.com:0  (local to host centos7.3.zj.com)
           UUID : 2d988da3:c46ab5c4:ae86d5db:43b3b96b
         Events : 38

    Number   Major   Minor   RaidDevice State
       4       8       80        0      active sync set-A   /dev/sdf
       1       8       32        1      active sync set-B   /dev/sdc
       2       8       48        2      active sync set-A   /dev/sdd
       3       8       64        3      active sync set-B   /dev/sde
注:这里损坏的磁盘就移除了

6.进入raid10观察文件是否还在。

[root@centos7 ~]#cd /mnt/raid10
[root@centos7 raid10]#ll -h
total 1.0G
-rw-r--r--. 1 root root 1.0G Jun 22 22:03 bigfile   注:文件还在

现在我们就可以再加一块备用磁盘,以防意外。
到这里RAID以构建完成。

如有不足请多多指教。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容