0. 启动Cassabdra集群
先启动种子节点worker1、worker2
# 1. 先在worker1、worker2两个种子节点上执行 cassandra -R # 2. 在其他节点master上执行 cassandra -R # 查各节点运行情况 nodetool status
1. 准备
在运行测试之前,必须先运行cassrandra客户端手动创建供ycsb使用的数据库和表。
数据库名叫ycsb,表名叫usertable,按照上面的参考进行。
连接CQLSH
cqlsh是一个命令行的shell,通过CQL与Cassandra交互。
cqlsh 192.168.92.159 9042
1.1 创建数据库
使用cassandra的cqlsh创建keyspace和cloumn family
create keyspace ycsb WITH REPLICATION = {'class' : 'SimpleStrategy', 'replication_factor': 3 };
注意:数据复制有两种策略:
SimpleStrategy
:仅用于单个数据中心和一个机架。如果您打算使用多个数据中心,请使用NetworkTopologyStrategy
。
NetworkTopologyStrategy
:强烈建议用于大多数部署,因为未来扩展需要扩展到多个数据中心时更容易。
replication_factor:复制因子。如果class是SimpleStrategy,则是必需的; 否则,不使用。多个节点上数据的复制数量。
复制因子1意味着一个节点上每行只有一个副本。复制因子2意味着每行的两个副本,其中每个副本位于不同的节点上。所有复制品都同样重要; 没有主要或主要副本。作为一般规则,复制因子不应超过群集中的节点数量。
1.2 创建表
切换到ycsb数据库
USE ycsb;
在ycsb中创建表
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);
create table test_table ( y_id varchar primary key, id int, project varchar, category varchar, date varchar, area varchar, department varchar, level varchar, code bigint);
Cassandra CQL数据类型
数据类型 | 常量 | 描述 |
ascii | strings | 表示ASCII字符串 |
bigint | bigint | 表示64位有符号长 |
blob | blobs | 表示任意字节 |
Boolean | booleans | 表示true或false |
counter | integers | 表示计数器列 |
decimal | integers, floats | 表示变量精度十进制 |
double | integers | 表示64位IEEE-754浮点 |
float | integers, floats | 表示32位IEEE-754浮点 |
inet | strings | 表示一个IP地址,IPv4或IPv6 |
int | integers | 表示32位有符号整数 |
text | strings | 表示UTF8编码的字符串 |
timestamp | integers, strings | 表示时间戳 |
timeuuid | uuids | 表示类型1 UUID |
uuid | uuids | 表示类型1或类型4 |
UUID | ||
varchar | strings | 表示uTF8编码的字符串 |
varint | integers | 表示任意精度整数 |
2. 测试
cd /home/liupc/ycsb/ycsb-0.14.0
2.1 单线程测试
使用默认的workloads/workloada进行测试
2.1.1 加载数据
./bin/ycsb.sh load cassandra2-cql -P workloads/workloada -p hosts=192.168.92.159 -p columnfamily=test_table -p recordcount=1000 -s > outputLoada.txt
命令参数说明:
ycsb [command] [database] [options]
- command选项:load:载入测试数据。run:执行测试过程。shell:交互模式。
- database选项:指定测试的数据库场景,例如mongodb, cassandra, memcached等。
- options选项:
- P file :指定workload文件,相对路径或者绝对路径。
- cp path :指定额外的Java classpath。
- jvm-args args :指定额外的JVM参数。
- p key=value :设置ycsb配置项,会覆盖workload文件的配置项。
- s :运行时的中间状态打印到stderr中。
- target n :表示1s中总共的操作次数。
- threads n :设置ycsb client的并发测试线程数,默认是1,单线程。
2.1.2 执行测试
./bin/ycsb.sh run cassandra2-cql -P workloads/workloada -p hosts=192.168.92.159 -p columnfamily=test_table -p recordcount=1000 -s > outputRun.txt
返回字段Return=OK,则表示测试完成,取“[OVERALL],Throughput”值作为测试指标。
2.1.3 测试结果
测试结果分析
- RunTime(ms): 数据加载所用时间,单位毫秒(ms)
- Throughput(ops/sec): 吞吐量,即ops(每秒操作次数)
- Operations: 操作的总次数
- AverageLatency(us): 平均响应延时,单位是微秒(us)
- MinLatency(us): 最小响应时间,单位是微秒(us)
- MaxLatency(us): 最大响应时间,单位是微秒(us)
- 95thPercentileLatency(us): 95%的操作延时,单位是微秒(us)
- 99thPercentileLatency(us): 99%的操作延时,单位是微秒(us)
- Return=OK: 成功返回数,这个值不符合测试要求,则证明测试失败.
- [READ]开头的代表只读的操作记录,其他还有例如[UPDATE]等
2.2 多线程测试
- 编辑连接cassandra的配置文件
cassandra.properties
vim cassandra.properties
cassandra.properties
文件内容
hosts = 192.168.92.159,192.168.92.160,192.168.92.161 port = 9042 cassandra.keyspace = ycsb # cassandra.username = ershixiong #cassandra用户名 # cassandra.password = 111111 #cassandra密码 cassandra.readconsistencylevel = SERIAL cassandra.writeconsistencylevel = ANY cassandra.maxconnections = 100 cassandra.connecttimeoutmillis = 1000000000 cassandra.readtimeoutmillis = 1000000000
- YCSB参数
- Cassandra参数
- YCSB测试包括两个阶段,Load the data 和 Run the workload
load阶段:
bin/ycsb.sh load cassandra-cql -P workloads/workloada -P cassandra.properties -p columnfamily=test_table -s -threads 4 > load_4threads.txt
run阶段:
bin/ycsb.sh run cassandra-cql -P workloads/workloada -P cassandra.properties -p columnfamily=test_table -s -threads 4 > run_4threads.txt
ycsb [command] [database] [options]
- 数据接口名为cassandra-cql
- 加载ycsb的配置:workloads/workloada
- 加载cassandra的配置:cassandra.properties
- 加载columnfamily:名称为test_table
- -threads 4:4个线程执行
这里可以将
workloads/workloada
的参数写入cassandra.properties
中,这样就可以只加载一个文件了。