1. 程式人生 > >利用雅虎ycsb對cassandra做性能測試

利用雅虎ycsb對cassandra做性能測試

cto ted eml form 1.0 dev 用戶控制 宋體 password

準備:

環境:

兩臺虛擬機: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.1cassandra並執行以下腳本:

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做性能測試