1. 测试简介
InfluxDB是一个由InfluxData开发的开源时序型数据。它由Go写成,着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。
influxdb官方提供了两款测试工具influx-stress和influxdb-comparisons。其中influx-stres用于写入测试,influxdb-comparisons用于查询测试。
2.测试环境说明
- 服务器配置
鲲鹏920/64
配置 | 型号 |
---|---|
CPU | Kunpeng 920-6426 x2 |
主板型号 | TaiShan 200(Model 2280) |
内存 | Samsung M393A4K40CB2-CTD DDR4 SDRAM 2666MT/s 32G x8 共 256G |
硬盘 | |
网卡 |
- 操作系统
Kylin Linux Advanced Server release V10 (Tercel) - Influxdb版本
2.1.1
3. 测试过程
3.1 方案
使用两台服务器,一台安装测试工具作为客户机,另一台安装influxdb作为服务机,在客户机上运行测试工具,对服务机进行压测。观察测试期间服务机的CPU、内存、网络IO和磁盘IO的消耗情况,并记录测试结果。
3.2 步骤
- 服务机上安装Influxdb
wget https://dl.influxdata.com/influxdb/releases/influxdb2-2.1.1-linux-arm64.tar.gz
tar xvzf influxdb2-2.1.1-linux-arm64.tar.gz
mv influxdb2-2.1.1-linux-arm64/influxd /usr/local/bin/
上述方式需翻墙,如果翻不了,可通过docker hub下载
docker run --rm -d --name influxdb influxdb:2.1.1
docker cp influxdb:/usr/local/bin/influxd /usr/local/bin/
docker cp influxdb:/usr/local/bin/influx /usr/local/bin/
docker rm -f influxdb
- 服务机上配置并启动服务
#执行influxd daemon
influxd --http-bind-address :8089
- 初始化influxdb
#设置初始用户名/密码为greatwall/greatwall
curl -d'{"username":"greatwall","password":"greatwall","org":"greatwall","bucket":"greatwall"}' -H Content-Type=application/json -X POST http://localhost:8089/api/v2/setup
返回结果如下
{
"user": {
……
},
"bucket": {
……
},
"org": {
……
},
"auth": {
"id": "08a2e6b2da551000",
"token": "IU3-q4TSkmAuzz2TRVnwy1na1jpDFRZnqZPeOlZ0UiBsaxwiOKscSHVdghZT42Q1292Px2TOWbhXLTpBWQW4fg==",
……}
}
请记录auth.token信息以用于后续测试
export TOKEN=IU3-q4TSkmAuzz2TRVnwy1na1jpDFRZnqZPeOlZ0UiBsaxwiOKscSHVdghZT42Q1292Px2TOWbhXLTpBWQW4fg==
- 客户机上安装测试工具
需要使用golang工具安装,可以使用golang容器
a、 安装docker
yum install docker -y
systemctl start docker
b、 安装influx-stress、influxdb-comparisons
docker run -it --name golang --rm -v /usr/local/bin:/go/bin golang #进入golang容器
export GOPROXY=goproxy.cn #设置国内go加速
go get -v github.com/influxdata/influx-stress/cmd/... #安装influx-stress
go install github.com/influxdata/influxdb-comparisons/cmd/bulk_data_gen@latest github.com/influxdata/influxdb-comparisons/cmd/bulk_load_influx@latest github.com/influxdata/influxdb-comparisons/cmd/bulk_query_gen@latest github.com/influxdata/influxdb-comparisons/cmd/query_benchmarker_influxdb@latest #安装influxdb-comparisons
exit #退出容器
- 配置influx
influx config create --host-url http://10.47.74.21:8089 --token ${TOKEN} --org=greatwall -a -n default #创建influx配置文件
#由于测试是使用influx api v1进行测试的,需要将bucket和db进行映射,其中写入测试使用bucket为stress,映射的数据库stress;查询测试使用的bucket为greatwall,映射的数据库为benchmark_db
influx bucket create -n stress #创建stress bucket
influx bucket list #查看bucket stress \greatwall 的bucket_id
influx v1 dbrp create --db stress --rp stress_rp --bucket-id 15168e85f964b22b --default -o greatwall #将bucket stress映射db stress
influx v1 dbrp create --db benchmark_db --rp benchmark_rp --bucket-id 7492ae971781e8de --default -o greatwall #将bucket greatwall映射db benchmark_db
influx v1 auth create --username greatwall --password greatwall -o greatwall --write-bucket 15168e85f964b22b 创建v1 auth账号,用于influx-stress写入测试,此处的write-bucket为stress的bucket-id
- 运行influx-stress写入测试
influx-stress insert --pps 200000 -r 120s --host http://10.47.74.21:8089 --user greatwall --pass greatwall --create ""
–pps表示Points Per Second (default 200000)
-r 表示测试时间
输出结果如下:
Using point template: ctr,some=tag n=0i <timestamp>
Using batch size of 10000 line(s)
Spreading writes across 100000 series
Throttling output to ~200000 points/sec
Using 20 concurrent writer(s)
Running until ~18446744073709551615 points sent or until ~1m0s has elapsed
Write Throughput: 199996
Points Written: 12000000
- 运行influx-comparisons查询测试
生成测试数据
bulk_data_gen|sed '$d' | influx write -b greatwall #导入数据,忽略最后一条报错数据
生成查询语句并执行查询测试
bulk_query_gen -query-type "1-host-1-hr" -queries 100000 |query_benchmarker_influxdb -urls http://localhost:8089 -organization greatwall -token ${TOKEN} -use-compatibility -workers 5 #生成查询请求并执行查询测试
bulk_query_gen参数说明
-queries 表示生成的查询请求数
query_benchmarker_influxdb参数说明
-workers 表示并发数
-benchmark-duration 表示测试持续时间
输出如下:
{“InfluxDB (InfluxQL) max cpu, rand 1 hosts, rand 1h0m0s by
1m”:{“count”:100000,“max”:5336.399523,“maxRate”:0.1873922662068269,“mean”:194.88866605861745,“meanRate”:5.131134715136415,“min”:2.259024,“minRate”:442.6690464554604,“sum”:19488.866605862047},“all
queries”:{“count”:100000,“max”:5336.399523,“maxRate”:0.1873922662068269,“mean”:194.88866605861745,“meanRate”:5.131134715136415,“min”:2.259024,“minRate”:442.6690464554604,“sum”:19488.866605862047},“batchSize”:1,“queryRate”:512.8993121300042,“totalQueries”:100000,“wallClockTime”:194.970041166,“workers”:100}2021/12/31
14:20:21 wall clock time: 194.970041sec
4. 测试结果
写入测试
Points Per Second(发起请求) | Write Throughput(points/s)(数据库实际处理结果) | cpu使用率 |
---|---|---|
200000 | 199998 | 9% |
400000 | 395849 | 20% |
600000 | 490658 | 13% |
800000 | 494191 | 15% |
800000 | 502194 | 14% |
查询测试
查询请求总数10w
查询并发数 | 单个请求平均耗时ms | 总耗时ms |
---|---|---|
1 | 2.00 | 203.92 |
5 | 2.52 | 51.46 |
10 | 3.17 | 32.42 |
20 | 5.05 | 25.67 |
50 | 12.56 | 25.26 |
100 | 26.02 | 26.07 |
结果分析
本次测试的结果是未调优情况下的基准测试结果数据,在未调优情况下,无法充分利用服务器的cpu(cpu使用率真在20%以下),对于使用多cpu核心的arm服务器,应用进程存在跨numa节点的cpu调度、内存共享等问题,可以通过numactl工具对进程进行cpu绑定。后续将进行Influxdb的调优测试。