在日常生产环境及测试开发环境的OpenStack使用过程中发现,Horizon页面响应缓慢,为了得到OpenStack各功能接口的性能瓶颈所在及性能耗时分布,为集群性能优化提供数据依据,现使用OpenStack性能压测工具Rally及性能分析工具OSProfiler对OpenStack进行测试及分析,同时可以使用Tempest验证OpenStack各组件接口功能。
一、工具版本
工具 |
工具版本 |
Git地址 |
Rally |
0.11.1 |
https://github.com/openstack/rally.git |
OSProfiler |
1.15.1或1.5.0 |
https://github.com/openstack/osprofiler.git |
二、安装
1. Rally安装
(1)安装依赖库
yum install python-pip lsb_release gcc gmp-devel libffi-devel libxml2-devel libxslt-devel openssl-devel postgresql-devel python-devel redhat-rpm-config |
(2)下载并安装rally
git clone https://github.com/openstack/rally.git |
cd rally && git checkout 0.11.1 |
./install_rally.sh --branch 0.11.1 |
2. OSProfiler安装
pip install osprofiler==1.5.0 |
三、Rally/Tempest配置及初始化
1. Rally配置
Rally安装完成后,默认的配置文件路径为 /etc/rally ,修改该路径下的 rally.conf 文件即可,一般修改项为API 接口的超时时间。为了记录一次API性能测试的详细性能耗时分布,需要在配置文件中开启osprofiler,在配置文件中的 [openstack] 配置组中配置 enable_profiler = True ,从而开启API接口的trace调用记录。
在完成Rally的配置调整后,需要初始化Rally的测试环境,即创建deployment与具体的OpenStack环境进行关联。 初始化deployment目前有两种方法,一种是通过环境变量,另一种是通过环境文件方式。在实践过程中,我们采用了环境变量的方式,即环境中的admin-openrc.sh文件,添加:
export OSPROFILER_HMAC_KEY="charlie" |
其中需要说明的一点是环境变量 OSPROFILER_HMAC_KEY ,是为使用osprofiler的功能而设置的,该变量的值需要与 Openstack各服务配置文件中的值相同。编辑好环境变量文件后,需要使环境变量生效:
source admin-openrc.sh |
环境变量生效后,就可以创建deployment了,创建命令如下所示:
rally deployment create --fromenv --name=openstack |
创建完成之后,检查环境是否可用,显示Available表明环境可用:
rally deployment check |
2. Tempest配置及测试
通过Rally进行Tempest测试,执行如下命令创建tempest实例,Rally会自动同步tempest代码至本地:
rally verify create-verifier --type tempest --name mytest |
执行如下命令,进行配置:
rally verify configure-verifier |
执行rally verify start开始测试所有openstack 接口,可以通过指定--pattern参数,仅对部分服务接口进行测试例如,--pattern set=compute可选的set有full, smoke, compute, identity, image, network, object_storage, orchestration, volume, scenario,当然--pattern参数后面的值也可以是正则表达式,此时测试的接口为某一服务的部分接口,例如:--pattern tempest.api.compute.admin.test_flavors.FlavorsAdminTestJSON
rally verify start --pattern set=compute rally verify start --pattern set=image rally verify start --pattern set=identity rally verify start --pattern set=network rally verify start --pattern set=volume |
测试完毕后即可查看测试结果:
rally verify report --uuid |
四、OpenStack服务配置
OSProfiler是一个Python库,基本所有的OpenStack服务都集成了该Python库用以实现对服务的性能分析和优化,每个服务使用该库在代码中需要的地方埋点,在系统的边界点设置一个起始点,在调用返回的地方设置一个结束点,中间的时间间隔即为子系统的性能耗时。OpenStack服务在开启OSProfiler后,会在每次REST API调用过程中生成一条trace记录,用来记录本次REST API调用全链路中,各子系统的性能耗时分布。
为了开启OpenStack各服务的OSProfiler功能,服务配置文件中需添加以下部分:
[profiler] hmac_keys = swordfish,foxtrot,charlie trace_sqlalchemy = True trace_wsgi_transport = True trace_message_store = True trace_management_store = True enabled = True connection_string = redis://XXXX:XXXX #redis地址 |
最后一个配置项 connection_string 有多种配置选择,默认如果不配置的话,trace记录是发送到Ceilometer的, 如果测试的OpenStack环境没有部署Ceilometer,可以将数据发送到Redis,Elasticsearch,MongoDB,RMQ等,选择不同的backend,配置会随之发生改变。
开启OSProfiler后,我们可以记录一个REST API调用过程中,服务的HTTP调用耗时,RPC调用耗时,DB API调用耗时,所有服务客户端驱动的调用耗时(如novaclient,neutronclient等),SQL请求耗时等。
五、Rally性能测试
在测试的过程中,我们使用Rally来发送REST API请求,进行并发的压力测试,在压测的过程中开启了OSProfiler, 以便能够在压测过程中得到接口的性能耗时分布结果。
在测试开始之前,首先需要编写测试需要的yaml文件,这些yaml文件的样例可以在Rally的Git仓库中找到,路径是rally/samples/tasks/scenarios,可以参考这些样例完成yaml文件的编写。执行测试命令为:
rally task start |
当压测结束后,使用以下命令导出测试报告:
rally task report |
可以在测试结果报告的 Scenario Data 部分,找到trace ID,执行以下命令生成每次调用的性能耗时分布报告:
osprofiler trace show --html --out trace.html |
参考资料:
http://niusmallnan.com/_build/html/_templates/openstack/osprofiler.html
https://docs.openstack.org/osprofiler/latest/#five-ways-to-add-a-new-trace-point