QuantumConfidential|STORNEXT存储系统最佳实践刘松涛昆腾亚太区构架师sean.liu@quantum.com13601034347QuantumConfidential|内容StorNextFileSystem性能调优StorNextStorageManager归档存储的选择2QuantumConfidential|StorNext存储最佳实践StorNext存储系统,包含两个功能:–在线存储层:StorNextFileSystem–共享文件系统,支持SAN和LAN两种网络–归档存储层:StorNextStorageManager–数据归档(或叫做分级存储),支持磁盘归档、磁带归档、云存储归档QuantumConfidential|最佳实践之StorNextFileSystem性能调优篇QuantumConfidential|StorNextFileSystem的性能调优作为一种高性能文件系统,SNFS可充分发挥存储硬件、连接网络的带宽,为各种不同的非结构化数据的应用提供极高的存储性能虽然,很多情况下,我们无需调优,缺省安装的StorNext就可以满足大多数的性能需求但是,还有少部分客户,需要极高的存储性能,例如4K电影的后期制作,以及,一些客户为了降低硬件(存储和网络)成本,而拼命调节SNFS参数,从而产生出极致的存储性能接下来,我们来看看,SNFS的调优的最佳实践…QuantumConfidential|SNFS的性能和哪些因素有关?SNFS作为应用和存储之间的那层,在性能上关系重大,应用是否能取得最佳性能,基本上取决于SNFS是否能让上层应用和底层存储匹配起来总结起来,SNFS的性能和如下几个因素有关:–底层:底层存储的特性(RAID设置、盘阵缓存设定等)–上层:文件大小及应用IO特点(随机/顺序、多少个流、块大小)–中层:SNFS的设计(元数据网络、MDC设置、客户端设置等)6上层应用SNFS底层存储QuantumConfidential|SNFS底层存储的调优底层存储的调优,是SNFS调优中最重要的部分底层存储的调优包括如下几个部分:–RAID缓存的配置–RAID级别、RAID条带宽度和SNFS条带宽度7QuantumConfidential|SNFS底层存储的调优-RAID缓存的配置RAID缓存的配置是底层存储调优中,最为重要的一个环节,特别是针对小IO应用现代RAID技术都为小IO提供了提升性能的缓存,因此我们必须充分利用RAID控制器的缓存,将他调节到最优状态最佳实践如下:–针对SNFS的元数据所在的RAID上,建议开启“回写缓存”(write-back)–针对大量小IO写操作,建议开启“回写缓存”,但可能会降低大IO的持续写入性能–针对顺序读应用,建议开启“预读缓存”(read-ahead或叫做prefetch)–针对随机读应用,不建议开启“预读缓存”–针对大IO应用,建议使用“直写缓存”(write-through)–直写缓存有点像DMA(DirectMemoryAccess),也就是不用缓存–直写缓存和回写缓存的左右正相反8QuantumConfidential|SNFS底层存储的调优-RAID级别/条带宽度、SNFS条带宽度RAID级别、条带宽度和SNFS条带宽度对性能的影响,不及上述缓存,但也是十分巨大的而且请注意:这几个地方一旦确定下来,投入生产上线后,就不能修改了,因此要特别小心。(前面提到的缓存是可以随时修改的)最佳实践:–不要把元数据和数据都放在一个RAID组上,元数据要单独放置–建议元数据放在RAID1,也就是镜像磁盘上–如果追求IOPS,则可以把元数据放在RAID10上,通常4块盘就可以了,但也可以支持6块、8块盘,RAID10提供了RAID0的性能以及RAID1的保护级别。–数据放在RAID5或RAID6上,此时要用RAID组的条带宽度(segmentsize)来计算SNFS的条带宽度(StripeBreadth),公式如下:StripeBreadth=nxsegmentsize(n+1RAID5或n+2RAID6里面的n)例如4+1的RAID5,其RAID条带宽度为64KB,则SNFS的StripeBreadth应设为:4x64KB=256KB9QuantumConfidential|SNFS针对上层应用的调优虽然底层存储的调优,是SNFS调优中最重要的部分,但了解上层应用的IO特点也是很重要的针对上层应用,我们要了解如下信息:–并发的数据流(或者IO数)有多少–读和写的比例有多少(或者说,读多一些还是写多一些)–IO块的大小是多少–顺序还是随机读写,还是都有10QuantumConfidential|SNFS针对上层应用的调优针对上层应用,SNFS调优的最佳实践:–尽可能的将顺序IO和随机IO分开,放在不同文件系统上–然后再针对顺序IO和随机IO来调优,各个击破–如果不能做到上述,则我们要尽可能的针对最重要的、或最多的那种IO来调优,此时则会影响到另一种IO的性能,但综合起来效果最好–如果应用的大顺序IO较多,则可以利用DMA,SNFS的客户端mount参数里有这个设置,可以参见auto_dma_read_length和auto_dma_write_length这两个参数的设定,具体的说明请参见mount参数的说明–对于较小的、不够整齐的IO,则可以利用SNFS的buffercache机制。此时最重要的参数是buffer大小,buffer要等于或者大于RAID组条带的大小,如果小于,则性能将受到较大影响–因此如果IO较小较碎,则RAID组的条带大小不要太大,最好不要大于256K11QuantumConfidential|SNFS针对上层应用的调优针对上层应用,SNFS调优的最佳实践:–针对NFS/CIFS二次共享,一定要将它们的流量和元数据流量分离,或者说为元数据建立单独的网络;–针对NFS/CIFS二次共享,其客户端和服务器最好使用同一个网络交换机,不要经过路由,更不要通过WAN,这将产生延迟,将极大的影响整体性能–针对NFS二次共享,一定要使用TCPmount不要使用UDPmount,建议mount参数为vers=4,rsize=262144,wsize=262144;建议使用TCPoffload以及jumboframe(巨帧)–此外,尽可能的调整网卡交换机上的speed/duplex为disable自动设定(disableauto-detect),而采用自定义为千兆网12QuantumConfidential|SNFS自身设计上的调优前面讲完了底层存储和上层应用的调优,我们不难发现,SNFS的地位是中间层,也就是讲上层和底层匹配起来的那一层SNFS这个中间层,虽然不及上层和底层调优重要,但也是不可忽略,我们必须要了解的一层SNFS中间层,或者说SNFS自身设计上的最佳实践要注意如下几个方面:–元数据网络–元数据控制器–SNFS文件系统配置文件13QuantumConfidential|SNFS自身设计上的调优-元数据网络SNFS的服务器(MDC)和客户端,是一个客户端/服务器(C/S)构架,他们之间有着频繁的通讯,其通讯包的内容就是元数据,也就是文件的位置信息,也就是inode,因此,客户端是否能够尽快获得inode元数据,将取决于元数据的网络,因此这个元数据网络十分重要。元数据网络的最佳实践:–如追求高性能,则一定单独规划出来一个以太网网络,用于元数据。–如使用百兆网,则一定单独规划出来一个以太网网络,用于元数据。–如果机房允许,也一定单独规划出来一个以太网网络,用于元数据。–元数据网络应在一个交换机上,有路由就会产生延迟,将影响性能–元数据网络应禁止使用TCPoffload和巨帧14QuantumConfidential|SNFS自身设计上的调优-元数据控制器元数据控制器(MDC),也就是StorNext服务器,其硬件配置也很重要最佳实践如下:–MDC对内存和CPU有一定要求,虽然国内外在用的绝大多数的StorNext客户的MDC仅仅使用1个4核或2核CPU,仅仅使用2G或4G内存,但在某些情况下,尤其对性能有极致要求的时候,我们还是应配置足够的内存和CPU。–CPU对于metadata密集操作还是有很大帮助的,特别是创建大量小文件的时候,CPU的提升会有很大帮助–内存同样对大量的小文件操作也有很大帮助,StorNext4.3版本后,单个文件系统的MDC上的缓存可以增加到8G,因此小文件操作有极大的提升–内存对于目录浏览遍历,也有极大的帮助。–SNFS文件系统配置文件中,有三个参数可以利用到很多的内存:BufferCacheSize,InodeCacheSize,ThreadPoolSize–如果内存不足,系统开始利用磁盘交换虚拟内存,则会严重影响性能15QuantumConfidential|SNFS自身设计上的调优-SNFS配置文件配置文件.cfg或cfgx里规定了很多重要的参数,因此必须重视最佳实践如下:–FsBlockSize文件系统块(FSB)的大小。通常来说,上层应用的数据块越大,FSB就应该越大。例如,标清分辨率的视频相对于4K电影来说,数据块就有很大的变化,我们应该适当调整FSB。但由于元数据磁盘大小、JournalSize以及用户数据(userdata)的设定和FSB是息息相关的。因此有的时候,单纯调大FSB往往会看到相反的效果。比较安全的值是16K和64K。大于64K,则可能会降低元数据的效率,因此会影响性能。此外,建议元数据盘的最小值为25GB。如果文件数更多,则应适当调大。–JournalSizeJournal是当前活跃的metadata。通常为FSB的1000倍,比较安全的设定为16MB(FSB=16K时),或64MB(FSB=64K时。然而,有时提高Journal值,也就是增大Journal的空间,会提升性能,特别是频繁IO的情况。其副作用是会增加服务启动的时间和双机切换的时间。16QuantumConfidential|SNFS自身设计上的调优-SNFS配置文件–BufferCacheSize该参数为MDC内存里的元数据信息(包括目录块、inode和其他元数据信息)缓存,它可以降低元数据的延迟,因而可以提升频繁IO的性能。缺省值为32MB,通常来说,增加该值可以提升性能,但要注意内存的使用,最大可以设置为8GB,将最大吃掉MDC上的16GB内存。–InodeCacheSize该值为MDC内存的inode的缓存,同上面的参数的道理是一样,该值最大为512K。将吃掉大约512Kx1000的内存。–ThreadPoolSize该值为处理客户端访问的线程的数量,通常我们建议每个客户端有两个Thread,因此该值的建议值为客户端数x2,例如如果有70个客户端则,设置成为140.每个Thread将吃掉512K内存,因此请注意内存的使用。如果每个客户端的并发访问数很多,则可以继续适当增大该值,比如采用客户端数x4等。17QuantumConfidential|性能调优总结性能调优前首先要了解客户需求,看客户需要多大的性能如果客户对性能要求不高,则我们要重点考虑安全稳定等因素性能调优的顺序:–首先考虑:底层存储–其次考虑:上层应用的特点–最后综合考虑:StorNext系统的设计,去匹配上下两层一点建议:–性能调优并非费时费力,只要按照上述顺序和规律都可以调出来非常好的性能–要先学习,再动手–最好是两个人以上形成一个“调优小组”,相互商量、相互确认,可以少走弯路18QuantumConfidential|最佳实践之StorNextStorageManager归档存储的选择(磁带、磁盘、云存储)QuantumConfidential|StorNext归档存储StorNext可以将数据自动的迁移到二级存储,或者叫做归档存储