• Linux RAID


    • RAID:Redundant Arrays of Inexpensive Disks/廉价冗余磁盘阵列
      • 后来改成:Redundant Arrays of Independent Disks/独立冗余磁盘阵列
    • Berkeley大学一位教授的一篇论文:A case for Redundant Arrays of Inexpensive Disks RAID
      • 提高IO能力:通过磁盘并行读写实现
      • 提高耐用性:通过磁盘冗余来实现
      • 级别:多块磁盘组织在一起的工作方式有所不同
      • RAID的实现方式:
        • 外接式磁盘阵列:通过扩展卡提供适配能力
        • 内接式RAID:主板集成RAID控制器
        • Software RAID:通过软件的方式提供RAID
    • 级别:Level
      • 级别没有好坏高低之分,仅仅表示磁盘组织形式上的不同
      • RAID-0:以0表示,又叫条带卷/strip

        • 读写性能提升
        • 可用空间:N*min(s1,s2...)
        • 无容错能力
        • 最少磁盘数:2
      • RAID-1:以1表示,又叫镜像卷/mirror

        • 读性能提升,写性能略有下降
        • 可用空间:1*min(s1,s2...)
        • 有容错能力
        • 最少磁盘数:2
      • RAID-2,3,4不常用
        • RAID-4:

        • 第三块盘存放校验码,一般为前两块盘数据的异或
        • 允许坏掉一块盘
        • 但是校验盘的IO容易成为系统瓶颈
      • RAID-5:

        • 与RAID-4类似,但是轮流做校验盘
        • 读写性能提升
        • 可用空间:(N-1)*min(s1,s2...)
        • 有容错能力:1块磁盘
        • 最少磁盘数:3
      • RAID-6:
        • 用两块磁盘做校验盘
        • 读写性能提升
        • 可用空间:(N-2)*min(s1,s2...)
        • 有容错能力:2块磁盘
        • 最少磁盘数:4

    以下为混合类型的RAID:

      • RAID10

        • 先组织成RAID-1,再组织成RAID-0
        • 读写性能提升
        • 可用空间:N*min(s1,s2...)/2
        • 有容错能力:每组镜像最多只能坏一块
        • 最少磁盘数:4
      • RAID01

        • 先组织成RAID-0,再组织成RAID-1
        • RAID01不好,因为每组坏一块的概率还是比较大的,此时数据就损坏了;而RAID10中,只要不是一组中的两个磁盘同时坏了,数据就不会损坏
      • RAID50
        • 先组织成RAID5,再组织成RAID-0
      • RAID-7:某公司的产品,IO性能特别好,但是价格特别贵
      • JBOD:Just a Bunch Of Disks
        • 将多块磁盘的空间合并成一个大的连续空间使用
        • 可用空间:sum(s1,s2...)
      • 常用级别:RAID-0,RAID-1,RAID-5,RAID-10,RAID-50,JBOD
    • 实现方式
      • 硬件实现方式
      • 软件实现方式:在生产环境中,不会用软RAID
        • CentOS 6上的软件RAID的实现
          • 结合内核中的md模块(multi disks)
          • mdadm:模式化的工具
            • mdadm [mode] <raid device> [options] <component devices>
            • 支持的RAID级别:LINEAR(类似JBOD),RAID-0,RAID-1,RAID-4,RAID-5,RAID-6,RAID-10,等等
            • raid device:/dev/md#
              • 查看当前系统中是否存在md设备:
                • cat /proc/mdstat
                • ls /dev | grep "md"
            • component devices:任意块设备
            • 模式/mode:
              • 创建模式:-C
                • options
                  • -n #:使用#个块设备来创建此RAID
                  • -l #:指明要创建的RAID的级别
                  • -a {yes | no}:是否自动创建目标RAID设备的设备文件
                  • -c CHUNK-SIZE:指明块大小
                  • -x #:指明冗余或空闲盘的个数
                • 例如:创建一个10G空间的RAID-5
                  • mdadm -C /dev/md0 -a yes -n 3 -x 1 -l 5 /dev/sda{7,8,9,10}
                  • 创建完以后,格式化:mke2fs -t ext4 /dev/md0
                  • 格式化完以后,挂载:mount /dev/md0 /mydata
                  • 往/mydata里写文件,就会按照RAID的模式工作了
              • 装配模式:-A
              • 监控模式:-F
              • 管理模式:-f,-r,-a
                • -f:标记损坏,例如:mdadm /dev/md0 -f /dev/sda7 (此时上面创建的RAID5就会利用空闲盘自动修复了,再坏一块磁盘也是没有问题的,降级使用,即两个磁盘工作,没有校验盘了)
                • -r:移除坏的磁盘,例如:mdadm /dev/md0 -r /dev/sda7
                • -a:添加一个磁盘,例如:mdadm /dev/md0 -a /dev/sda7
              • 查看详细信息:-D,例如:mdadm -D /dev/md0 
              • 停止md设备:-S,例如:mdadm -S /dev/md0
              • 补充:watch -n# COMMAND:每隔#秒刷新一下命令结果,例如:watch -n1 'ifconfig etho',再例如:watch -n1 'cat /proc/mdstat'

    练习1:创建一个可用空间为10G的RAID1设备,要求其chunk大小为128k(默认为512k),文件系统为ext4,有一个空闲盘,开机可自动挂载至/backup目录

    练习2:创建一个可用空间为10G的RAID10设备,要求其chunk大小为256k(默认为512k),文件系统为ext4,开机可自动挂载至/mydata目录

    注:RAID不能代替备份策略,RAID可以保证磁盘损坏后不影响系统运行,但是无法阻止人为错误引起的数据丢失,比如不小心删除,所以备份数据依然是要有的

  • 相关阅读:
    SpringBoot分布式篇Ⅷ --- 整合SpringCloud
    SpringBoot分布式篇Ⅶ --- 整合Dubbo
    java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null"
    小学数学题
    GoLang GRPC使用
    GoLang Socket 聊天实例
    golang Redis运用
    go mod 运用
    Golang Socket编程小实例
    GoLang协程和管道
  • 原文地址:https://www.cnblogs.com/jacky1982/p/7758421.html
Copyright © 2020-2023  润新知