zoukankan      html  css  js  c++  java
  • raid

    硬盘--分区---格式化---挂载使用
    硬件存储--》硬raid--》通过iscsi或光纤网络共享给服务器(SAN)(可选)--》分区(lvm可选)--》格式化--》mount使用
    raid redundant arrays of inexpensive disks
    简单来说,raid就是把多个磁盘组成一个磁盘组(为了提高IO性能和数据高可用)
    硬raid  生产环境用这个,使用raid卡来做的磁盘阵列
    软raid  使用软件做的磁盘阵列,实际应用没什么价值,这里用于教学说明原理
    raid级别
    常见的raid5,raid10
    raid 0 读写性能佳,坏了其中一块,数据挂掉,可靠性低(stripe条带化),磁盘利用率100%
    A B
    1234
    1 2
    3 4
    raid 1 镜像备份(mirror),同一份数据完整的保存在多个磁盘上,写的性能不佳,可靠性高,读的性能还行,磁盘利用率50%
    A B
    1234
    1 1
    2 2
    3 3
    4 4
    raid 10 先做raid 1 再做raid 0
      12
    1 disk A disk B raid 1
    1 1
    2 disk C disk D raid 1
    2 2
    raid 5
    由多块磁盘做raid 5,磁盘利用率为n-1/n, 其中一块放校验数据,允许坏一块盘,数据可以利用校验值来恢复
    disk 1 disk 2 disk 3
    数据 数据 校验
    检验 数据 数据
    数据 检验 数据
    1+2=3
    raid5 raid10
    3d+1d 2d+2d
    1,成本
    3/4 1/2
    2,安全性
    坏掉一块的情况,raid5就不能再坏了
    raid10只有当和坏掉的那块同为raid1组里的时候,才会整个坏掉,概率1/3
    3,性能
    raid 5 对大文件读写好点 olap(联机分析处理)
    raid 10对小文件读写好点 oltp(联机事务处理)
    ----------------------------------------------------------------------------------------------------------------
    使用vmware或者kvm直接在线加9个1G大小的硬盘
    linear 线型
    stripe 条带
    mirror 镜像
    mdadm - manage MD devices aka Linux Software
    RAID
    创建raid 0
    # mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sdb /dev/sdc
    mdadm: array /dev/md0 started.
    创建过程中可以用另一终端cat /proc/mdstat 去查看正在创建的状态信息
    # mkfs.ext4 /dev/md0
    # mount /dev/md0 /mnt/
    # df -h |grep mnt
    /dev/md0 2.0G 36M 1.9G 2% /mnt
    # cat /proc/mdstat
    Personalities : [raid0]
    md0 : active raid0 sdc[1] sdb[0]
    2097024 blocks 64k chunks
    unused devices: <none>
    创建raid 1
    # mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sdd /dev/sde
    mdadm: array /dev/md1 started.
    # mkfs.ext4 /dev/md1
    # mount /dev/md1 /media/
    # df -h |grep md
    /dev/md0 2.0G 36M 1.9G 2% /mnt
    /dev/md1 1008M 18M 940M 2% /media
    创建raid5
    # mdadm --create /dev/md5 --level=5 --raid-devices=4 /dev/sdf /dev/sdg /dev/sdh /dev/sdi
    mdadm: array /dev/md5 started.
    # watch cat /proc/mdstat --这里监控一下它们盘之间的数据同步;等它们同步完毕再进行下面的格式化
    # mkfs.ext4 /dev/md5
    # mount /dev/md5 /misc/
    # df -h |grep md
    /dev/md0 2.0G 36M 1.9G 2% /mnt --raid 0利用率为100%
    /dev/md1 1008M 18M 940M 2% /media --raid 1利用率为50%
    /dev/md5 3.0G 69M 2.8G 3% /misc --raid 5利用率为n-1/n,在这里就是3/4
    --验证raid0
    在做raid0的两个盘上查看io情况
    例:
    终端1:iostat 2 两秒一次查看所有的盘上的IO情况
    终端2: dd if=/dev/zero of=/mnt/aaa bs=1M count=1000
    可以看到两个盘上都有写的io,并且/dev/sdb和/dev/sdc的IO一样,总和才等于/dev/md0的IO;验证了raid0的功能(条带)
    --验证raid1
    在做raid1的两个盘上查看io情况
    例:
    终端1:iostat 2 两秒一次查看所有的盘上的IO情况
    终端2: dd if=/dev/zero of=/media/aaa bs=1M count=1000
    可以看到两个盘上都有写的io,并且/dev/sdd和/dev/sde的IO一样,并且也等于/dev/md1的IO;验证了raid1的功能(镜像)
    --验证raid5
    在做raid5的四个盘上查看io情况
    例:
    终端1:iostat 2 两秒一次查看所有的盘上的IO情况
    终端2: dd if=/dev/zero of=/misc/aaa bs=1M count=1000
    可以看到四个盘上都有写的io,并且/dev/sdf,/dev/sdg,/dev/sdh,/dev/sdi四个盘的IO总和为/dev/md5的IO的4/3;验证了raid5的功能(n-1/n)
    实际速度比较应该为:raid0>raid5>raid1或不做raid
    --------------------------------------------------------------------------------------------------------------------------------
    --raid的启停
    # vim /etc/mdadm.conf --手动编写raid的配置文件,此文件不存在,要手动建立,并写上
    DEVICES /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/
    sdg /dev/sdh /dev/sdi --把做了raid的分区写上来。或者写成DEVICES /dev/sd[bcdefghi]。但不能写成DEVICES /dev/sd{b,c,d,e,f,g,h,i}
    # mdadm --detail --scan >> /etc/mdadm.conf
    --扫描当前raid的信息,并追加到配置文件里
    # cat /etc/mdadm.conf
    DEVICES /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg /dev/sdh /dev/sdi
    ARRAY /dev/md0 level=raid0 num-devices=2 metadata=0.90 UUID=84209045:9c03c4cb:7f755b8d:cc471294
    ARRAY /dev/md1 level=raid1 num-devices=2 metadata=0.90 UUID=4e62fdc1:6c2a652f:fb72c05d:356d5c76
    ARRAY /dev/md5 level=raid5 num-devices=4 metadata=0.90 UUID=c3c1f37b:9fba8a89:a711dc6c:01a5ddb3
    --如果你不做上面这步,重启系统,raid会不能自动被认到(在rhel6里测试为重启后名字会变)。所以做完的raid都需要扫描并存放信息
    停止raid设备
    先umount 已经挂载的raid设备
    # umount /mnt/
    # umount /media/
    # umount /misc/
    然后使用命令停止
    # mdadm --stop /dev/md0
    mdadm: stopped /dev/md0
    # mdadm --stop /dev/md1
    mdadm: stopped /dev/md1
    # mdadm --stop /dev/md5
    mdadm: stopped /dev/md5
    启动raid设备
    1,有/etc/mdadm.conf配置文件的情况下
    # mdadm -A /dev/md0
    mdadm: /dev/md0 has been started with 2 drives.
    # mdadm -A /dev/md1
    mdadm: /dev/md1 has been started with 2 drives.
    # mdadm -A /dev/md5
    mdadm: /dev/md5 has been started with 4 drives.
    # cat /proc/mdstat --再查看,就有信息了,并且raid里的数据还在
    2,没有配置文件的情况下,手动把设备名写上就可以了
    # mdadm -A /dev/md0 /dev/sd{b,c}
    mdadm: /dev/md0 has been started with 2 drives.
    # mdadm -A /dev/md1 /dev/sd{d,e}
    mdadm: /dev/md1 has been started with 2 drives.
    # mdadm -A /dev/md5 /dev/sd{f,g,h,i}
    mdadm: /dev/md5 has been started with 4 drives.
    3,如果连设备名都不知道,可以去查看每个设备的raid信息,使用uuid把raid设备重新组合
    # mdadm -E /dev/sdf
    /dev/sdf:
    Magic : a92b4efc
    Version : 0.90.00
    UUID : b091e16b:f8df9671:465755db:c640595b --UUID,同一个raid里每个磁盘查看的都是这个值
    Creation Time : Sat May 7 11:23:52 2011
    Raid Level : raid5
    Used Dev Size : 1048512 (1024.11 MiB 1073.68 MB)
    Array Size : 3145536 (3.00 GiB 3.22 GB)
    Raid Devices : 4
    Total Devices : 4
    Preferred Minor : 5
    Update Time : Sat May 7 11:42:09 2011
    State : clean
    Active Devices : 4
    Working Devices : 4
    Failed Devices : 0
    Spare Devices : 0
    Checksum : facef367 - correct
    Events : 2
    Layout : left-symmetric
    Chunk Size : 64K
    Number Major Minor RaidDevice State
    this 0 8 80 0 active sync /dev/sdf
    0 0 8 80 0 active sync /dev/sdf
    1 1 8 96 1 active sync /dev/sdg
    2 2 8 112 2 active sync /dev/sdh
    3 3 8 128 3 active sync /dev/sdi
    [root@raid ~]# mdadm -A --uuid=b091e16b:f8df9671:465755db:c640595b /dev/md5
    mdadm: /dev/md5 has been started with 4 drives.
    --上面组合后的名字可以随意写,甚至是不存在的一个名字,相当于是重新组合
    ------------------------------------------------------------------------------------------------------------------------
    软raid的热插拔实验
    模拟raid中其中一块盘故障
    # mdadm /dev/md5 --fail /dev/sdf
    mdadm: set /dev/sdf faulty in /dev/md5
    --使用--fail对raid中其中一块盘打一个fail标记
    # cat /proc/mdstat
    Personalities : [raid0] [raid1] [raid6] [raid5] [raid4]
    md5 : active raid5 sdf[4](F) sdi[3] sdh[2] sdg[1]--有个F标记
    3145536 blocks level 5, 64k chunk, algorithm 2 [4/3] [_UUU]
    md1 : active raid1 sdd[0] sde[1]
    1048512 blocks [2/2] [UU]
    md0 : active raid0 sdb[0] sdc[1]
    2097024 blocks 64k chunks
    # mdadm /dev/md5 --remove /dev/sdf
    mdadm: hot removed /dev/sdf
    --热移除故障磁盘
    # mdadm /dev/md5 --add /dev/sdj --增加一块新的磁盘上去
    mdadm: re-added /dev/sdj
    --刚增加完后,机器负载较高,因为现在它在对新盘同步数据
    # cat /proc/mdstat
    Personalities : [raid0] [raid1] [raid6] [raid5] [raid4]
    md5 : active raid5 sdj[4] sdi[3] sdh[2] sdg[1]
    3145536 blocks level 5, 64k chunk, algorithm 2 [4/3] [_UUU]
    [=====>...............] recovery = 29.2% (307840/1048512) finish=0.0min speed=153920K/sec --这里可以看到在同步中
    md1 : active raid1 sdd[0] sde[1]
    1048512 blocks [2/2] [UU]
    md0 : active raid0 sdb[0] sdc[1]
    2097024 blocks 64k chunks
    --同步完成后,查看数据还在
    ---------------------
    把raid设备挂载到/mnt目录
    # mysql_install_db --datadir=/mnt --user=mysql
    # mysqld_safe --datadir=/mnt/ --user=mysql &
    然后使用mysql进入,插入一些数据,再进行热插拔实验,在这个过程中都可以进入大批量insert操作,不受影响(只受负载影响,因为同步raid数据时也要占用负载)
    ----------------------------------------------------------------------------------------------------------------------------
    删除raid
    1,umount
    2,
    # mdadm /dev/md5 --fail /dev/sdf --remove /dev/sdf
    mdadm: set /dev/sdf faulty in /dev/md5
    mdadm: hot removed /dev/sdf
    # mdadm /dev/md5 --fail /dev/sdg --remove /dev/sdg
    mdadm: set /dev/sdg faulty in /dev/md5
    mdadm: hot removed /dev/sdg
    # mdadm /dev/md5 --fail /dev/sdh --remove /dev/sdh
    mdadm: set /dev/sdh faulty in /dev/md5
    mdadm: hot removed /dev/sdh
    # mdadm /dev/md5 --fail /dev/sdi --remove /dev/sdi
    mdadm: set /dev/sdi faulty in /dev/md5
    mdadm: hot removed /dev/sdi
    3,
    # mdadm --stop /dev/md5
    mdadm: stopped /dev/md5
    4,
    直接用fdisk删除分区
    或者
    用下面命令擦除superblock
    # mdadm --misc --zero-superblock /dev/sdf
    # mdadm --misc --zero-superblock /dev/sdg
    # mdadm --misc --zero-superblock /dev/sdh
    # mdadm --misc --zero-superblock /dev/sdi
    --把上面的四个盘再做成raid 10
    方法一:
    # mdadm --create /dev/md10 --level=10 --raid-devices=4 /dev/sd[fghi]
    方法二:
    先把两个做成两组raid1
    再把这两组做成raid0
    --做完raid10后把配置文件/etc/mdadm.conf里的raid信息的那几行删除,再重新用下面的命令扫描一下
    mdadm --detail --scan >> /etc/mdadm.conf
  • 相关阅读:
    POJ2686 Traveling by Stagecoach(状压DP+SPFA)
    POJ3250 Bad Hair Day(单调栈)
    POJ3493 Largest Submatrix of All 1’s(单调栈)
    UVA 10160 Servicing Stations(状态压缩+迭代加深)
    POJ 2187 Beauty Contest
    HDU 6017 Girls Love 233(多态继承DP)
    POJ 2932 Coneology(扫描线)
    POJ 1127 Jack Straws (计算几何)
    挑战程序设计竞赛 3.5 借助水流解决问题的网络流
    AOJ 2230 How to Create a Good Game(费用流)
  • 原文地址:https://www.cnblogs.com/skyzy/p/9201449.html
Copyright © 2011-2022 走看看