ceph简述 ceph提供一种分布式存储,它可以为云主机提供弹性的存储空间。ceph的存储空间分为多个存储池(pools),如下图所示,云主机的系统盘、数据盘、系统快照、数据盘快照都存储在不同的pool中。其中系统盘和系统快照存储在一个pool中,数据盘和数据盘快照存储在一个pool中,数据盘存储在一个pool中。 在ceph之前,云主机的存储后端为NBS,本次测试针对云主机存储后端由NBS切换为ceph后,相关业务场景的性能表现。
本次测试的业务场景主要包括,虚拟机创建相关场景、数据卷创建并挂载、数据卷卸载、数据卷删除等场景。测试场景的设计主要包括以下几点: 场景选取 对于一般的性能测试而言,通常采用类似控制变量法的方式设计测试场景。例如衡量metadata服务性能测试时,影响metadata服务性能的因素包括nova api worker数、neutron api worker数和neutron server缓存三个因素。 对服务性能的影响,常用的做法是根据实际情况,将两种变量固定为一个值,测试第三种因素在不同水平下该服务的性能表现,即该服务的TPS、响应时间以及正确率等。因此针对metadata服务的性能测试场景有三个每个场景对应一个测试变量。 ceph性能测试场景相对简单,ceph性能测试是面向不同的API,不同的API对应不同的测试场景。 相关参数的设置 测试过程中每个测试场景会涉及一些参数的设置,例如创建虚拟机场景共包括两个测试点: 1、创建不同规格的虚拟机; 2、不同并发下创建虚拟机; 其中测试创建不同规格虚拟机时需要确定创建哪些规格的虚拟机,不同并发下创建虚拟机需要明确创建虚拟机的规格。此外创建数据卷也包括数据卷的大小等具体参数。这些参数的设置需要依赖一定的BI数据。 实际测试过程通常没有BI数据以供参考,测试人员需要根据运维人员提供的线上数据进行设置合理的参数,同时测试方案交由相应的开发人员review,对测试参数进行适当调整,从而更大程度的接近用户实际使用情况。测试的执行 测试的具体执行步骤是测试场景的核心环节。一般而言测试的步骤包括以下几个: 1、测试准备 测试准备通常用来完成铺底数据。铺地数据是测试的基础,例如测试创建并挂载卷场景时,数据卷创建并挂载依赖云主机,否则数据卷挂载阶段无法完成,因此测试该接口前的测试准备阶段需要铺底一定量的云主机。 2、并发加压 并发加压主要是指对接口进行一定压力的并发访问,该过程通常依赖测试工具完成。常见的测试工具如Grinder、ab、http_load等。ceph性能测试过程中使用的测试工具是Grinder,通过设置grinder.properties中的grinder.threads值,即可实现对接口不同压力的访问。 3、测试数据收集 测试工具通常会输出测试结果,例如Grinder工具在成功运行之后会在指定的log路径下生成后缀为.out的文件,该文件中包含测试过程中的测试结果信息。 然而,有时候测试工具输出的信息并不全面。例如对于异步接口,测试工具仅能输出Http请求的TPS、响应时间等信息。对于后端动作持续时间通常需要测试人员手动统计。对于异步动作时间的统计需要根据测试场景的不同进行设计。常见的异步动作时间的统计方法如下: --代码中打点统计 代码中打点通常是开发人员来完成的,开发人员在代码运行到一定位置时在日志中记录相应的时间信息,测试人员可以据此统计代码的执行时间。 --测试脚本中通过时间戳统计。 测试脚本中通过时间戳统计时间是指在开始执行异步动作前记录当前时间戳,然后轮询检查状态变化,当动作完成后记录完成时间,根据两个时间戳的差值获取动作执行的时间。 优点: 时间统计简单、直观。 缺点: 1)无法获得动作执行过程中的内部细节。 2)如果出现异常服务的状态卡住,轮询不到完成状态测试代码会一直卡住。 3)统计误差受状态轮询时间影响。 --自定义策略统计 自定义策略根据是根据具体的测试制定相应的统计策略。本次ceph性能测试过程中,统计虚拟机ping不通时间制定如下策略。从一台虚拟机ping新创建的虚拟机。后统计ping通次数和总次数,根据比例关系和持续时间计算虚拟机ping不通时间。 使用ping统计时间需要注意,ping命令可以指定ping间隔,ping次数和ping间隔的乘积可以获取ping的持续时间。然而ping次数越多这个时间的误差越大。通常情况下ping命令的输出结果中会有ping时间的统计,该时间是比较严格的ping持续时间。 4、测试环境清理 由于性能测试需要执行多轮,每轮之间需要保证测试环境一致。因此一轮测试结束后需要清理测试环境,删掉创建的资源。 多场景串联测试 性能测试过程中有些测试场景具有因果关系,串联测试会减少测试准备的时间,提升测试效率。例如测试创建并挂载卷场景、卸载卷场景、删除卷场景时,三者直接顺序完成恰好可以避免清理测试环境。 优点: 测试效率高,节约测试时间。 缺点: 1)不同测试场景的并发量存在差异,各个场景并发量可能不一样。 2)需要频繁修改配置文件。每个场景的脚本配置,时间统计,都星对独立。每次执行下一个场景测试前需要更改相关配置。 3)场景互相干扰。三个场景测试过程中如果其中一个场景出错,需要其他测试场景重新配合执行。 总之,多场景串联测试需谨慎!