influxdb性能测试(arm64环境)

1. 测试简介

InfluxDB是一个由InfluxData开发的开源时序型数据。它由Go写成,着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。
influxdb官方提供了两款测试工具influx-stress和influxdb-comparisons。其中influx-stres用于写入测试,influxdb-comparisons用于查询测试。

2.测试环境说明

  1. 服务器配置
    鲲鹏920/64
配置型号
CPUKunpeng 920-6426 x2
主板型号TaiShan 200(Model 2280)
内存Samsung M393A4K40CB2-CTD DDR4 SDRAM 2666MT/s 32G x8 共 256G
硬盘
网卡
  1. 操作系统
    Kylin Linux Advanced Server release V10 (Tercel)
  2. Influxdb版本
    2.1.1

3. 测试过程

3.1 方案

使用两台服务器,一台安装测试工具作为客户机,另一台安装influxdb作为服务机,在客户机上运行测试工具,对服务机进行压测。观察测试期间服务机的CPU、内存、网络IO和磁盘IO的消耗情况,并记录测试结果。

3.2 步骤

  1. 服务机上安装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
  1. 服务机上配置并启动服务
#执行influxd daemon
influxd --http-bind-address :8089
  1. 初始化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==
  1. 客户机上安装测试工具
    需要使用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 #退出容器
  1. 配置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
  1. 运行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
  1. 运行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使用率
2000001999989%
40000039584920%
60000049065813%
80000049419115%
80000050219414%

查询测试

查询请求总数10w

查询并发数单个请求平均耗时ms总耗时ms
12.00203.92
52.5251.46
103.1732.42
205.0525.67
5012.5625.26
10026.0226.07

结果分析

本次测试的结果是未调优情况下的基准测试结果数据,在未调优情况下,无法充分利用服务器的cpu(cpu使用率真在20%以下),对于使用多cpu核心的arm服务器,应用进程存在跨numa节点的cpu调度、内存共享等问题,可以通过numactl工具对进程进行cpu绑定。后续将进行Influxdb的调优测试。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值