ceph性能测试

简介: ceph性能测试

在将Ceph集群用于生产工作之前,应该首先对它进行基准测试。基准测试提供关于群集在读、写、延迟和其他工作负载期间执行情况的大致结果。在进行真正的基准测试之前,最好通过测量连接到群集节点的硬件(如磁盘和网络)的性能,为预期的最大性能建立一个基准。磁盘性能基线测试将分两步完成。首先,我们将测量单个磁盘的性能,在此之后,将同时测量连接到一个Ceph OSD节点的所有磁盘性能。为了获得磁盘读写性能,我们可以使用dd命令并设置oflag参数以直接绕过磁盘缓存以获得真实的结果。

测试单磁盘写入性能

清空页面缓存

echo 3 > /proc/sys/vm/drop_caches

使用dd编写一个大小为10G的名为deleteme的文件,该文件填充为0/dev/zero作为Ceph OSD安装目录的输入文件,即/var/lib/ceph/osd/cep-0/:

dd if=/dev/zero of=/var/lib/ceph/osd/ceph-0/zero   bs=10G count=1

重复执行后取平均值,我这边没有绕过内核缓存,所以测试出来的结果会偏高,(ubuntu系统执行dd绕过内核缓存的参数好像不支持。)

640.png

接下来可以测试单个节点上所有的osd写入性能 我这边每台宿主机上osd只有一个,所以数据与上面相同

for i in `mount | grep osd | awk '{print $3}'`;   do (dd if=/dev/zero   of=$i/zero bs=10G count=1  &) ; done

osd单盘读性能测试

清空页面缓存

echo 3 > /proc/sys/vm/drop_caches
dd if=/var/lib/ceph/osd/ceph-0/deleteme of=/dev/null bs=10G     count=1 iflag=direct

640.png

接下来可以测试单个节点上所有的osd写入性能 我这边每台宿主机上osd只有一个,所以数据与上面相同

echo 3 > /proc/sys/vm/drop_caches
for i in `mount | grep osd | awk '{print $3}'`;   do (dd if=$i/zero         of=/dev/null bs=10G count=1 &); done

网络基线性能

测试Ceph OSD节点之间的网络的基线性能。需要在Ceph节点上安装了iper包。iperf是一个简单的点对点网络带宽测试器,工作在c/s模型上。要启动网络基准测试,可以在第一个Ceph节点上使用server选项,在第二个Ceph节点中使用client选项执行iperf。安装iperf

apt install iperf

node1节点作为server,使用6900端口

640.png

node2节点作为client

640.png

由于我这边是千兆网络,所以实际网络带宽不是很高,生产环境还是要用万兆网络进行连接

rados bench基准测试

Ceph附带一个称为rados bench的内置基准测试工具,可以在池上测试Ceph集群的性能。rados bench工具支持写入、顺序读取和随机读取基准测试,并且它还允许清理临时基准数据。接下来我们对libvirt-pool池进行写10秒的测试,--no-cleanup写完之后不清里测试数据,后面的测试会用到这些测试数据

rados bench -p libvirt-pool 10 write --no-cleanup

640.png

对libvirt-pool池进行顺序读取的测试

rados bench -p libvirt-pool 10 seq

可以看到实际用了不到十秒的时间就已经读完了测试数据,原因就是读操作比写操作快,测试写数据用了十秒,度相同的数据肯定用不到十秒的

640.png

随机读取数据测试

rados bench -p libvirt-pool 10 rand

640.png

rados bench的语法如下

rados bench -p <pool_name> <seconds> <write|seq|rand> -b <block size> -t  --no-cleanup
-p:  -p或-poo指定池名.
<seconds>:测试时间(以秒为单位)。
<writelseqlrand>:测试类型,例如写入、顺序读取或随机读取。
-b: 块大小,默认情况下块大小为4M。
-t: 并发线程数;默认值为16
--no-clean up:由rados工作台写入池的临时数据,不被清除。当这些数据与顺序读取或随机读取一起使用时,它们将被用于读取操作。默认情况下数据会清理。

RADOS load-gen

rados load-gen 是CEPH提供的另一个测试工具,  像它的命名一样,rados load-gen 工具能用来在Ceph cluster上生成负载和用于模拟高负载场景。

rados -p libvirt-pool load-gen --num-objects 200 --min-object-size 4M --max-object-size 8M --max-ops 10 --read-percent 0 --min-op-len 1M --max-op-len 4M --target-throughput 2G --run-length 20

命令行格式及参数说明:

rados -p <pool-name> load-gen
--num-objects: 生成测试用的对象数,默认 200
--min-object-size: 测试对象的最小size,默认 1KB,单位byte
--max-object-size: 测试对象的最大size,默认 5GB,单位byte
--min-ops: 最小IO操作数,相当于iodepth
--max-ops: 最大IO操作数,相当于iodepth
--min-op-len: 压测IO的最小operation size,默认 1KB,单位byte
--max-op-len: 压测IO的最大operation size,默认 2MB,单位byte
--max-backlog: 一次提交IO的吞吐量上限,默认10MB/s (单位MB)
--percent:  读操作所占的百分百
--target-throughput: 目标吞吐量,默认 5MB/s (单位MB)
--run-length: 运行的时间,默认60s,单位秒

640.png

还可以使用watch ceph-s命令或ceph-w监视集群的读写速度/操作状态;同时,RADOS load-gen将运行,以查看运行情况。

640.png

块设备基准测试

ceph rbd命令行接口提供了一个称为bench-write的选项,这是一个在Ceph Rados Block Device上执行写基准测试操作的工具。可以使用bench-write工具的不通选项来调整块大小,线程数和io模式。首先创建一个块设备并将其映射至ceph客户端

rbd create libvirt-pool/289 --size 10240 --image-feature layering       
rbd info -p libvirt-pool --image 289      
rbd map  libvirt-pool/289  
rbd showmapped

640.png

块设备上创建文件系统并挂载

mkfs.xfs /dev/rbd2        
mkdir -p /mnt/289  
mount /dev/rbd2 /mnt/289   
df -h /mnt/289

对289写入5G大小的测试

rbd bench-write libvirt-pool/289 --io-total 5368709200

640.png


rbd bench-write 的语法为:

rbd bench-write <RBD image name>
--io-size:写入大小,单位 byte,默认4M;
--io-threads:线程数,默认 16;
--io-total:写入总字节,单位为字节,默认 1024M;
--io-pattern <seq|rand>:写模式,默认为 seq 即顺序写;

使用fio对ceph rbd进行基准测试

安装fio

apt install fio -y

写入fio配置文件

vim write.fio
[write-4M]
ioengine=rbd
direct=1   # 排除OS的IO缓存机制的影响
size=5g     # 每个fio进程/线程的最大读写
lockmem=1G   # 锁定所使用的内存大小
runtime=30   #  运行时间
group_reporting   # 多个job合并出报告
numjobs=1
iodepth=32
pool=libvirt-pool
clientname=admin
rbdname=289
rw=write   #读写模式,支持随机读写、顺序读写
bs=4M
filename=/dev/rbd0

启动fio测试

fio write.fio

640.png

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
相关文章
|
搜索推荐 Ubuntu 测试技术
记录一次我做的influxDB性能测试
2018年做了一次influxDB测试,这里记录一下
1478 0
|
10月前
|
监控 测试技术 应用服务中间件
系统性能测试
系统性能测试
115 0
|
测试技术
iozone如何进行分布式性能测试
iozone的一个特性就是可以进行分布式测试,对分布式存储系统进行测试
442 0
|
11月前
|
测试技术 网络安全
性能测试(20)——分布式压测
在使用JMeter进行性能测试时,如果并发数比较大(比如项目需要支持10000并发),单台电脑的(CPU和内存)可能无法支持,这时 可以使用JMeter提供的分布式测试的功能。
243 0
性能测试(20)——分布式压测
|
SQL 存储 并行计算
ClickHouse性能测试
ClickHouse性能测试
248 0
|
测试技术 网络安全 对象存储
如何对minio进行性能测试和分析
为了更好的评估minio对象存储的性能,我们需要引用一些测试工具对minio cluster进行性能分析。这里我们主要使用minio client中的speedtest还有warp作为性能分析工具。
4401 0
如何对minio进行性能测试和分析
|
存储 SQL 关系型数据库
记一次 ClickHouse 性能测试
本文将对比 MySQL、InfluxDB、ClickHouse 在千万数据量下的写入耗时、聚合查询耗时、磁盘占用等各方面性能指标,并详细记录了测试全过程。
495 0
记一次 ClickHouse 性能测试
|
存储 SQL 缓存
性能测试--性能测试数据准备
关于如何准备性能测试数据,相信不少性能测试人员也踩过不少坑:比如数据量不足,导致性能表现非常好,忽略了一些潜在性能问题;数据分布不合理,导致测试结果与线上差异较大,又要推到重来。经过n多次被坑之后,总结下经验。我们把测试数据准备分为两类数据:铺底数据和参数化数据。
527 0
|
SQL 监控 Oracle
性能测试--性能测试概念、性能测试主流工具
一般来说,性能是一种指标,表明软件系统或构件对其及时性要求的符合程度;其次,性能是软件产品的一种特性,可以用时间来进行度量。性能的及时性用响应时间或吞吐量来衡量。响应时间是指服务器对请求作出响应所需要的时间。
261 0
性能测试--性能测试概念、性能测试主流工具
|
测试技术 编译器 Python
性能专题:Locust工具实战之创建性能测试
性能专题:Locust工具实战之创建性能测试
180 0
性能专题:Locust工具实战之创建性能测试