上一篇文章里,我们发现cosbench 0.4.2版本在CentOS 7 上运行有问题,于是我们换成了0.4.2.c4。但是,0.4.2.c4还是有问题。


我简单地根据我的环境,修改了s3-conf-sample.xml,修改后的xml文件如下:

<?xml version="1.0" encoding="UTF-8" ?>
<workload name="s3-hwubai-yunlong-1" description="I am trying to make cosbench work">
<storage type="s3" config="accesskey=1_s3_accid;secretkey=u5SPrzbM4tZdT0zADF0JfVeLA9d2;endpoint=http://10.119.119.119:9020/bkt1" />
<workflow>
<workstage name="init">
<work type="init" workers="1" config="cprefix=bucket;containers=r(1,1)" />
</workstage>
<workstage name="prepare">
<work type="prepare" workers="1" config="cprefix=bucket;containers=r(1,2);objects=r(1,10);sizes=c(64)KB" />
</workstage>
<workstage name="main">
<work name="main" workers="1" runtime="120">
<operation type="write" ratio="80" config="cprefix=bucket;containers=u(1,2);objects=u(11,20);sizes=c(64)KB" />
<operation type="read" ratio="20" config="cprefix=bucket;containers=u(1,2);objects=u(1,10)" />
</work>
</workstage>
<workstage name="cleanup">
<work type="cleanup" workers="1" config="cprefix=bucket;containers=r(1,2);objects=r(1,20)" />
</workstage>
<workstage name="dispose">
<work type="dispose" workers="1" config="cprefix=bucket;containers=r(1,2)" />
</workstage>
</workflow>
</workload>



测试的结果呢,写操作可以进行,存储上的确看到了创建出来的对象,但是读操作总是报错:

2020-06-04 03:55:28,335 [ERROR] [AbstractOperator] - worker 3 fail to perform operation bucket1/myobjects7

com.amazonaws.AmazonClientException: Unable to verify integrity of data download.  Client calculated content hash didn't match hash calculated by Amazon S3.  The data may be corrupt.

     at com.amazonaws.services.s3.internal.DigestValidationInputStream.validateMD5Digest(DigestValidationInputStream.java:79)

     at com.amazonaws.services.s3.internal.DigestValidationInputStream.read(DigestValidationInputStream.java:61)

     at com.amazonaws.internal.SdkFilterInputStream.read(SdkFilterInputStream.java:72)

     at com.amazonaws.services.s3.model.S3ObjectInputStream.read(S3ObjectInputStream.java:155)

     at com.amazonaws.services.s3.model.S3ObjectInputStream.read(S3ObjectInputStream.java:147)

     at com.intel.cosbench.driver.operator.Reader.copyLarge(Reader.java:120)

     at com.intel.cosbench.driver.operator.Reader.doRead(Reader.java:92)

     at com.intel.cosbench.driver.operator.Reader.operate(Reader.java:69)

     at com.intel.cosbench.driver.operator.AbstractOperator.operate(AbstractOperator.java:76)

     at com.intel.cosbench.driver.agent.WorkAgent.performOperation(WorkAgent.java:197)

     at com.intel.cosbench.driver.agent.WorkAgent.doWork(WorkAgent.java:177)

     at com.intel.cosbench.driver.agent.WorkAgent.execute(WorkAgent.java:134)

     at com.intel.cosbench.driver.agent.AbstractAgent.call(AbstractAgent.java:44)

     at com.intel.cosbench.driver.agent.AbstractAgent.call(AbstractAgent.java:1)

     at java.util.concurrent.FutureTask.run(FutureTask.java:266)

     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

     at java.lang.Thread.run(Thread.java:748)


通过搜索,找到并验证了下面的解决方案:

  1. 在所有的controller,driver的角色上,都运行stop-all.sh 停止 cosbench 进程(controller, drivers)
  2. 编辑 cosbench-start.sh 文件,找到java启动命令行参数, 增加"-Dcom.amazonaws.services.s3.disableGetObjectMD5Validation=true" 关闭S3的MD5校验功能
  3. 在所有的角色上start-all.sh 启动所有的cosbench processes.

这个问题解决了。

尝试在CentOS 7上启动cosbench遭遇的一些问题 之二_java


=======================