利用雅虎ycsb对cassandra做性能测试

准备:

环境:

两台虚拟机:ip:192.168.138.128/129;配置:2核4G;

版本:apache-cassandra-3.10

      ycsb-cassandra-binding-0.13.0-SNAPSHOT

系统参数优化:

1 时钟同步-----非常重要,涉及到集群内数据同步问题

在crontab中加上:

*/1 * * * * /usr/sbin/ntpdate time.nist.gov

2  关闭cpu变频控制

for CPUFREQ in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governordo

[ -f $CPUFREQ ] || continue

echo -n performance > $CPUFREQdone

3 在/etc/sysctl.conf增加配置文件:

net.core.rmem_max = 16777216

net.core.wmem_max = 16777216

net.core.rmem_default = 16777216

net.core.wmem_default = 16777216

net.core.optmem_max = 40960

net.ipv4.tcp_rmem = 4096 87380 16777216

net.ipv4.tcp_wmem = 4096 65536 16777216

vm.max_map_count = 1048575

vm.swappiness=0

4 关闭zone_reclaim_mode

$ echo 0 > /proc/sys/vm/zone_reclaim_mode

5 增加cassandra用户控制 :/etc/security/limits.d/cassandra.conf

<cassandra_user> - memlock unlimited

<cassandra_user> - nofile 100000

<cassandra_user> - nproc 32768

<cassandra_user> - as unlimited

6 redhat下需要修改/etc/security/limits.d/90-nproc.conf:

cassandra_user - nproc 32768

确认参数是否优化可以看cassandra进程号相关文件:

$ cat /proc/pid/limits

关闭使用swap分区:

swapoff --all

安装配置

不再赘述,直接解压放到指定地点就好了。需要注意的是在cassandra.yaml中需要更改以下配置:

cluster_name: ‘mycluster‘

data_file_directories:

- /data/cassandra/data

commitlog_directory: /data/cassandra/commitlog

saved_caches_directory: /data/cassandra/saved_caches

- seeds: "127.0.0.1,192.168.138.128,192.168.138.129"

listen_address: 192.168.138.128

rpc_address: 192.168.138.128

安装配置ycsb:

从github中下载最新版本的ycsb进行编译:

mvn -pl com.yahoo.ycsb:cassandra-binding -am clean package

(注意:mvn要用3版本,同时需要在编译本机环境开启一个127.0.0.1的cassandra并执行以下脚本:

CREATE KEYSPACE ycsb WITH replication = {‘class‘: ‘SimpleStrategy‘, ‘replication_factor‘: ‘3‘}  AND durable_writes = true;

CREATE TABLE ycsb.usertable (

y_id text PRIMARY KEY,

field0 text,

field1 text,

field2 text,

field3 text,

field4 text,

field5 text,

field6 text,

field7 text,

field8 text,

field9 text

) WITH bloom_filter_fp_chance = 0.01

AND caching = {‘keys‘: ‘ALL‘, ‘rows_per_partition‘: ‘NONE‘}

AND comment = ‘‘

AND compaction = {‘class‘: ‘org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy‘, ‘max_threshold‘: ‘32‘, ‘min_threshold‘: ‘4‘}

AND compression = {‘chunk_length_in_kb‘: ‘64‘, ‘class‘: ‘org.apache.cassandra.io.compress.LZ4Compressor‘}

AND crc_check_chance = 1.0

AND dclocal_read_repair_chance = 0.1

AND default_time_to_live = 0

AND gc_grace_seconds = 864000

AND max_index_interval = 2048

AND memtable_flush_period_in_ms = 0

AND min_index_interval = 128

AND read_repair_chance = 0.0

AND speculative_retry = ‘99PERCENTILE‘;

然后解压包:cp /root/YCSB-master/cassandra/target/ycsb-cassandra-binding-0.13.0-SNAPSHOT.tar.gz ~/

如果报相关日志错误则下载:slf4j-1.7.25.tar.gz将相关的Log4j包放置到对应的lib目录下。

配置cassandra.properties:

hosts = 192.168.138.128,192.168.138.129

port = 9042

cassandra.keyspace = usertable

cassandra.username = dd

cassandra.password = 111111

cassandra.readconsistencylevel = ANY

cassandra.writeconsistencylevel = ANY

cassandra.maxconnections = 100

cassandra.connecttimeoutmillis = 1000000000

cassandra.readtimeoutmillis  = 1000000000

配置workload:

  1. #vim workloads/workloada
  2. workload=com.yahoo.ycsb.workloads.CoreWorkload
  3. readallfields=false
  4. readproportion=0.5
  5. updateproportion=0.5
  6. scanproportion=0
  7. insertproportion=0
  8. requestdistribution=zipfian
  9. fieldcount 表示每条数据中的字段数,默认为 10;
  10. fieldlength 表示每个字段的值的长度,默认为 100;
  11. readallfields 域用来标识是否读取所有的所有的字段,取值有 ture 或 false;
  12. readproportion,
  13. updateproportion,
  14. scanproportion,
  15. insertproportion 分别表示该 workload中读、更新、扫描和插入操作占总操作的百分比,这四个值的和为 1;
  16. requestdistribution 表示数据的分布情况,当前支持 uniform,zipfian 和 latest,默认为 uniform;
  17. maxscanlength 域主要为扫描操作定义,定义了最大扫描的记录数量,默认为 1000;
  18. scanlengthdistribution 域也是为扫描操作定义的,为每次扫描的长度定义相应的分布,默认是 uniform;
  19. insertorder 域主要分两种 ordered 和 hashed,默认为 hashed;
  20. operationcount 总共的 operation 数量;
  21. maxexecutiontime 为该 workload 定义了最长的执行时间,单位为 s。
  22. AverageLatency(平均潜伏期)平均潜伏期(average latency):指当磁头移动到数据所在的磁道后,然后等待所要的数据块继续转动(半圈或多些、少些)到磁头下的时间,单位为毫秒(ms)。平均潜伏期是越小越好,潜伏期小代表硬盘的读取数据的等待时间短,这就等于具有更高的硬盘数据传输率。

创建用户结构:

CREATE KEYSPACE usertable WITH replication = {‘class‘: ‘SimpleStrategy‘, ‘replication_factor‘: ‘1‘}  AND durable_writes = true;

  1. create table usertable (y_id varchar primary key,field0 varchar,field1 varchar,field2 varchar,field3 varchar,field4 varchar,field5 varchar,field6 varchar,field7 varchar,field8 varchar,field9 varchar);

执行命令./bin/ycsb load cassandra-cql -P workloads/workloada -P cassandra.properties -p columnfamily=usertable -s -threads 20 > ./writeread-log.log

结果如下:

Datacenter: datacenter1; Host: /192.168.138.128; Rack: rack1

[OVERALL], RunTime(ms), 4974.0

[OVERALL], Throughput(ops/sec), 201.04543626859672

[TOTAL_GCS_Copy], Count, 13.0

[TOTAL_GC_TIME_Copy], Time(ms), 51.0

[TOTAL_GC_TIME_%_Copy], Time(%), 1.0253317249698433

[TOTAL_GCS_MarkSweepCompact], Count, 0.0

[TOTAL_GC_TIME_MarkSweepCompact], Time(ms), 0.0

[TOTAL_GC_TIME_%_MarkSweepCompact], Time(%), 0.0

[TOTAL_GCs], Count, 13.0

[TOTAL_GC_TIME], Time(ms), 51.0

[TOTAL_GC_TIME_%], Time(%), 1.0253317249698433

[CLEANUP], Operations, 200.0

[CLEANUP], AverageLatency(us), 11310.105

[CLEANUP], MinLatency(us), 0.0

[CLEANUP], MaxLatency(us), 2263039.0

[CLEANUP], 95thPercentileLatency(us), 0.0

[CLEANUP], 99thPercentileLatency(us), 1.0

[INSERT], Operations, 1000.0

[INSERT], AverageLatency(us), 230845.253

[INSERT], MinLatency(us), 2180.0

[INSERT], MaxLatency(us), 807423.0

[INSERT], 95thPercentileLatency(us), 659455.0

[INSERT], 99thPercentileLatency(us), 699903.0

[INSERT], Return=OK, 1000

参考资料:http://docs.datastax.com/en/landing_page/doc/landing_page/recommendedSettings.html

http://docs.datastax.com/en/cassandra/3.0/cassandra/tools/toolsCStress.html

http://blog.csdn.net/qianlong4526888/article/details/53747617

时间: 2024-10-01 01:28:53

利用雅虎ycsb对cassandra做性能测试的相关文章

怎么做性能测试--响应时间

做性能测试先要懂性能,响应时间(response time)作为性能测试过程中两大重要指标之一是我们必须关注的. 从用户角度来说,用户最讨厌等待.在大量的处理环境中,超过3秒以上的响应时间将会严重影响工作效率.然而最终用户的感受不仅仅是绝对时间问题,他们对于响应时间的期望是参照以往的经验,而这种期望是相对于他们使用该应用的基准性能.如果使用该应用的当前感受和以往的经验有很大的差别时,抱怨以及需要支持的电话就会成倍地增加.响应时间对于用户来说既有客观成分,也有主观成分. 例(1):对于小说网站来说

如何做性能测试

偶然间看到了阿里中间件Dubbo的性能测试报告,我觉得这份性能测试报告让人觉得做这性能测试的人根本不懂性能测试,我觉得这份报告会把大众带沟里去,所以,想写这篇文章,做一点科普. 首先,这份测试报告里的主要问题如下: 1)用的全是平均值.老实说,平均值是非常不靠谱的. 2)响应时间没有和吞吐量TPS/QPS挂钩.而只是测试了低速率的情况,这是完全错误的. 3)响应时间和吞吐量没有和成功率挂钩. 为什么平均值不靠谱 关于平均值为什么不靠谱,我相信大家读新闻的时候经常可以看到,平均工资,平均房价,平均

如何利用微软本身的库做个数据库客户端的配置

做C/S的朋友一般都有个窗体,用来配置应用的数据库连接语句,那这个窗体我们是自己写好呢还是调用微软现有的,当然这是智者见智,仁者见仁的问题,下面将简单介绍如何利用微软现有的来实现这么一个窗体. 首先我们需要在解决方案中引入如下三个库: 接下来事情会简单到出乎你意料之外,在我们需要打开窗体配置的地方写上如下代码: 1 DataConnectionDialog dialog = new DataConnectionDialog(); 2 //添加数据源列表,可以向窗口中添加自己程序所需要的数据源类型

sysbench的安装和做性能测试

sysbench的安装和做性能测试 http://imysql.cn/node/312 sysbench是一个模块化的.跨平台.多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况. 关于这个项目的详细介绍请看:http://sysbench.sourceforge.net. 它主要包括以下几种方式的测试: 1.cpu性能 2.磁盘io性能 3.调度程序性能 4.内存分配及传输速度 5.POSIX线程性能 6.数据库性能(OLTP基准测试) 目前sysbench主要支持 MyS

【转】在做性能测试之前需要知道什么

最近群里来了很多新朋友,大都是新做测试或准备做测试工作的,见好多新来上来就问关于LoadRunner的使用上的问题.对性能测试的理解也不是太清楚.公司说让他们对系统做个性能测试,他们听说LoadRunner是做性能测试的,在网上找了点了LoadRunner的使用说明就开始对系统下刀了.对于一些大公司的专业性能测试人员来说,这个很可笑,但这是种情况是存在的,我当初也到公司时也这么干的. 那时还真把性能测报告给整出来了,现在看来那报告没有任何意义.虽然,虽然对现在的我来说性能测试也只是只懂皮毛.但还

CentOS7利用DNS和Nginx代理做内网域名解析

1,为了将生产环境和开发区分开,方便开发,将利用DNS和Nginx代理做内网域名解析. 环境要求: 服务器:CentOS7 64位  IP:192.168.1.49 DNS Nginx1.1 客户端:CentOS7 64位 IP:192.168.1.45 Gitlab 2.1,安装DNS服务 [[email protected] ~]# yum install bind bind-bind-libs 2.2,修改/etc/named.conf配置文件 [[email protected] ~]#

看《做性能测试需要知道些什么》

看<做性能测试需要知道些什么>需理解最佳用户数和最大用户数开始性能测试前,需要知道:1.客户的要求 如系统同时满足**用户登录,平均每个用户登录时间不超过**秒2.目前系统的性能 求最大用户数和最佳用户数,系统分析并找到压力点3.系统瓶颈 分析可能对系统造成瓶颈的逻辑业务4.长时间压力下性能状况(强度测试)->内存溢出 测试环境1.硬件 服务器.CPU.内存2.软件 前端.中间件.服务器3.网络环境 寻找系统的压力点 做性能测试之后需要知道些什么->获取"有效的"

想做性能测试不知道怎么选顺手的工具?

原文链接:http://www.51testing.com/html/49/n-3721249.html 前言 当你想做性能测试的时候,你会选择什么样的测试工具呢?是会选择wrk?jmeter?locust?还是loadrunner呢? 今天,笔者将根据自己使用经验,针对jmeter.locust.wrk和loadrunner常用的性能测试工具进行简单介绍和对比.首先,四者基本对比图: 由于loadrunner为商业收费模式,对于公司级测试使用而言涉及到授权问题,因此,本文暂不对loadrunn

使用Student T&#39;test方法做性能测试

性能测试 日常工作中对比函数间的快慢时,最直接的方法就是根据timer:tc/1结果的时间来衡量,比如想知道lists:reverse/1与直接使用自己写的尾递归函数谁更快?最直接的方法就是 -module(test). -export([start/1]). start(Len) -> L = lists:seq(1, Len), Max = 1000, Time1 = benchmark(Max, fun() -> lists:reverse(L) end), Time2 = benchm