超实用总结:各种存储性能瓶颈场景下的分析和优化

陈萍春
随着数字化转型的深入,企业的IT系统建设也进一步加快,这一方面带来了数据量的急剧增长,另一方面也提高了数据的访问频率,存储的性能瓶颈的影响也会被进一步放大。

本文来自微信公众号“twt企业IT社区”,作者/陈萍春,现就职于保险行业,拥有多年的系统、存储以及数据备份等运维工作经验。

前言

可靠性、安全性和性能是IT系统最重要的三个评价维度。对于IT系统来说,可靠性和安全性是基础,系统故障或数据泄露等造成的破坏性是显而易见的;而性能则是核心能力,代表着IT系统的服务水平,性能瓶颈会制约企业业务的发展,严重影响用户体验。

存储系统是企业IT基础架构重要的组成部分,为企业内部众多的IT系统提供数据存储服务。随着数字化转型的深入,企业的IT系统建设也进一步加快,这一方面带来了数据量的急剧增长,另一方面也提高了数据的访问频率,存储的性能瓶颈的影响也会被进一步放大。本文将结合个人运维实践,剖析存储系统的架构及运行原理,深入分析各种存储性能瓶颈场景,并提出相应的性能优化手段,希望对同行有一定的借鉴和参考价值。

1.存储系统概述

了解存储系统的架构及其运行原理是性能分析与优化的入门课,才能去全局分析解决存储性能问题。经过多年的技术演进和架构变化,存储系统可大致分为SAN存储、NAS存储以及分布式存储这三类,它们有类似之处,又各有特点。下文将分别详细剖析这三类存储架构及其运行原理。

1.1 SAN存储

SAN(Storage Area Network)本身是一个承担数据存储任务的存储网络,与业务LAN网相互隔离。SAN存储则是一种基于存储块的存储系统,一般使用FC、ISCSI、NVMe等通信协议。

架构层面看,SAN存储一般是存储控制器后端挂载磁盘阵列,数据最终储存在磁盘阵列,而磁盘阵列则包括了多个RAID组。N个磁盘组成一个RAID组,在RAID组之上又会被划分出逻辑存储单元LUN,也就是共享存储池的逻辑磁盘,这些LUN会通过SAN网络与服务器的HBA卡相连,从而会被服务器的操作系统识别为磁盘,并被分区和格式化后使用,其架构如图1所示。

360截图16251112669372.png

图1.SAN存储架构图

从存储的数据IO流角度来看,以常用的FC-SAN存储为例,服务器操作系统一般会使用文件系统管理文件,文件系统是建立在存储LUN之上,文件的读写会对应着存储的IO操作;文件会被分为多个Block,Block大小固定,一般是4KB-16KB;数据Block块会被发送到服务器的HBA卡,HBA卡再将其转换为FC协议的数据帧(Data frame),并通过SAN网络传输到存储系统的前端口;存储的前端口继续将这些数据帧重新封装成数据Block,Block大小一般为4KB,并将这些数据Block块传输到存储控制器中;存储控制器中会有存储缓存(Cache),分为读缓存与写缓存,根据缓存的算法规则,部分缓存命中的IO数据流会立刻返回IO确认,缓存未命中的IO数据流则会需要继续访问磁盘阵列;由于多个磁盘组成了RAID组,一个数据IO流实际上对应着多个磁盘的并发读写。整个过程如图2所示:

360截图16251112669372.png

图2.FC-SAN存储的数据IO流图

1.2 NAS存储

NAS(Network Attached Storage)存储一般也可认为是网络文件存储,用户数据大多数以文件形式存在,通过以太网访问模式走NFS/CIFS协议,提供了广泛兼容性易用性的共享能力。相比于SAN存储,NAS存储不以磁盘形式提供存储服务,不需要分区和格式化,可以直接提供可以直接挂载的网络文件系统。

架构层面看,NAS存储一般也是基于磁盘阵列(也有基于集群文件系统或分布式存储的实现方式)实现的,在磁盘阵列之上会有NAS机头来创建和管理文件系统;NAS机头是NAS存储的核心逻辑部件,是典型的C/S架构风格,是对外提供网络文件服务的Server端;其他client端在获得授权后,可通过挂载文件系统、映射网络磁盘或HTTP、FTP等方式就可以共享访问NAS文件系统上的文件,其架构如图3所示:

360截图16251112669372.png

图3.NAS存储架构图

从存储的数据IO流角度来看,以NFS为例,NAS存储是有着明显异于SAN存储的特点,比如客户端缓存、Server的无状态性等。首先客户端并不是直接访问NAS文件系统,而是客户端缓存,是服务端的文件系统目录树映射到了客户端,实际在文件读写时,需要循环读写固定大小的页面,比如64KB;而Server端的无状态性体现在不需要维护客户端的协议状态信息,客户端通过RPC调用操作Server端的文件系统数据,但也不能获取Server端的状态,当连接中断时,可以不停地连接重试。如图4所示,基于TCP的应用层协议的NAS存储数据IO流会更加灵活,适配性较强,但数据IO路径更长,数据一致性较差,还会存在数据泄露等安全问题,数据传输效率也不高。

360截图16251112669372.png

图4.nfs协议下的NAS存储数据IO流图

1.3分布式存储

分布式存储系统是采用可扩展的集群架构,通过数据副本算法将数据分散存储在多台独立的设备上,分布式集群之间一般通过通用TCP/IP网络连接。相比于其传统的集中式存储阵列,分布式存储系统可以通过多台存储服务器来分担存储负荷,可以满足大规模存储应用的需要。常见的分布式存储系统的形式包括分布式文件系统(如HDFS)和对象存储(如Ceph)。

从架构层面来看,与集中式存储系统相比,分布式存储系统的部署架构相对简单,一般是通用服务器网络互联的方式,但其逻辑架构更加复杂。分布式存储系统的核心设计思想是去中心化,去中心化的难点主要在于是主控节点的去中心化,有主控节点的架构比如HDFS的架构设计思路是map-reduce,化大为小,分而治之,再合并处理,其架构中需要主控节点来协调,只是主控节点的负载都分发到了数据节点,数据节点上则存放着数据副本,每个数据副本又都分布在三个不同的数据节点上,如图5所示;而无中心化的最大优点是解决了主节点本身的瓶颈,其架构设计思路则是均衡设计,这种架构只有数据节点,但是需要抽象出更多的逻辑功能组件,并均衡分布在不同节点上。以Ceph块存储的使用方式为例,除了Mon等集群管理监控组件之外,Ceph中OSD组件用于管理物理磁盘,基于OSD去构建PG,而PG上存放着数据对象,数据对象则对应着Ceph块设备,Ceph块设备可被格式化分区,从而被应用使用,其架构图如图6所示。

360截图16251112669372.png

图5.有主控节点的分布式存储架构

360截图16251112669372.png

图6.无主控节点的Ceph存储架构

从存储的IO数据流来看,不同于集中式存储较少的数据通道,分布式存储的数据入口可以更多更宽,但集群内部的数据流也更多。还是以Ceph的块存储为例,客户端应用访问的文件系统对应的是Ceph块设备,Block数据通过网络访问Ceph集群RBD服务,最终对应于三副本OSD的磁盘读写,流程如图7所示。对于三副本的分布式存储系统,为保障数据的强一致性,一个写IO,一般需要主副本和另外两个从副本都写完后,才能最终确认写完成。

360截图16251112669372.png

图7.Ceph存储IO数据流图

2.存储性能分析

存储性能分析是性能优化的基础,虽然存在多种类型多种设计方案的存储系统,但性能分析方法却具有一定的通用性。存储性能分析方法可分为定性与定量两种方式,通常在接触了解、技术选型的初期可能并不具备定量分析的条件,则主要采用定性分析方法来评估存储系统的性能;而一旦进入POC测试、系统运维等阶段,则应以定量分析为主,通过实际的性能指标数据来判断存储性能瓶颈。

2.1定性分析

定性分析是结合个人的运维经验,来分析存储系统的性能是否能满足应用系统的需求,来分析存储系统是否存在性能瓶颈,而这些都取决于对应用数据类型和存储系统的熟悉程度。

2.1.1应用数据IO分析

了解应用数据IO的类型,是存储性能分析的基础。不同应用数据IO访问存在着差异,主要体现在IO大小、顺序或随机读写、读写比例等方面,如表1所示。

360截图16251112669372.png

表1.应用程序的数据IO类型

IO大小

应用数据类型的差异会带来不同大小的数据文件,也对应着不同的数据IO大小。假设存储系统IO处理能力是固定的,显然单位时间内大IO处理的数据更多,那么合并小IO会更有效率;而假设存储系统每次处理数据IO大小有上限,那么每次处理大IO前都需要拆分,显然IO处理效率会下降。比如SAN存储具有很高的IO处理能力,但单次处理的IO偏小,那么更适宜性能要求高的、小IO应用系统,而处理大IO应用数据时,效率反而会下降。

读写比例

读写比例是应用数据的重要特征之一,IO读和写操作存在着较大的差异。一般来说写操作对于存储性能的消耗更大,写IO处理能力、延时都较高,对缓存的需求差异也较大。对于分布式存储来说,多副本机制可以优化读操作,但却不利于写操作,写确认路径较长,需要优化数据传输路径、配置更多的写缓存,更适宜于读比例较高的应用系统。

顺序或随机读写

顺序或随机读写的差异主要表现在磁盘介质特性、预读取机制、缓存命中率等方面。对于机械硬盘来说,顺序读写的IO可以减少磁盘寻道时间,随机读写的IO则响应时间变长,可以通过提高缓存命中率的方式,将缓存中的数据转化为顺序读写到磁盘;而SSD硬盘则不存在机械寻道,随机读写能力会大大优于机械硬盘。

2.1.2性能瓶颈分析

存储性能分析的关键是对性能瓶颈进行分析,包括两方面的内容:一是触发性能瓶颈的因素;二是性能瓶颈的定位,找出存储IO拥塞的位置。

1)触发性能瓶颈的因素

存储热点:存储热点是规划设计中的缺陷,典型场景包括数据IO负载过于集中在某个存储节点、端口、磁盘等,存储资源争用、锁竞争,软硬件参数的限制等。

性能尖峰:常见于数据IO高并发、性能需求短时间集中释放的场景,性能尖峰更会充分暴露出存在的热点问题,从而触发存储性能瓶颈,典型场景包括虚拟桌面启动风暴、秒杀类业务等。

服务能力下降:常见于故障场景,存储服务能力下降叠加数据IO繁忙阶段,会导致触发存储性能瓶颈。典型的故障场景包括SAN存储单存储控制器故障、磁盘rebuild等;分布式存储更容易出现性能抖动,主要也是由于某个节点或磁盘掉线或重建数据副本或某个数据副本响应变慢;客户端服务器的CPU、内存资源不足等。

2)性能瓶颈的定位

存储性能瓶颈的定位需要结合存储系统的架构来分析,按照存储系统的构成大致可分为以下几类性能瓶颈位置:

数据传输网络:存储外接和内接数据传输网络的带宽、端口速率、传输协议、传输路径的负载均衡度

存储控制器:控制器的CPU处理能力

缓存:主要分为客户端缓存和存储缓存,包括缓存大小、缓存命中率、读写缓存的分配比例

磁盘:主要分为机械硬盘、闪存盘等磁盘介质,包括磁盘转速、单盘读写的IOPS、磁盘容量大小、磁盘数量、磁盘冗余(RAID、副本或纠删码)算法

客户端:体现在客户端的CPU、内存等资源的使用情况、其他应用对存储资源的占用等外部环境的影响

2.2定量分析

定量分析是从数据指标角度来分析解决问题,既可以从存储侧来度量存储系统的服务能力,也可以从用户应用侧来衡量存储IO体验。一般来说,存储侧的定量分析排除了存储网络和客户端的影响,性能数据能说明存储系统本身是否存在性能瓶颈,可用于存储系统的性能监控;而用户应用侧的定量分析主要用于一些性能测试场景,通过基准测试工具,可以形成当前系统环境的性能基线。

2.2.1三大性能指标

无论是存储侧还是用户应用侧的定量分析,都离不开三大存储性能数据指标:IOPS、吞吐量(Throughput)、延时(Latency)。因此有必要弄清楚三个性能数据指标的含义及其关联关系。

IOPS:代表存储每秒所处理的IO操作数量。对于存储系统来说,我们在性能分析时,既需要关注整体的IOPS,有时也需要分析单个控制器、单个LUN或者单个磁盘的IOPS,甚至可能还需要区分读或者写的IOPS。

吞吐量(Throughput):代表存储每秒所处理的IO数据量大小,也就是存储数据传输所占用的带宽,与IOPS类似,也可以细分读或者写,可以单独组件分析。

延时(Latency):代表存储系统处理IO操作所需要的时间,通常情况下,是最重要的存储性能指标,与IOPS类似,也可以细分读或者写,可以单独组件分析。

三大性能指标分析中,对于大IO的应用使用吞吐量来评测性能更加科学;而小IO的应用,比如数据库,则需要通过IOPS和延时的指标来评测性能,高IOPS和低延时同时满足的情况下,才能应对高并发且快速的数据库访问。

2.2.2性能测试分析

存储性能测试可以更好地理解存储的性能指标,以某个存储性能测试为例,存储压测工具vdbench(可针对裸盘与文件两种访问方式的压测),测试背景是存储上分配了5个lun给主机,主机对这五块裸盘做随机读写测试,80%读20写,逐渐调整IO的大小进行测试,三大性能数据指标如下表:

360截图16251112669372.png

表2.存储性能测试数据

该存储性能测试的结论如下:

1)该存储的控制器CPU使用率峰值在20%-45%,说明该存储控制器还可以承受更高的IO负载,如图8所示。

360截图16251112669372.png

图8.存储控制器CPU使用率

2)该测试也未达到主机的系统性能瓶颈,CPU使用了低于20%,这一点在存储性能分析中也很重要。

360截图16251112669372.png

图9.主机系统的CPU使用率

3)存储性能基线:表2中的测试数据就是特定的主机使用该存储的5个lun在不同IO负载下的性能基线数据,在实际运行过程中,考虑到其他应用的IO、读写IO大小不均等因素,一般IOPS峰值在基线值的50%。

4)吞吐量和IOPS:吞吐量=IOPS*IO大小,相同的业务场景,一般IO大小不会有明显变化,那么极限测试下的吞吐量与IOPS会呈正比关系,但吞吐量受限于网络带宽,IOPS又受限于存储lun的处理能力;

5)延时和IOPS:可以看出测试数据中延时和IOPS呈现出反比关系,即IOPS越低,延时反而越高,这是由于不同的IO大小的测试场景下,存储的负载压力不一样,即大IO的情况下,存储负载变大,IOPS下降,延时加大。而存储系统正常运行状态下的IOPS和延时关系如图10所示,大多数情况下存储的负载压力变大,IOPS增加,延时也开始变大,一旦延时过高就会影响业务系统的性能。所以大多数情况下,延时是最重要的存储性能指标,一般性能要求较高的业务系统,存储的延时需要低于5ms。

360截图16251112669372.png

图10.正常运行状态下的存储IOPS和延时

3.存储性能优化

存储性能分析与优化是一项长期、复杂而重要的工作,需要明晰存储性能优化目标,做好详细性能分析,并制定阶段性的优化方案和验证方案,以确保存储性能优化工作的持续开展。

3.1优化策略

存储性能优化工作具有一定的策略性,科学的优化策略才能指导制定更加合理的存储性能优化方案。

1)通盘考虑:存储性能问题是一个全局性问题,需要通盘考虑IO路径上的性能瓶颈,分析性能优化方案中可能出现的连锁反应,以提高性能优化决策的正确性。

2)优化的性价比:制定合理的性能优化目标,在多种性能优化方案的选择上,要综合考虑方案成本、实施复杂性、收益等。

3)规划更重要:相比于存储性能优化带来的优化改造成本,提前做好合理的规划更为重要。比如兼顾业务性能需求的存储选型,系统上线前的存储性能测试的基线数据及性能容量管理,存储扩容要关注性能容量指标(评估扩容后,存储的IOPS/GB是否有较大变化),以及存储性能负载的均衡分布等。

4)完善性能监控:端到端的存储性能也是非常重要的,对整个数据IO路径进行监控,基于存储性能基线来分析实际运行中的性能数据,从而及时发现存储性能瓶颈,也能验证存储优化的成果。

3.2优化方案

存储性能优化方案可以大致分为以下几类:

1)硬件升级

单块机械硬盘的IOPS在100左右,延时在5ms以上,而单块SSD的IOPS在1万以上,延时小于1ms,传统机械硬盘替换为全闪存存储,性能可以得到极大的提升;NVMe、RDMA等技术的应用,优化了底层通信框架,可以极大提高数据传输效率,降低存储延时;存储控制节点的横向或纵向扩展,可以有效增加存储负载能力;客户端的硬件升级,也能消除客户端的CPU、内存、网络等带来的性能瓶颈。

硬件升级是一种非常有效的存储性能优化手段,但是很多情况下需要比较高的硬件成本,投入产出比还需要仔细评估。

2)上层应用优化

上层应用优化手段也比较丰富,主要目标是减少上层应用带给存储的IO负载,比如数据传输前启用重复数据删除或数据压缩;优化IO并发,将大量的小IO聚合成大IO;数据库的索引优化、SQL语句优化。

3)调整性能负载

调整性能负载主要针对的存储性能热点问题,方案包括优化磁盘分布方式,调整磁盘负载;调整存储网络端口负载;调整存储控制器负载;新增存储,将部分负载调整到新的存储上。

4)数据缓存优化

数据缓存是存储系统中非常重要的性能模块,一般缓存都采用内存或闪存等速度更快的存储介质,远远快于一般的磁盘。很多存储性能问题都因缓存而起,也经缓存优化而终结。数据缓存分为客户端本地缓存和存储缓存。比如客户端本地缓存对于一些分布式文件系统非常重要,增加缓存大小,可以有效提高缓存命中率;存储的缓存也极为重要,多层级的数据缓存技术可将热点数据存放在更快的存储介质上,降低存储延时。

原题:存储系统性能分析与优化

THEEND

最新评论(评论仅代表用户观点)

更多
暂无评论