Raid目的:(1)读写(高性能)
(2)数据冗余性
*ide磁盘在服务器上使用,只能使用6~12个月,而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个以上;;允许使用备盘。
优点:读性能较高;写性能中等校验信息分布式存取,避免写操作瓶颈
适用领域:文件、email、web 服务器
容错度:只允许坏一块磁盘,dbserver不建议使用raid5
组合级别 raid10:先做raid1,在raid1的基础上做raid0(最少2组raid1,raid1为2块盘一组可以有几组)
特点:磁盘使用率50%,写性能较低
容错度:任何一组raid1(2块盘)全坏,整个raid10阵列全部完蛋。
所需成员磁盘:最少4块盘
组合级别 raid50:先做raid5,在raid5的基础上做raid0(最少2组raid5,raid5为3块盘(以上)一组可以有几组)
特点:最少六块盘;配置时要注意:在磁盘冗余度和更好的读写性能之间做出权衡。
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大小为##k,32k,64k,128k) -x #(指定用于备盘的raid设备个数,raid0不支持备盘)
Device…..(个数要等于-n-x指定盘数之和)
示例:创建10G的raid0;步骤:
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*
示例:创建10G的raid1;步骤:
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
示例:创建10G的raid1,带有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
示例:创建大小为20G的raid5阵列,3块10G的盘;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 /mnt;cat /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阵列。
场景:host1:raid5 /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支持JBOD,hadoop可能会用到JBOD技术。
转载于:https://blog.51cto.com/ufirst/1432530