Linux运维---磁盘存储-2. RAID
随着单块磁盘在数据安全、性能、容量上呈现出的局限,磁盘阵列(Redundant Arrays of Inexpensive/Independent Disks,RAID)出现了,RAID把多块独立的磁盘按不同的方式组合起来,形成一个磁盘组,以获得比单块磁盘更高的数据安全、性能、容量。
一. 常见的RAID 级别
RAID有RAID0~RAID7几种级别,另外还有一些复合的RAID模式,比如:RAID10、RAID01、RAID50、RAID53。
常用的RAID模式有RAID0、RAID1、RAID5、RAID10。
- RAID0
RAID0也就是常说的数据条带化(Data Stripping),数据被分散存放在阵列中的各个物理磁盘上,需要2块及以上的硬盘,成本低,性能和容量随硬盘数递增,在所有的RAID级别中,RAID 0的速度是最快的,但是RAID 0没有提供冗余或错误修复能力,如果一个磁盘(物理)损坏,则所有的数据都无法使用。
对于有容灾模式的RAID阵列,某块磁盘损坏时,只要换上新的硬盘即可,阵列系统会自动同步数据到新的硬盘。(不支持热插拔的话,需要先关机再开机)
- RAID1
RAID1也就是常说的数据镜像(Data Mirroring),2块及以上的硬盘(偶数个),被分为2组,数据在每组磁盘中各有一份,若其中一组有磁盘损坏,另一组可以保证数据访问不会中断。RAID1同RAID0一样,有很好的读取速度,但是写的速度,有所下降。
- RAID5
RAID 5 是一种数据安全、性能、容量、成本、可行性都相对兼顾的解决方案,正因此,类似的RAID2、RAID3、RAID4、RAID6很少得以实际应用。 RAID5需要3块及以上的硬盘, 它不是对存储的数据直接进行备份,而是把数据和相对应的奇偶校验信息存储到组成阵列的各个磁盘上,简单来说就是:任意坏掉一块盘时,另外的N-1块盘可以利用奇偶校验信息,把这块坏掉的磁盘上的数据恢复出来。 RAID 5可以理解为是RAID 0和RAID 1的折衷方案,有和RAID 0相近似的数据读取速度,有比RAID1低的容灾能力(RAID5只允许一块磁盘损坏),因为多了奇偶校验信息,写入数据的速度比RAID1慢。
- RAID10
RAID10,名称上便可以看出是RAID0与RAID1的结合体,显然需要至少4块磁盘。不过,先RAID0后RAID1,还是先RAID1后RAID0,是不一样的。
RAID01,是先做RAID0,然后对2组RAID0再做RAID1,假设此时某个RAID0坏掉一块磁盘,这个RAID0随即不可用,所有的IO全部指向剩下的那个RAID0;
RAID10,是先做RAID1,然后对2组RAID1再做RAID0,假设此时某个RAID1坏掉一块磁盘,当前RAID1仍然能提供服务,并且另一个RAID1也同时可以坏掉一块磁盘。
所以,我们通常选择RAID10,而不是RAID01。
- 不同RAID级别的读写性能
假设都用4块磁盘,RAID0,RAID1,RAID5,RAID10在多线程/多CPU情况下,都可以同时读取多块磁盘,读的性能都很不错; 写的性能(IOPS)依次递减,大致是:RAID0 > RAID10 > RAID1 > RAID5。 二. RAID的空间计算
在做RAID时,通常选择统一规格的磁盘,如果真的有不同空间大小、不同读写速度的磁盘,阵列系统会以空间小、速度低的为标准,空间大、速度高的磁盘向下兼容。比如:100G,50G的2块磁盘做RAID0,得到的空间为50G*2 = 100G。
RAID的空间计算公式: RAID0的空间:Disk Size * N RAID1的空间:(Disk Size * N)/2 RAID5的空间:((N-1)/N) * (Disk Size * N) = (N-1) * Disk Size RAID10的空间:(Disk Size * N/2)/2 + (Disk Size * N/2)/2 = (Disk Size * N)/2
假设都用4块磁盘,每块磁盘都为100G RAID0的空间:100G * 4 = 400G RAID1的空间:(100G * 4)/2 = 200G RAID5的空间:(4-1) * 100G = 300G RAID10的空间: (100G * 4)/2 = 200G 三. RAID的IOPS计算
- 单块硬盘的IOPS是固定的 关于单块磁盘IOPS的计算,中有详细的方法,但通常这个值是相对固定的,不需要重复计算,参考如下:
可以发现,同样转数,不同型号的单块磁盘,IOPS都维持在一个类似的数量级。
- RAID的IOPS计算 有了单块磁盘的IOPS,那么多块磁盘的IOPS计算就很简单了,比如,对于RAID0或者单纯串联磁盘(JBOD: just a bunch of disks)的存储来说,10块175 IOPS的磁盘的总IOPS就是10*175 = 1750 IOPS。 但是对于其他RAID级别并不是这样,因为RAID有多次写IO的开销存在,简单来说就是:对RAID发起一次写IO,RAID内部会有不止一次的写IO发生,RAID内部的IO开销如下:
从图中得到公式:用户读IO+N*用户写IO = 总IOPS (N就是RAID内部的IO开销次数)
假设用户读写请求各一半(50%),同样还是以10块175 IOPS的磁盘为例: 50% * 用户总IO请求数 + N * (50% * 用户总IO请求数) = 175 IOPS * 10
以RAID1为例,那么N = 2,上式变为:1.5 *用户总IO请求数 = 1750 IOPS 用户总IO请求数 = 1167 IOPS 这就是10块175 IOPS的磁盘做了RAID1,所能提供的IOPS。
可参考写惩罚(write penalty)
- RAID的IOPS计算在现实中的应用 在实际使用中,我们通常不是计算现有RAID的IOPS,而是反过来:选择好磁盘规格,RAID模式,测试出系统的读写比例,系统需要达到的IOPS,然后看看,需要多少块硬盘来完成阵列,才能达到这样的IOPS需求?
假设:选择了175 IOPS的磁盘,做RAID1,系统读写比例为60%:40%,系统需要达到2000 IOPS 问:要配置多少块这样规格的硬盘?
把上面的公式改为通用公式: reads * WorkloadIOPS + writesimpact * (writes * Workload_IOPS) = 175 * M 60% * 2000 + 2 * (40% * 2000) = 175 * M M = 16 (也就是说,要达到指定的2000 IOPS,RAID1需要配置16块175 IOPS的磁盘)
可能有人会觉得,系统的读写请求比例,系统需要达到多少IOPS,并不知道,如果没有前期测试的话,那么只能根据经验来估测了。 四. RAID在数据库存储上的应用
以SQL Server数据库为例,看下不同的RAID级别适用于什么场景: RAID0,由于没有容灾机制,很少被单独使用。
RAID1,操作系统、SQL Server实例、日志文件; RAID5,数据文件,备份文件; RAID10,所有类型都适用,不过考虑成本,通常不会全部使用RAID10。 五、使用mdadm创建RAID 创建RAID阵列
我们可以通过 mdadm 命令来创建软件RAID,比如下面命令可以创建一个RAID5
sudo mdadm --create /dev/md0 -a yes -l 5 -n 3 /dev/sdb /dev/sdc /dev/sdd -x 1 /dev/sde
其中
--create /dev/md0 创建一个新RAID,名字叫做 /dev/md0 -a yes 自动在/dev/下创建对应的RAID阵列设备 -l 5 指定RAID级别为5 -n 3 指定硬盘数量。表示用三块硬盘来创建RAID5,分别为 /dev/sdb, /dev/sdc, /dev/sdd
我们会发现 /dev 下出现了一个名为 md0 的设备
ls -l /dev/md0
brw-rw----. 1 root disk 9, 0 Sep 11 09:40 /dev/md0
自动启用RAID
在创建好RAID以后,可以将RAID信息保存到 /etc/mdadm.conf 文件中,这样在下次操作系统重新启动时,系统会自动加载这个文件来启用RAID
sudo mdadm -D --scan >/etc/mdadm.conf
cat /etc/mdadm.conf
ARRAY /dev/md0 metadata=1.2 name=MiWiFi-R3-srv:0 UUID=ece6c656:c9999ff6:9d17c0ec:08a0e3af
查看RAID阵列信息
创建好RAID阵列后,我们可以通过 mdadm --misc 模式来查看刚创建好的RAID的详细信息
mdadm --misc --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Tue Sep 11 09:40:45 2018
Raid Level : raid5
Array Size : 16758784 (15.98 GiB 17.16 GB)
Used Dev Size : 8379392 (7.99 GiB 8.58 GB)
Raid Devices : 3
Total Devices : 3
Persistence : Superblock is persistent
Update Time : Tue Sep 11 10:03:35 2018
State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Name : MiWiFi-R3-srv:0 (local to host MiWiFi-R3-srv)
UUID : ece6c656:c9999ff6:9d17c0ec:08a0e3af
Events : 18
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
3 8 48 2 active sync /dev/sdd
或者我们也可以通过 /proc/mdstat 文件来查看RAID的简洁信息
cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdd[3] sdc[1] sdb[0]
16758784 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
unused devices: <none>
使用RAID阵列
在创建好RAID阵列后,我们就不能直接操作组成阵列的磁盘了,否则会损坏刚创建好的RAID阵列。 我们通过 /dev/md0 这个设备来进行文件格式化和挂载
set -x
exec 2>&1
mkfs.xfs -f /dev/md0
mount /dev/md0 /mnt
mount |grep md0
+ mkfs.xfs -f /dev/md0
meta-data=/dev/md0 isize=512 agcount=16, agsize=261760 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=4188160, imaxpct=25
= sunit=128 swidth=256 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
+ mount /dev/md0 /mnt
+ mount
+ grep md0
/dev/md0 on /mnt type xfs (rw,relatime,seclabel,attr2,inode64,sunit=1024,swidth=2048,noquota)
关闭RAID
我们可以通过 mdadm --misc 模式来关闭RAID。这会释放所有资源
在关闭RAID之前需要先卸载RAID:
sudo umount /mnt
然后关闭RAID
sudo mdadm --misc --stop /dev/md0
关闭RAID后,我们可以通过 mdadm --misc --zero-superblock 来清空磁盘中RAID阵列的超级块信息。 清空就能够正常使用这些磁盘了
mdadm --misc --zero-superblock /dev/sdb
mdadm --misc --zero-superblock /dev/sdc
mdadm --misc --zero-superblock /dev/sdd
模拟RAID故障
我们可以通过 mdadm --manage /dev/md0 --fail 来将某块磁盘设置成故障状态
sudo mdadm /dev/md0 -f /dev/sdd 2>&1
mdadm: set /dev/sdd faulty in /dev/md0
然后我们再来查一下这个RAID的信息
sudo mdadm --misc --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Tue Sep 11 10:32:21 2018
Raid Level : raid5
Array Size : 16758784 (15.98 GiB 17.16 GB)
Used Dev Size : 8379392 (7.99 GiB 8.58 GB)
Raid Devices : 3
Total Devices : 3
Persistence : Superblock is persistent
Update Time : Tue Sep 11 10:35:12 2018
State : clean, degraded
Active Devices : 2
Working Devices : 2
Failed Devices : 1
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Name : MiWiFi-R3-srv:0 (local to host MiWiFi-R3-srv)
UUID : c031d0c9:998a4e86:5cf90e71:52b229cd
Events : 20
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
- 0 0 2 removed
3 8 48 - faulty /dev/sdd
你会发现 /dev/sdd 的状态现在变成了 faulty, 但是RAID5这个级别是允许一块磁盘损坏而不造成数据损坏的。 移除RAID阵列中的磁盘
sudo mdadm --manage /dev/md0 --remove /dev/sdd
更换新磁盘
set -x
exec 2>&1
sudo mdadm --manage /dev/md0 --add /dev/sdd
sudo mdadm --misc --detail /dev/md0
+ sudo mdadm --manage /dev/md0 --add /dev/sdd
mdadm: added /dev/sdd
+ sudo mdadm --misc --detail /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Tue Sep 11 10:32:21 2018
Raid Level : raid5
Array Size : 16758784 (15.98 GiB 17.16 GB)
Used Dev Size : 8379392 (7.99 GiB 8.58 GB)
Raid Devices : 3
Total Devices : 3
Persistence : Superblock is persistent
Update Time : Tue Sep 11 10:40:41 2018
State : clean, degraded
Active Devices : 2
Working Devices : 3
Failed Devices : 0
Spare Devices : 1
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Name : MiWiFi-R3-srv:0 (local to host MiWiFi-R3-srv)
UUID : c031d0c9:998a4e86:5cf90e71:52b229cd
Events : 22
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
- 0 0 2 removed
3 8 48 - spare /dev/sdd
Linux运维---磁盘存储-2. RAID的更多相关文章
- Linux运维-磁盘存储---3.LVM
LVM的工作原理 LVM( Logical Volume Manager)逻辑卷管理,是在磁盘分区和文件系统之间添加的一个逻辑层,来为文件系统屏蔽下层磁盘分区布局,提供一个抽象的盘卷,在盘卷上建立文件 ...
- 高级Linux运维工程师必备技能(扫盲篇)
高级Linux运维工程师必备技能(扫盲篇) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在了解文件系统之前,我们要学习一下磁盘存储数据的方式,大家都知道文件从内存若要持久化存储的 ...
- linux运维基础知识
linux运维基础知识大全 一,序言 每一个微不足道的知识,也是未来的铺垫.每一份工作的薪资职位,也是曾经努力的结果. 二,服务器 1,运维人员工作职责: 1)保证数据不丢失:2)保证服务器24小时运 ...
- 做linux运维工程师,必须要掌握以下几个工具
linux系统如果是学习可以选用redhat或centos,特别是centos在企业中用得最多,当然还会有其它版本的,但学习者还是以这2个版本学习就行,因为这两个版本都是兄弟,没区别的,有空可以再研究 ...
- Linux运维入门到高级全套常用要点
Linux运维入门到高级全套常用要点 目 录 1. Linux 入门篇................................................................. ...
- 要做linux运维工程师的朋友,必须要掌握以下几个工具才行 ...
要做linux运维工程师的朋友,必须要掌握以下几个工具才行 ... [复制链接] 发表于 2013-12-13 15:59 | 来自 51CTO网页 [只看他] 楼主 本人 ...
- Linux运维之道(大量经典案例、问题分析,运维案头书,红帽推荐)
Linux运维之道(大量经典案例.问题分析,运维案头书,红帽推荐) 丁明一 编 ISBN 978-7-121-21877-4 2014年1月出版 定价:69.00元 448页 16开 编辑推荐 1 ...
- Linux运维工程师入门的10大实用工具
说到工具,在行外可以说是技能,在行内我们一般称为工具,就是运维必须要掌握的工具. 我就大概列出这几方面,这样入门就基本没问题了. 工具如下: 1.Linux系统基础 这个不用说了,是基础中的基础,连这 ...
- Linux运维工程师入门须掌握的10个技术点
本人是linux运维工程师,对这方面有点心得,现在我说说要掌握哪方面的工具吧 说到工具,在行外可以说是技能,在行内我们一般称为工具,就是运维必须要掌握的工具. 我就大概列出这几方面,这样入门就基本没问 ...
随机推荐
- Trailhead Lightning 学习 一
计划学习一下莱特宁,从最基本的开始学习,脚踏实地.不忘初心,牢记使命,以下是查阅的资料. 简介 在此Salesforce教程中,将阐述Salesforce Lightning的基础知识,并了解Sale ...
- Redis系列-存储hash主要操作命令
Redis系列-存储篇hash主要操作函数小结 hash是一些列key value(field value)的映射表.常常用其存储一些对象实例.相对于把一个对象的各个字段存储为string,存储为ha ...
- 机器学习环境配置系列四之theano
决定撰写机器学习环境配置的主要原因就是因为theano的配置问题,为了能够用上gpu和cudnn加速,我是费劲了力气,因为theano1.0.0在配置方面出现了重大改变,而网上绝大多数都很老,无法解决 ...
- 深入理解Java虚拟机:JVM高级特性与最佳实践
第一部分走近Java第1章走近Java21.1概述21.2Java技术体系31.3Java发展史51.4Java虚拟机发展史91.4.1SunClassicExactVM91.4.2SunHotSpo ...
- NOI4.6 1455:An Easy Problem
描述 As we known, data stored in the computers is in binary form. The problem we discuss now is about ...
- TCP/IP、TCP、UDP、Socket知识汇总
带你了解TCP/IP,UDP,Socket之间关系 https://blog.csdn.net/chaoshenzhaoxichao/article/details/79785318 主要知识点: T ...
- CSS-01-引入css的三种方法
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Java 数据持久化系列之池化技术
在上一篇文章<Java 数据持久化系列之JDBC>中,我们了解到使用 JDBC 创建 Connection 可以执行对应的SQL,但是创建 Connection 会消耗很多资源,所以 Ja ...
- Python3实现发送邮件和发送短信验证码
Python3实现发送邮件和发送短信验证码 Python3实现发送邮件: import smtplib from email.mime.text import MIMEText from email. ...
- 《即时消息技术剖析与实战》学习笔记10——IM系统如何应对高并发
一.IM 系统的高并发场景 IM 系统中,高并发多见于直播互动场景.比如直播间,在直播过程中,观众会给主播打赏.送礼.发送弹幕等,尤其是明星直播间,几十万.上百万人的规模一点也不稀奇.近期随着武汉新型 ...