准备:

环境:

两台虚拟机: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

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

  1. Cassandra配置多节点集群以及使用雅虎YCSB压测Cassandra 3.11

    这几天在搭Cassandra集群以及对Cassandra的性能测试,步骤还挺多,记录一下. 关于Caaandra在服务器上配置多节点集群,可以参考一下文章: http://blog.csdn.net/ ...

  2. 用BenchmarkDotNet给C#程序做性能测试

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:用BenchmarkDotNet给C#程序做性能测试.

  3. 针对C#程序做性能测试的一些基本准则

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:针对C#程序做性能测试的一些基本准则.

  4. 京东无人超市的成长之路 如何利用AI技术在零售业做产品创新?

    随着消费及用户体验的需求升级.人货场的运营效率需求提升.人工智能技术的突破以及零售基础设施的变革等因素共同推动了第四次零售革命的到来,不仅在国内,国外一线巨头互联网亚马逊等企业都在研发无人驾驶.无人超 ...

  5. sysbench的安装和做性能测试

    sysbench的安装和做性能测试 http://imysql.cn/node/312 sysbench是一个模块化的.跨平台.多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况. ...

  6. Jmeter工具做性能测试 常见的错误汇总

    在Win机器上用Jmeter做性能测试,汇总下我自身遇到的错误和解决方案 java.net.BindException: Address already in use: JVM_Bind 原因分析:压 ...

  7. 利用基准电压效正Vcc做参考电压的ADC采样计算方法

    利用基准电压效正Vcc做参考电压的ADC采样计算方法

  8. 使用Jmeter做性能测试

    上周刚刚做完项目的性能测试.今天整理和总结一下,随便分享给大家. 首页呢,测试前,我们是有明确的性能指标的,而且测试环境和数据都已准备好,业务分析.场景分析大家根据自己的项目系统进行分析设计,我们选用 ...

  9. UIView封装动画--iOS利用系统提供方法来做转场动画

    UIView封装动画--iOS利用系统提供方法来做转场动画 UIViewAnimationOptions option; if (isNext) { option=UIViewAnimationOpt ...

随机推荐

  1. Linux_LVM、RAID_RHEL7

    目录 目录 LVM逻辑卷管理 把物理分区初始化为物理卷 创建卷组 建立逻辑卷 格式化 挂载 vg拓展操作 lv扩展操作 RAID RAID 类型 RAID0条带化 RAID1镜像 RAID5条带冗余 ...

  2. shell脚本批量开启防火墙端口

    # 注意:shell脚本批量执行命令,不能只写一个函数,然后把所有命令复制进去,之前试过这样是不行的.必须要有一个判断命令执行成功与否的语句 # 简单的命令可以不加结果判断符号,但是遇到解压包.sed ...

  3. 【算法与数据结构】并查集 Disjoint Set

    并查集(Disjoint Set)用来判断已有的数据是否构成环. 在构造图的最小生成树(Minimum Spanning Tree)时,如果采用 Kruskal 算法,每次添加最短路径前,需要先用并查 ...

  4. FreeMarker开发-数据模型

    FreeMarker用于处理模板的数据模型是哈希表,也就是一个树状结构的name-value对.如下: (root)|+- string="string"| +- map| || ...

  5. 【MM系列】SAP 交货单屏幕增强

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP 交货单屏幕增强   前言部分 ...

  6. Canvas入门04-绘制矩形

    使用的API: ctx.strokeRect(x, y, width, height) 给一个矩形描边 ctx.fillRect(x, y, width, height) 填充一个矩形 ctx.cle ...

  7. 简单记事本的基本实现&十四周总结

    JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口 ...

  8. jmeter正则提取器提取指定位置的字符串

    1.需求:提取登录后的凭证ticket供系统其他接口调用 2.登录接口返回的格式如下: { "ret_code":0, "ret_msg":"logi ...

  9. webpack e6转化成es5 配置方法

    方法一: https://www.babeljs.cn/setup#installation 按照babel官方的配置配 方法二: https://www.jianshu.com/p/ce28cedd ...

  10. 通过编写串口助手工具学习MFC过程——(八)遇到的一些问题

    通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...