浅谈linux性能调优之五:调优软raid

混江龙づ霸主 提交于 2019-12-24 17:30:04

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

    存储中的一个重要角色,RAID独立冗余磁盘阵列,从分类上将有两种:基于raid卡的硬raid(硬件实现,速度高,适用于大型应用),基于系统的软raid(一般包含于内核之中,性能不如硬raid,但是可优化,小型服务器)
    特点:数据完整性,防止故障,容量突破,性能提升
    不了解raid相关知识的可以看看这个:http://blog.163.com/sjt_linux/blog/static/199310319201251863948525/
    下面我快速的介绍一下:

RAID 0:
  没校验,数据分段写入磁盘,吞吐量增大,不容错,100%使用,至少2块
  test : mdadm --create /dev/md0 --level=0 --raid-devices=2 --chunk=64 /dev/sd{a,b}1
         mke2fs -j -b 4096 -E stribe=16 /dev/md0
  notice: --chunk 是在创建时指定,stribe是在格式时指定,stribe = chunk / stribe

RAID 1:
  镜像,容错,读性能,至少2块,2的倍数,利用率(100/n)%
  test : mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sda4,5

RAID 5:
  分布式奇偶校验条带化,容错,性能,若一个磁盘损坏,再插入一个新磁盘时,会降级(需要重新计算校验值)
  至少3块,支持热备盘,利用率100*(1-1/n)%
  test : mdadm --create /dev/md0 --level=5 --raid-device=3 /dev/sd{a,b,c}2
浅谈linux性能调优之五:调优软raid - 了了 - 了了的博客
 
  RAID5中数据经常更新时,开销较大

RAID 6:
  两份校验,可以同时坏两块盘,至少4块,利用率100*(1-2/n)
  test : mdadm --create /dev/md0 --level=6 --raid-device=4 /dev/sd{a,b,c,d}1

RAID 10:
  先作raid1,再作raid0
  至少4块
  mdadm --create /dev/md0 --level=10 --raid-devices=4 /dev/sd{a,b,c,d}1
  mdadm -C /dev/md0 -l10 -n4 /dev/sdb{5,6,7,8}

邮件工作:
  /etc/mdadm.conf
    MAILADDR root@example.com
    MAILFROM root@node1.example.com
    PROGRAM /usr/bin/myscripts
  测试:mdadm -Fslt

    总结:从各自的特点可以看出:
            raid0容量大,读写性能高,但是安全性不好。
            raid1安全性好,利用率低
            raid5分布式奇偶校验,安全性好,读写性能较好,但是若数据修改频繁,建议不使用,可以看看上面的图
            raid6与raid5类似,支持同时坏两块盘
            raid10集成raid1,raid0。比起raid5,6修改数据时开销小
        你若使用raid,raid级别的选择便是很重要的!


    优化建议:
        1.若你使用两个或两个以上raid,建议配置“软raid的热迁移”,首先节省了冗余盘的成本,再者结合邮件通知机制做好数据保护
        2.对于raid0,5,6 存在两个特别重要的概念:(chunk size),(Stripe size)
            chunk size:
                  RAID中每个成员盘一次写入的数据量,大于chunk size才到下一个盘读写
            Stripe size = (chunk size)/(filesystem blocksize)
                  表示:在一个盘中一次性写入量
            chunk size = page size(4K) * N
            chunk size = avgrq-sz * 512 / 1024 / disks(iostat -x /dev/sda)
            Stripe size = (chunk size)/(filesystem blocksize)
                注意:chunk size   创建时使用   --chunk = 8
                      stripe size  格式化时使用 -E stripe = 2
        3.写位图:只针对RAID1
              在操作失败时,可以在失败的基础上基础操作,而并非从头开始(例如我们复制一个大文件)
                  --write-bebind 优先读
                  --write-mostly 优先写
        4.具体还可以在/sys/block/mdX/md中调节
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!