Raid目的:(1)读写(高性能)

          2)数据冗余性

*ide磁盘在服务器上使用,只能使用612个月,而scsi硬盘可以使用几年,并且传输速度快,可靠稳定,不消耗cpu资源,有自己的计算控制芯片。

 

在没有raid的情况下每一块硬盘的控制器是连接到主板的总线上的,可直接与内存和cpu通信,os看到的是每一块磁盘。

 

raid的情况下每一块硬盘的控制器是连接到raid控制器上的由raid控制器对其做一个集中控制,再由raid控制器统一连到主板上去,os看不到raid控制器后面的每一块磁盘,os只能看到一个存储设备,raid控制器把底层块设备做了进一步抽象,因此os要实现对raid的管理通常就是对这块raid芯片的管理,raid芯片可能是主板上内嵌的也可能是独立的raid卡芯片,是一个pci-e接口的适配器,工作在对应磁盘控制器的上层。

 

设定raid:一般在bios中设定,设定好以后再装os,此时os看到的是一个磁盘(raid控制器)

 

专业级raid芯片:自带内存;自带电池供电。

 

Raid级别;level:用来描述同一个磁盘阵列中磁盘间不同的组合逻辑。

 

Raid0:以条带的形式将数据均匀分布在阵列上的各个磁盘上,由raid芯片完成数据分割,由它完成将数据存放在各个磁盘上。

优点:并行读写,性能提升极大。

缺点:无冗余,只要阵列中坏一块磁盘,整个阵列就全坏了

所需成员磁盘数:2个或以上;注:如果成员磁盘过多,raid芯片可能会成为读写性能的瓶颈。

适用场合:可用于做临时目录;缓存。

 

Raid1:镜像;以镜像为冗余方式对虚拟磁盘的数据做多份拷贝,放在多块(所有)成员磁盘上,*:成员磁盘每一个扇区,每一个位的数据都是一一对应的,在储存数据前成员磁盘都要对应一下存储位置,才能开始存储数据。

故障:如果其中一块磁盘坏了,将其用新磁盘换下,新磁盘会被做一次镜像同步(sync),这个操作就是新磁盘与其他成员盘之间建立对应关系的过程,其他成员盘将自己的数据按位逐个复制到新磁盘上,这个sync过程可能会耗费一定的时间,因此我们必须监控raid,如果有坏盘,要及时换下来----à另外,raid1是支持热备盘的,平时2块盘工作一旦坏了一块盘,另外一块盘会被自动加入,并被同步重建数据。

优点:读性能有提高,可并行读数据;具有100%冗余。

缺点:写性能下降,因为要检验成员磁盘是否同步;磁盘空间利用率只有50%

适用领域:财务,金融等数据存储环境(高可用、高安全性)

成员磁盘数量:2块磁盘或以上,数量为2的倍数。

 

Raid5:校验冗余:校验被均匀的分散到阵列的各个磁盘上。

所需磁盘数:3个或3个以上;;允许使用备盘。

优点:读性能较高;写性能中等校验信息分布式存取,避免写操作瓶颈

适用领域:文件、emailweb  服务器

容错度:只允许坏一块磁盘,dbserver不建议使用raid5

 

组合级别  raid10:先做raid1,在raid1的基础上做raid0(最少2raid1raid12块盘一组可以有几组)

特点:磁盘使用率50%,写性能较低

容错度:任何一组raid12块盘)全坏,整个raid10阵列全部完蛋。

所需成员磁盘:最少4块盘

 

组合级别  raid50:先做raid5,在raid5的基础上做raid0(最少2raid5raid53块盘(以上)一组可以有几组)

特点:最少六块盘;配置时要注意:在磁盘冗余度和更好的读写性能之间做出权衡。

 

Raid芯片介绍:

适用于io要求高或者数据冗余度高的场景。如果这个raid中磁盘的最大吞吐量可以达到100MB/s,而raid芯片处理能力仅为50MB/s,那么当前整个raid的性能仅为50MB/s;为了提升性能,厂商为raid芯片提供内存,让raid芯片接到数据后先放到自己的内存,再传到磁盘上,就解决了这个瓶颈

问题:如果raid芯片尝试将自己内存中的数据传到磁盘上,此时断电了,如果raid芯片无电池,这部分数据就丢失了;如果raid芯片自带可充电电池,在断电时,可以顶上几分钟,使raid芯片完成数据从内存传输到磁盘,等下次开机后此电池可以再一次充满电。

这样自带内存和电池的raid芯片一般来说不会便宜,而数据库服务器就需要这样的raid芯片,以防止重要数据的丢失。

 

 

 

 

raid:在没有raid芯片下的一种选择

Linux上通过一个md的模块来实现软raid,基于此模块提供的系统调用有人开发出了一个软raid的管理工具mdadm;软raid的设备文件为/dev/md0  /dev/md1

 

raid缺陷:(1)依赖于操作系统,一旦操作系统出故障就会随着操作系统一起无法被访问。(2)依赖于md模块,计算需要占用cpu时间片,性能不会很好。

 

马哥建议:生产环境中,不建议使用软raid,现在硬raid入门级的也不贵,即使入门级的硬raid也比软raid性能好很多,现在很多服务器主板都有集成硬raid芯片。

 

下面介绍一下软raid的构建,以备万一用到:

*:做软raid时千万不要使用同一磁盘上的分区,不但没有意义,还可能搞坏你的磁盘

 

 

 

 

Mdadm:模式化的命令,下面是几个常用的模式,不指定模式默认为管理模式:

-C:创建  -a {yes|no}(是否为新建的raid设备自动创建设备文件)  -l  #(指定raid级别为#)  -n  #(指定用于raid的块设备的个数;不包括备盘) -c  ##k(指定chunk大小为##k32k,64k,128k)      -x #(指定用于备盘的raid设备个数,raid0不支持备盘)

                       Device…..(个数要等于-n-x指定盘数之和)

 

示例:创建10Graid0;步骤:

1)  fdisk  /dev/sdb  t..fd..

2)  partx  -a  /dev/sdb1 /dev/sdb

3)  fdisk  /dev/sdc  t..fd..

4)  partx  -a  /dev/sdc1 /dev/sdc

5)  cat /proc/partitions

6)  cat /proc/mdstat(先确定原来是否存在md设备文件)

7)  mdadm  -C  /dev/md0 -a  yes  -l 0  -n  2 /dev/sd{b,c}1

8)  cat /proc/mdstat  #cat/dev/md/md-device-map(md设备与md设备文件的对应表)

9)  mke2fs  -t  ext4 /dev/md0

10)             mkdir  /backup#mount /dev/md0  /backup

 

mdadm  -D            设备文件名(/dev/md0  (查看设备文件详细信息)

 

*)设备文件设备号介绍:    major主设备号,用于表示设备类别

                                                        Minor次设备号,用于区分同一类别下不同的具体设备

查看本机主从设备号:ls  -l  /dev/sd*

 

示例:创建10Graid1;步骤:

1)  fdisk  /dev/sdb  t..fd..

2)  partx  -a  /dev/sdb2 /dev/sdb

3)  fdisk  /dev/sdc  t..fd..

4)  partx  -a  /dev/sdc2 /dev/sdc

5)  cat /proc/partitions  #这几步可以通过脚本来实现,partx命令不行的话只有reboot,也可以google一下相关的解决方案(reboot终归不是办法,很多server不允许停止业务!)。

6)  mdadm  -C  /dev/md1 -a  yes  -n 2  -l  1 /dev/sd{b,c}2

7)  等待2块盘完成同步#watch  -n 1  ‘cat /proc/mdstat’

8)  Mke3fs  -t  ext4 /dev/md1  -L  MD1

9)  Mount  /dev/md1  /mnt

10)             Df  -lh;mdadm -D  /dev/md1

11)             模拟raid1坏了一块盘Mdadm /dev/md1  -f  /dev/sdb2(sdb2设定为损坏)raid阵列中磁盘管理命令:mdadm /dev/md#          option       /dev/sd#(option:-f:将指定设备模拟为损坏;-r将损坏设备移除;-a新增一个设备到阵列中)

12)             Mdadm  -D /dev/md1#cat /mnt/xxx

13)             移出坏盘mdadm   /dev/md1 –r/dev/sdb2#cat /mnt/xxx

14)             新增盘mdadm        /dev/md1 –a/dev/sdb2#mdadm -D /dev/md1#cat /proc/mdstat

 

 

示例:创建10Graid1,带有1个备盘;步骤:

1)  fdisk  /dev/sdb  t..fd..

2)  partx  -a  /dev/sdb3 /dev/sdb

3)  fdisk  /dev/sdc  t..fd..

4)  partx  -a  /dev/sdc3 /dev/sdc

5)  fdisk  /dev/sdd  t..fd..

6)  partx  -a  /dev/sdd3 /dev/sdc

7)  cat /proc/partitions  #这几步可以通过脚本来实现,partx命令不行的话只有reboot,也可以google一下相关的解决方案(reboot终归不是办法,很多server不允许停止业务!)。

8)  mdadm  -C  /dev/md2 -a  yes  -n 2  -l  1  -x1  /dev/sd{b,c,d}3#停掉一个raid阵列;#cat/proc/mdstat#mdadm  -S  /dev/md126# cat /proc/mdstat(停掉该阵列以后就可以使用它的磁盘来做其他事了)

9)  cat /proc/mdstat#mdadm  -D/dev/md2(等待同步完成)

10)             mke2fs  -t ext4  /dev/md2;mount /dev/md2/mnt;cp 1 /mnt;cat /mnt/1

11)             模拟一块盘损坏Mdadm /dev/md1  -f  /dev/sdb3#mdadm  -D /dev/md2#可以看到备盘正在同步#移除坏的磁盘#mdadm  /dev/md2 –r /dev/sdb3#cat /mnt/1

 

示例:创建大小为20Graid5阵列,310G的盘;fdisk…t..fd..partx过程略

1)  mdadm      -C  /dev/md3 -ayes –l 5 –n 3 –c 256 /dev/sd{a,b,c,}4

2)  等待2块盘完成同步#watch  -n 1  ‘cat /proc/mdstat’

3)  Mke2fs  -t  ext4  /dev/md3;mount/dev/md3  /mnt;cp 1 /mntcat /mnt/1

4)  模拟一块磁盘损坏Mdadm/dev/md3  -f  /dev/sdb4; mdadm  -D /dev/md3

5)  再模拟一块磁盘损坏Mdadm/dev/md3  -f  /dev/sdc4; mdadm  -D /dev/md3

6)  Umount  /mnt; mount/dev/md3  /mnt挂载失败

 

示例:raid的装配:例:在host1上有一个raid5阵列,而host1坏了,将这几块盘装到host2上,重新让host2识别这个raid阵列。

场景:host1raid5  /dev/md7  /dev/sd{b,c,d}2

         Host2:识别为sdd,sde,sdf

Mdadm -A  /dev/md2  -a yes  -l  5 -n  3  /dev/sd{d,e,f}2

注:-l-n的参数要和原来的设置保持一致。

注:raid5也支持使用备盘

注:JBOD技术:将多个硬盘当一个使用,用满一个硬盘再用下一个,mdadm支持JBODhadoop可能会用到JBOD技术。