一,Cosbench工具介绍
COSBench是Intel基于java开发的,用于对象存储的性能测试的开源工具,全称是Cloud object Storage Bench。
Cosbench主要由两个组件组成:
● Driver(Load Generator):负责生成工作负载,向目标云对象存储发出操作;性能统计,可通过 http://:18088/driver/index.html 访问
● Controller:负责协调drivers集体执行工作,收集和汇总聚合来自driver实例的运行时状态或基准测试结果,可通过 http://:19088/controller/index.html访问
两个组件可以混合部署在一个节点上,也可以分开来部署。
二,Cosbench工作流程
根据Cosbench的使用介绍可以了解到,有两种方式提交测试任务,一是使用命令行提交测试配置文件执行,二是通过web页面提交测试配置文件。第二种方式对应的工作流程图如下:
流程说明:
1. 用户通过Cosbench页面提交xml文件,生成测试任务
2. Controller进行获取和校验xml文件的内容,执行三种动作:
S3 client auth:如果是S3对象存储,则执行S3的认证,获取session
识别任务类型:包括init, write,delete,read等
分发任务到各个driver:将work分发给指定的driver,driver按照逻辑执行对应的任务
3. 配置文件中的每一个workstage结束后,都会在web页面自动更新状态
三,Cosbench页面认证
当Cosbench启动以后,可以在本地使用浏览器访问用户Web控制台提交测试任务,在浏览器地址栏输入http://ip:19088/controller,页面访问正常,且driver状态为绿色,则表示cosbench工具运行成功。如下图所示:
在首次访问Cosbench Web控制台时,细心的用户会注意到,浏览器会弹出是否保存cosbench默认的用户名和密码。说明在使用web控制台时,cosbench是需要做验证的。可是为什么会自动进行登录呢?默认的用户名密码是怎么定义的呢?
四,Cosbench用户认证
带着疑问,查看cosbench的配置文件,找到如下配置,定义了使用cosbench默认的用户名和密码:
[root@host1 conf]$ cat cosbench-users.xml
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
<role rolename="cosbench"/>
<user username="anonymous" password="cosbench" roles="cosbench"/>
</tomcat-users>
用户名密码定义之后,Cosbench是如何获取的呢?继续查看代码,cosbench在启动时会调用脚本顺序如下:
查看conf目录下的controller-tomcat-server.xml文件,指定了web访问的用户名密码信息。
[root@host1 conf]$ cat controller-tomcat-server.xml
<Server>
<Service name="Catalina">
<Connector port="19088" protocol="HTTP/1.1" />
<Engine name="Standalone" defaultHost="0.0.0.0">
<Realm className="org.apache.catalina.realm.MemoryRealm"
pathname="./conf/cosbench-users.xml"/>
<Host name="0.0.0.0" unpackWARs="false" autoDeploy="false"
liveDeploy="false" deployOnStartup="false" xmlValidation="false"
xmlNamespaceAware="false" />
</Engine>
</Service>
</Server>
指定了用户名密码,在执行任务时,cosbench又是如何获取这些认证信息的呢?根据第二章节的介绍,提交任务其实就是后台调用了cli.sh中的submit操作。于是可以分析cli.sh的代码发现,username和password两个参数默认值为空,在usage()中也介绍了,当参数为空时,默认使用anonymous和cosbench。正好和controller-tomcat-server.xml文件中指定的一致。
address=127.0.0.1:19088
username="" ------------------------默认为空
password="" ------------------------默认为空
usage()
{
echo
echo "Usage: $0 <action: submit|cancel|info> <parameter> <web username:password@ip:port>"
echo " - action:"
echo " - <submit> <configuration file>: submit configuration and start workload"
echo " - <cancel> <workload id>: cancel workload"
echo " - <info>: check status"
echo " - <web username:password@ip:port> anonymous:cosbench@127.0.0.1:19088 by default"
echo
}
五,安全加固
通过第四章节的分析得知,如果在内部集群环境上使用Cosbench进行对象存储的测试,会使用默认的用户名和密码,而且还是匿名用户,这样会给集群带来很大的安全隐患,因此在内部使用时,建议修改Cosbench Web页面访问的用户认证信息。操作如下:
1. 修改Cosbench conf目录下的cosbench-users.xml配置文件中的用户名和密码,满足密码格式要求即可
2. 修改Cosbench 目录下的cli.sh中username和password两个参数的值
3. 重启Cosbench Controller服务
4. 重新访问Cosbench Web页面。
5. 输入正确的用户名和密码信息,即可登录到第三章节展示的Web页面。
至此,便完成了Cosbench的用户名密码修改,为了加强安全,建议将Cosbench的访问信息进行单独设置。