好文档 - 专业文书写作范文服务资料分享网站

存储是系统最底层 

天下 分享 时间: 加入收藏 我要投稿 点赞

存储是系统的最底层,非常重要,如何选择最合适自己存储呢? 梳理下知识点,以备后用

1. 存储应用的场景,了解自己的应用需求、预算及数据使用特点 2. 了解存储的相关知识 3. 选择存储应注意的要素 4. 存储的使用和维护

1. 存储应用的场景,了解自己的应用需求、预算及数据使用特点

要清楚存储是应用在OLAP还是OLTP?对存储的性能,安全性要求如何?预算是多少?预计未来2-5年的业务增长趋势?

中端存储可以提供高响应速度,在磁盘数量相同的条件下,不会比高端存储差多远(但高端存储的扩展能力,可靠性非常强)

2. 了解存储的相关知识

磁盘:

一个IO的访问,大致分为三个步骤,第一是磁头到指定的磁道(寻道),第二是等待需要读取的数据随盘片旋转到磁头(延迟),第三是读取数据。相比较前两个时间,读取数据的时间可以忽略不计,所以一个IO的响应时间等于寻道时间+延迟时间决定(ssd固态硬盘除外,它的存储方式不一样),寻道时间由于是机械的动作,所以很难得到大幅度提高,但是可以通过提高磁盘转速来提高延迟时间。所以转速越高的盘,可以承载更多的IOPS。磁盘的IOPS由磁盘的转速决定,比如15000RPM的磁盘,一般可以承受150个IOPS。

和存储相关的三个性能参数:IOPS,吞吐量,响应时间 吞吐量:

吞吐量,则由磁盘的转速和接口决定,转速决定了内部传输率,接口则决定了外部传输率,很明显前者肯定低于后者。常见的接口有ATA,SCCI,SATA,SAS,FC等等。FC接口一般在高端存储中比较常见,而SAS和SATA多在服务器或者中低端存储中常见。

影响吞吐量的因素稍微复杂些,由磁盘的数量和存储的架构决定,当磁盘到达一定的数量后,吞吐量主要受限于存储的架构。比如某高端存储,吞吐量最大就是 1.4GB,这是由它内部的架构所决定的。另外还要注意存储与主机的接口,比如HBA卡,有4Gb和2Gb(这里是bit,而不是Byte),一般主机和存储都配有多块HBA卡

IOPS:

对于一个存储系统来说,IOPS主要决定于cache的算法,以及磁盘的数量。有时候我们往往会被厂商的数据给忽悠了,第一是cache命中率,厂商利用了某种手段,让cache命中率非常高,IOPS几乎可以随心所欲。另外一个因素就是磁盘的数量,厂家的数据是同型号1000块磁盘的测试结果,而实际的系统只有几十或者几百块磁盘。

购买存储时,应该避免买高端的存储,而只配数量很少的磁盘,厂商非常喜欢你买一个高端的BOX,告诉你扩展性好,现在用不着可以少买点盘,以后可以扩容等等,这完全是忽悠。建议不要超前消费,如果确实对性能追求很高,可以选用容量小一些的磁盘,而磁盘的数量多一些。磁盘的数量可以计算得出,我们的经验,一般OLTP应用的cache命中率在20%左右,剩下的IO还是要到磁盘上的,根据磁盘的转速和类型,就可以知道一块盘能够承载的IOPS,磁盘数量就可以估算出来了,为了得到比较好的响应时间,建议每块磁盘的IOPS不要超过100。

响应时间:

除了IOPS与吞吐量,存储的另外一个重要性能指标就是单io的响应时间,单io的响应时间与IOPS的当前值,吞吐量大小及cache命中率都有密切的关系,经验值表示,一个io的响应时间在20ms以后,应用基本可以正常工作,但对于高可用的核心OLTP系统,最佳的IO时间是小10ms。

Stripe:

Stripe的作用就是尽可能的分散IO,它在有些存储上是可以调节的,但是很多存储是不可以调节的,一般在128K-512K之间。有一个错误的说法是,我在存储上做了stripe,数据库的一个IO,所有的磁盘都会响应这个IO。这个说法是错误的,对于Oracle来说,一个随机IO的大小是8K,一般条带的大小要比8K大得多,所以Oracle一个随机IO永远只会落在一块磁盘上。一块磁盘在同一个时刻只能响应一个IO,也就是说磁盘没有并发IO的概念,但是从整个系统来看,不同的磁盘响应不同的IO,宏观上IO还是分散的,所以我们看到一个数据库在运行时,所有的磁盘都在忙,实际上每块磁盘是为不同的 IO服务。对于顺序IO,Oracle的默认设置是128K,最大值由OS决定,一般是1M,如果顺序IO的大小大于stripe,那么一个IO可能会有几块盘同时响应,但是很多存储的stripe都大于128K,这时一个IO还是只有一块磁盘响应,由于读是一个顺序的过程(在不同的multiblock read之间,存在一定程度的并行。Oracle每次同时向OS发送若干个multiblock read IO请求,然后把返回的结果合并排序。整个scattered read应该是局部并行,宏观串行的过程),所以要在数据库这个级别加上并发,才可以真正达到提高吞吐量的目的。

有人要问,stripe到底多大合适?假设把stripe做得很小,这样不是很好吗?一个IO同时可以读很多块盘,大大提高了吞吐量。我们假设stripe为1K,Oracle一个IO要分布在8块不同的磁盘上,但是这时新的问题就出现了,因为一块磁盘是不具备并发IO能力的,如果每个IO都占用很多块盘,这样整个系统的并发IO能力就下降了,而且一个8K的IO如果在一块盘上读,和从8块盘上并行读,不会有很大的差别(也许在一块盘上读还要更快),所以stripe不能做的很小。stripe到底设多大,我的观点是大比小好,不要小于256K,数据仓库应用可以设置的更大一些。ASM对于数据文件的stripe默认是1M,不要设置太小,经验表明,1M的性能更好,Oracle也推荐用1M。这说明对于数据库应用来说,stripe size要稍微大一点,而不是我们想的越细或者越分散越好。

Raid:

RAID一般比较常见的就是RAID10和RAID5,对性能要求比较高的数据库应用一般都采用RAID10,RAID5也可以用,但是别把redo放在 RAID5上,因为RAID5的对于redo这种小IO,性能非常差,很容易造成log file sync的等待。一个RAID group中的磁盘数量不宜过多,不要超过10块,原因是RAID group中磁盘数量越多,坏盘的概率就越大(概率问题)。一些高端存储对于RAID group中的磁盘数量都是固定的,这主要和存储的架构有关。使用存储的过程中,你会发现,越是高端的东西,就越是死板,而中低端存储则非常灵活,并不是说高端存储不好,而是说架构决定一切。

存储划分

划分好的LUN输出到主机后,我们怎么用?这个就比较灵活多变,首先要看我们的用途,我们是追求IOPS还是吞吐量?我们用file system,raw devices,ASM?存储输出的LUN跨在多少块盘上?一般的存储没有虚拟化功能,则输出的LUN只跨在一个RAID group上,这时往往需要利用OS上的LVM来再次划分一次,比如有两个raid group,每个RAID goup有四块磁盘,建立两个LUN,输出到主机后,然后分别创建两个VG,再创建LV(stripe),这下每个LV就完全跨在了所有的磁盘上。实际中考虑的问题要更多,有时候不仅仅要考虑磁盘,还要考虑将负载分配在不同的控制器,前端卡后端卡和多路径的问题,相当复杂。有些存储本身有虚拟化的功能,甚至可以输出一个LUN,比如3PAR就可以输出一个虚拟卷,这个卷已经跨在所有的磁盘上,我们直接使用就可以了(但实际工作中这么使用的比较少见)。

Oracle 有了ASM,问题就更加复杂了,我的建议是如果可以的话,存储只做RAID1,stripe交给ASM去做。如果有些存储必须要做stripe,也没问题。存储划分是一个很有技术含量的工作,必须建立在对存储,主机和数据库深入了解的基础上,才有可能做出一个好的规划。

3. 选择存储应注意的要素

1.选择32位或64位的RISC CPU还是普通的Intel 586 CPU?

服务器的结构已由传统的I/O结构改为I2O结构,其目的就是为了减少服务器中CPU的负担,将系统的I/O与服务器CPU负载分开。 I2O是由一 颗RISC CPU来负责I/O的工作。服务器上都已用RISC CPU,磁盘阵列上当然也必须用RISC CPU才不会形成瓶颈。另外,

我们现在常用的网络操作系统大都是32位或64位的,当操作 系统已由32位转到64位时,磁盘阵列上的CPU必须是RISC CPU才能满足要求。

2.磁盘阵列内的硬盘是否有顺序要求?

也就是说,硬盘是否可以不按原先的次序插回阵列中, 而数据仍能正常存取?很多人都想当然地认为根本不应该有顺序要求,其实不然。我们曾用过一个阵列,其必须按照原来的次序才能正常存取数据。现在假设这样一种情况,我们准备 清理一下硬盘阵列,把所有硬盘都放在一起,结果记不住顺序了,为了正常存取数据,我们 只有一个个地试,而对于有8块硬盘的阵列来说,最坏的情况要试88次才行。现在已出现 了磁盘阵列产品具有不要求硬盘顺序的功能,为了防止上述事件发生,应选择对顺序没有要 求的阵列。

3.是硬件磁盘阵列还是软件磁盘阵列?

软件磁盘阵列指的是用一块SCSI卡与磁盘连接,硬件磁盘阵列指的是阵列柜中具有背板的阵列,它与软件磁盘阵列的区别很大。硬件磁盘阵列是一个完整的磁盘阵列系统与系统相接,内置CPU,与主机并行动作,所有的I/O都在磁盘阵列中完成,减轻主机的负担,增加系统整体性能,有SCSI总线主控与DMA通道,以加速数据的存取与传输。而软件磁盘阵列是一个程序,在主机上执行,通过一块SCSI卡与磁盘相接形成阵列,其最大的缺点是大大增加了主机的负担,对于大量输入输出的系统,很容易使系统瘫痪。显然,应尽量选择硬件磁盘阵列。

4.是IDE磁盘阵列还是SCSI磁盘阵列?

最近市场上出现了IDE磁盘阵列,它们的速度挺快,如增强型IDE在PCI总线下的传输速率可达66MB/s,价格与SCSI磁盘阵列相比要便宜得多; 而SCSI Ultra3速率接近160MB/s。但从实际应用情况来看,在单任务时,IDE磁盘阵列比 SCSI磁盘阵列快;在多任务时,SCSI磁盘阵列比IDE磁盘阵列要快得多。但IDE磁盘阵列 有一个致命的缺点:不能带电热插拔。这个缺点使IDE磁盘阵列命中注定只能使用于非重要 场合。如果您的应用不能停机,则一定要选择SCSI磁盘阵列。

存储是系统最底层 

存储是系统的最底层,非常重要,如何选择最合适自己存储呢?梳理下知识点,以备后用1.存储应用的场景,了解自己的应用需求、预算及数据使用特点2.了解存储的相关知识3.选择存储应注意的要素4.存储的使用和维护1.存储应用的场景,了解自己的应用需求、预算及数据使用特点要清楚存储是应用在OLAP还是OLTP?对存储的性能
推荐度:
点击下载文档文档为doc格式
66dku5o1ew5o77k30e8m0fvqu4yw2700pgv
领取福利

微信扫码领取福利

微信扫码分享