【IT168 应用】调节RAID(独立磁盘冗余阵列)并不困难,你不需要专业服务也可以进行。
围绕高速缓存和高速缓存使用率有许多参数,一些是明显可以调节的针对RAID LUN(逻辑单元号)的参数。这篇文章不是讲述如何调整特定的RAID控制器,如果是那样,你将需要花点时间来阅读文档,但是通过这篇文章,你可以在整体系统的I/O背景下考虑参数。每家厂商都有自己的命名和概念体系。由于没有标准的定义,我会选择我自己的定义标准,你可以把它套用到一些特定厂商上。在调整RAID的时候你需要考虑的领域是:LUN创建和RAID水平,高速缓存调节和设置。
我们已经有许多文章来讨论如何判断该使用什么样的RAID水平,因此我们这里将讨论如何调整RAID参数。如果你准备通过设置RAID来优化你的系统,无论要设置的是个人电脑上的RAID控制器卡还是高端关键任务型企业级RAID阵列,通过这篇文章,你都可以很好的理解需要考虑哪些事情。
我们一开始先考虑你所拥有的RAID控制器的类型。如今,RAID控制器可以分成三类:
1.企业级主动/主动型:这种类型的控制器允许你从任意主机写入到任意LUN,同时对性能没有影响。这些控制器通常有庞大的镜像后的高速缓存(通常超过32GB),而控制器设计成可以热插拔任意组件。这种控制器的连接目前主要是在光纤通道上,以后很快就会变成FCoE(以太网光纤通道)。
2.中端主动/被动型:这种类型的控制器对每个LUN有两面,一面是主动,也是主存储路径,一面是被动,用于故障复原。你通常可以将LUN在主存储和故障复原之间进行分割,甚至分割你的系统。高速缓存可以在控制器中进行镜像化操作,但是这些控制器不像企业级控制器那样富有弹性。这类控制器的连接方式目前主要是光纤通道,以后很快会变成FCoE。
3. RAID控制器卡:这些是可以插入到PCIe的卡,通过SAS或SATA连接方式连接到驱动器。这些卡没有像中端或企业级控制器那样强大的处理器,而且他们也不支持那么多的驱动器。你不能故障复原到另一个控制器,而且你的系统只能在PCIe插槽和控制器卡上做文章。
许多RAID厂商只考虑他们自己的设备和存储。他们某种程度上认为存储只是按顺序从主机进行分配,同时存储只是按顺序分配的裸设备。尽管这种观点已经有了某些改变,我仍然有时听到一些奇怪的厂商言论说用户只是使用裸设备,同时数据库和文件一次性写入系统。其实,基于块的文件系统并不是按顺序分配数据。
RAID高速缓存调节和设置
RAID高速缓存调节可以分成三个方面:
调节高速缓存,无论是先读取的还是后写入的;
调节高速缓存块大小;
调节高速缓存镜像(对中端控制器很重要);
先读取和后写入:你可能认为先读取和后写入是一样的,但是它们实际上很不同。
如果是先读取方式--通过在磁盘上读取顺序块,在请求前先读取数据--它假设的是数据将被顺序读取,而且是分配在顺序的块地址上。RAID控制器不知道文件系统或数据的拓扑或格局,它们知道的就是顺序的块地址,因此控制器I/O请求是针对顺序的块地址的。如果你的文件系统分配小于你的RAID条带大小,同时如果同一时间两个以上的文件被写入,那么文件可能在这些RAID条带内分割。
例如,如果文件系统分配是64KB,而RAID 5 8+1条带是512KB,同时多个文件正在被写入,那么大多数RAID控制器做的就是读取你所请求的数据,在这种情况下是64KB,也许还有64KB,而如果你再次顺序读取,经常会是整个条带。另一方面,如果你只是读取一个64KB的块,而剩下的条带有来自其他文件的数据,那么先读取这种方式只会给性能带来不利影响。你要将RAID条带和文件系统分配进行匹配,同时要知晓有多少个文件正在被同时写入,这样你才能很好的理解先读取对你的系统所可能带来的影响。知道这一点可以让你理解一些在RAID上进行先读取调整的方法。
后写入--将块读取到高速缓存以便写入--如果被写入的数据符合RAID的条带值,那么后写入这种方式有很大的好处,因为它在数据到达高速缓存的时候就可以让写入者确认写入。这里的关键是数据必须匹配RAID条带。如果不匹配,那么RAID控制器必须进行读取修正写入(读取进入条带,根据新数据进行修正,然后再写入条带),这种操作会带来更大的系统开销和延迟性。这种情况下RAID高速缓存的作用是隐藏数据写入到磁盘的延迟性并在数据到达高速缓存的时候就马上显示写入。针对后写入的调节经常涉及到需要为写入分配多少高速缓存空间,以及可以被读取或写入的最小高速缓存块大小。
调节RAID高速缓存块大小
高速缓存块大小是数据可以被读取到高速缓存的最小大小。例如,磁盘上的RAID分配是32KB,那么你可能认为磁盘上的所有I/O都是32KB,但如果高速缓存块大小是4KB,那么读取和写入磁盘的最小大小就是4KB,只有磁盘上的八分之一大小。如果你的文件系统分配和写入请求比较大,那么小的高速缓存块大小可能会降低RAID的性能,因为我所看到的RAID在碰到小的块的时候都会变得比较慢--RAID没有足够的CPU资源来管理所有的块。随着下一代RAID拥有更强劲的CPU,这种情况可能会慢慢消失,不过,如果数据和单个磁盘内的RAID分配不匹配的话,设置小的高速缓存块还是必要的。
如果你写入小的请求而读取大的请求,而且文件系统分配和RAID条带一样大,那么在多个写入进行顺序分配的时候文件系统或许不会那么碎片化,同时先读取这种方式可能比较好。另外,如果写入比读取大的话,先读取也是有用的,因为所有的RAID控制器可以按顺序看到小的读取。因此,在调整写入的时候,你需要理解读取请求相对于写入请求的大小,并决定有多少文件被同时写入。如果答案是每次进行一个写入,那么除非文件系统碎片化,数据很可能是顺序分配的,这种情况下先读取可能带来很大的好处。另一方面,如果有多个文件被写入,同时写入大小和文件系统分配小于条带大小,那么先读取的价值就比较小,甚至没有用。总而言之:如果多个文件同时写入,只有在写入大小和文件分配等于或大于RAID条带大小的情况下先读取这种方式才有用。
调节针对镜像的高速缓存
许多中端RAID控制器都有高速缓存镜像功能,在企业级控制器中,所有的写入都被镜像。控制器获取I/O请求后将请求写入到另一半高速缓存以防备正在写入的控制器的部分发生故障。如果数据和全条带匹配,一些厂商有技术有办法越过写入高速缓存镜像要求,不过,在使用写入高速缓存镜像的通用环境下,每个写入请求都被写入到高速缓存,然后在I/O请求得到确认之前写入到另一个高速缓存。写入高速缓存镜像因此通常会拖累性能,因为写入到另一个高速缓存会带来延迟性和带宽要求,同时每个高速缓存必须作为另一个高速缓存的镜像,因此你的可用的高速缓存空间因镜像而减少一半。
如果读取和写入高速缓存有可调节的参数,那么你可以根据工作负荷和可靠性要求调节这些参数。我经常听到的问题是用户应不应该使用写入高速缓存镜像。答案取决于你需要多高的数据可靠性。比如说你写入一个文件,将数据写入到没有进行写入高速缓存镜像的系统。同时,控制器的整个后端(从高速缓存到磁盘)发生故障。这时候,你的应用程序被告知写入已成功,但是数据实际上没有到达磁盘。显然,这种情况的发生概率很小,但是仍然是有可能的,我曾经见到过这种情况。如果再给同一个文件进行另一次写入,你可能会看到I/O错误,因为RAID控制器在认识到不能从高速缓存写入到磁盘的时候会显示错误,或者RAID控制器会故障复原,写入看起来仍然正常进行和完成,但是文件实际上没有获得写入,而应用程序不知道这一点。文件没有写入不是好事,这也就是为什么许多系统默认采用写入高速缓存镜像的原因。对写入高速缓存镜像的调节涉及决定为写入节省多少高速缓存空间,同时你必须启用写入高速缓存镜像。不管无记载数据损坏的概率有多低,你绝对不希望碰上这种情况。如果控制器故障,你几乎不可能再找到坏数据或缺少的数据。
RAID控制器调节其实没那么难,只要你了解一点有关应用程序和RAID之间互动的知识。如果多个文件同时被写入而且文件系统分配比较小,先读取方式经常没那么有用。这种糟糕情况的最明显例子就是Windows上的NTFS。对于文件系统分配比较大的文件系统,如果它们分配大小等于或大于RAID条带大小,那么先读取方式能带来很大的好处。