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