• ceph性能测试


    微信公众号:运维开发故事,作者:wanger

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

    测试单磁盘写入性能

    清空页面缓存

    echo 3 > /proc/sys/vm/drop_caches
    
    
    • 1
    • 2

    使用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   
    
    
    • 1
    • 2

    重复执行后取平均值,我这边没有绕过内核缓存,所以测试出来的结果会偏高,(ubuntu系统执行dd绕过内核缓存的参数好像不支持。)图片接下来可以测试单个节点上所有的osd写入性能 我这边每台宿主机上osd只有一个,所以数据与上面相同

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

    osd单盘读性能测试

    清空页面缓存

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

    图片接下来可以测试单个节点上所有的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 
    
    
    • 1
    • 2
    • 3

    网络基线性能

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

    apt install iperf
    
    
    • 1
    • 2

    node1节点作为server,使用6900端口图片node2节点作为client图片由于我这边是千兆网络,所以实际网络带宽不是很高,生产环境还是要用万兆网络进行连接

    rados bench基准测试

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

     rados bench -p libvirt-pool 10 write --no-cleanup
    
    
    • 1
    • 2

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

    rados bench -p libvirt-pool 10 seq
    
    
    • 1
    • 2

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

    rados bench -p libvirt-pool 10 rand
    
    
    • 1
    • 2

    图片rados bench的语法如下

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

    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
    
    
    • 1
    • 2

    命令行格式及参数说明:

    rados -p  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,单位秒
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

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

    块设备基准测试

    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
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

    mkfs.xfs /dev/rbd2        
    mkdir -p /mnt/289  
    mount /dev/rbd2 /mnt/289   
    df -h /mnt/289
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    对289写入5G大小的测试

    rbd bench-write libvirt-pool/289 --io-total 5368709200
    
    
    • 1
    • 2

    图片rbd bench-write 的语法为:

    rbd bench-write 
    
    
    • 1
    • 2
    --io-size:写入大小,单位 byte,默认4M;
    --io-threads:线程数,默认 16;
    --io-total:写入总字节,单位为字节,默认 1024M;
    --io-pattern :写模式,默认为 seq 即顺序写;
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

    安装fio

    apt install fio -y
    
    • 1

    写入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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    启动fio测试

    fio write.fio
    
    
    • 1
    • 2

    图片

    image.png

    公众号:运维开发故事

    github:https://github.com/orgs/sunsharing-note/dashboard

    博客**:https://www.devopstory.cn**

    爱生活,爱运维

    我是wanger,《运维开发故事》公众号团队中的一员,一线运维农民工,这里不仅有硬核的技术干货,还有我们对技术的思考和感悟,欢迎关注我们的公众号,期待和你一起成长!

    图片

  • 相关阅读:
    基于springboot实现疫苗接种管理系统项目【项目源码】计算机毕业设计
    C++使用openssl对AES-256-ECB PKCS7 加解密
    06.封装为组件库
    【XInput】游戏手柄模拟鼠标动作
    IDEA2022.1创建maven项目,规避idea2022新建maven项目卡死,无反应问题
    k8s集群安装网络插件calico常见问题
    一步步制作下棋机器人之 coppeliasim进行Scara机械臂仿真与python控制
    并发之多把锁和活跃性
    ElasticSearch 环境安装
    Vue 3 基础(二)基础 1
  • 原文地址:https://blog.csdn.net/wanger5354/article/details/126525037