raid及mdadm

raid的作用主要是用来提高磁盘的读写速率和提高数据的容错率。
常见的raid级别有:

    raid0,raid1,raid5,raid10等

raid0:

    理论上创建raid0至少需要两块盘,每一块盘都用做读写数据,也就是说:一个数据会拆分成多个,分别写入到每块磁盘中,读取数据的时候也会从每块盘中读取。优点:大大提高了数据的读写速率;缺点:容错率很差,只要其中一个块盘坏了,数据就不可用。
    raid0的磁盘利用率为100%。
    另外在实际生产环境中一块盘也能做raid0.

raid1:

    创建raid1需要两块盘,其中一块盘作数据盘,用来存储数据,另一块为镜像盘,用来备份数据。优点:容错率高,允许坏掉一块盘,不会破坏数据,读取速率比一块盘要高;缺点:因为一份数据要写入两块盘,所以写入数据速率低,另外成本高,磁盘的利用率只有50%。

raid5:

    创建raid5至少需要三块盘,其中两块轮流作为数据盘,用来存储数据,另外一块作为校验盘。优点:容错率高,允许坏掉一块盘,不会破坏数据,当其中一块盘坏了之后,可通过校验盘恢复破坏的数据,如果校验盘坏了可通过两块盘的数据恢复校验盘,读写性能略有提升;缺点成本较高,不能同时坏两块盘。磁盘利用率为(n-1)/n
    raid6和raid5差不多,raid6至少需要4块盘,两块做校验盘。

raid10:
创建raid10至少需要四块盘,先两两做成raid1再做成raid0;磁盘利用率为1/2.
另外在生产环境中常用的还用一种jbod的直通模式,就是系统和磁盘直连,在做hadoop大数据中经常需要这种模式。
如,软raid1创建:

    首先需要两块盘,这里我创建两个同样大小的逻辑分区 sdb5和sdb6.
    之后将其格式化mkfs.ext4 /dev/sdb5,mkfs.ext4 /dev/sdb6
    使用mdadm模块将其创建成raid1(如果没有mdadm需要安装)
    创建raid1: mdadm -C /dev/md0 -a yes -l 1 -n 2 /dev/sdb5 /sdb6
            -C 创建,-a yes自动创建文件系统,-l raid级别,-n 磁盘数量
    查看raid1状态:mdadm -D /dev/md0(-D 打印信息)
    [root@localhost ~]# mdadm -D /dev/md0 
/dev/md0:
                Version : 1.2
    Creation Time : Fri Aug 10 15:19:55 2018
         Raid Level : raid1
         Array Size : 521792 (509.65 MiB 534.32 MB)
    Used Dev Size : 521792 (509.65 MiB 534.32 MB)
     Raid Devices : 2
    Total Devices : 2
        Persistence : Superblock is persistent

        Update Time : Fri Aug 10 15:19:59 2018
                    State : clean 
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
    Spare Devices : 0

                     Name : localhost.localdomain:0  (local to host localhost.localdomain)
                     UUID : fa32332d:ee855ef9:a94fe472:820b3fec
                 Events : 17

        Number   Major   Minor   RaidDevice State
             0       8       21        0      active sync   /dev/sdb5
             1       8       22        1      active sync   /dev/sdb6

[root@localhost ~]# cat /proc/mdstat 
Personalities : [raid1] 
md0 : active raid1 sdb6[1] sdb5[0]
            521792 blocks super 1.2 [2/2] [UU]

unused devices: <none>

我们知道raid1是有一块备份盘的,允许破坏一块盘而不破坏数据,现在模拟一下,使用watch命令来监控raid的状态:watch -n 1 "cat /proc/mdstat" ,每隔一秒打印raid信息。
现在我们破坏其中一块盘:

 mdadm /dev/md0 --fail /dev/sdb5可以看到其中一块盘破坏了
 [root@localhost ~]# cat /proc/mdstat 
Personalities : [raid1] 
md0 : active raid1 sdb6[1] sdb5[0](F)      #F fail表示破坏
            521792 blocks super 1.2 [2/1] [_U]    # 看到只有一个U up

unused devices: <none>
使用mdadm -D /dev/md0查看
    Number   Major   Minor   RaidDevice State
   0       0        0        0      removed
   1       8       22        1      active sync   /dev/sdb6

/dev/sdb5破坏后需要将其移除:mdadm /dev/md0 --remove /dev/sdb5
添加另一块好的盘将raid1恢复:mdadm /dev/md0 --add /dev/sdb5,恢复后

     Number   Major   Minor   RaidDevice State
                 2       8       21        0    active sync   /dev/sdb5
                 1       8       22        1    active sync   /dev/sdb6

停止raid:mdadm -S /dev/md0
启动raid:mdadm -A /dev/md0 /dev/sdb5 /dev/sdb6

    如需自动装配需要写入配置文件:mdadm -D --scan > /etc/mdadm.conf

更多的参数使用man mdadm查看,另外软raid在实际生产线上用的非常少,因为一旦系统破坏磁盘的数据就毁了,所以一般使用硬raid。

猜你喜欢

转载自blog.51cto.com/13803030/2301647