CephFS 异常测试

1. Cephfs 异常测试方案

CephFS允许客户端缓存metadata 30s,所以这里测试对MDS stop/start的时间间隔取为:2s,10s,60s。

测试组件测试场景挂载方式测试方法
MDS单MDSfuse/kernel单个MDS挂掉情况 2s/10s/60s IO情况
主从MDS时fuse/kernel单主挂掉情况 2s/10s/60s IO情况
主从MDS时fuse/kernel主从同时挂掉情况 2s/10s/60s IO情况
MON单个MONfuse/kernel单个MON挂掉情况 2s/10s/60s IO情况
所有MONfuse/kernel所有MON挂掉情况 2s/10s/60s IO情况
OSD单个OSDfuse/kernel单个OSD挂掉情况 2s/10s/60s IO情况
集群一半OSDfuse/kernel一半OSD挂掉情况 2s/10s/60s IO情况
集群所有OSD挂掉fuse/kernel所有OSD挂掉情况 2s/10s/60s IO情况

2. 测试环境

  • mon: ceph-xxx-osd01.ys, ceph-xxx-osd02.ys, ceph-xxx-osd03.ys
  • osd: ceph-xxx-osd01.ys, ceph-xxx-osd02.ys, ceph-xxx-osd03.ys
  • mds: ceph-xxx-osd04.ys, ceph-xxx-osd05.ys

3. 测试工具

fio

fio也是我们性能测试中常用的一个工具,详细介绍Google之。

我们测试中固定配置:
-filename=tstfile 指定测试文件的name
-size=20G 指定测试文件的size为20G
-direct=1 指定测试IO为DIRECT IO
-thread 指定使用thread模式
-name=fio-tst-name 指定job name

测试bandwidth时:
-ioengine=libaio/sync
-bs=512k/1M/4M/16M
-rw=write/read
-iodepth=64 -iodepth_batch=8 -iodepth_batch_complete=8

测试iops时:
-ioengine=libaio
-bs=4k
-runtime=300
-rw=randwrite/randread
-iodepth=64 -iodepth_batch=1 -iodepth_batch_complete=1

4. 测试步骤

4.1 MDS

4.1.1 单MDS挂掉

不需要测试,目前都是主从结构。

4.1.2 主从MDS主挂掉

#测试多个文件
#!/bin/bash
while true
do
  curtime=`date --date='0 days ago' +%s`
  fio -filename=/test/$curtime -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=libaio -bs=4m -size=20G -runtime=1 -group_reporting -name=mytest
done
 
#测试单个文件
fio -filename-testfile -size=20G -direct=1 -thread -name=/test/fio-test-name -ioengine=libaio -bs=512k/1M/4M/16M -rw=rw  -write_bw_log=rw -iodepth=64 -iodepth_batch=8 -iodepth_batch_complete=8

4.1.3 结论

挂载方式写入方式故障描述
fuse单个文件停掉主MDS, io会出现稍微的抖动
多个文件停掉主MDS,会发生1-2秒的io夯住
kernel单个文件停掉主MDS, io会出现稍微的抖动
多个文件停掉主MDS,会发生1-2秒的io夯住

单个文件:

2099201-b5f7a0431d4e73be.png
image.png

4.1.4 主从MDS都挂掉

#测试多个文件
#!/bin/bash
while true
do
  curtime=`date --date='0 days ago' +%s`
  fio -filename=/test/$curtime -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=libaio -bs=4m -size=20G -runtime=1 -group_reporting -name=mytest
done
 
#测试单个文件
fio -filename-testfile -size=20G -direct=1 -thread -name=/test/fio-test-name -ioengine=libaio -bs=512k/1M/4M/16M -rw=rw  -write_bw_log=rw -iodepth=64 -iodepth_batch=8 -iodepth_batch_complete=8
 
#18:19:24 fio
#18:19:28 sh mdsstop.sh

4.1.5 结论:

挂载方式写入方式故障描述
fuse单个文件停掉主从MDS,40s左右io夯死
多个文件停掉主从MDS, io立马夯死
kernel单个文件停掉主从MDS,40s左右io夯死
多个文件停掉主从MDS, io立马夯死

单个文件模式:

2099201-d61d5b8fe18ea85f.png
image.png

4.2 MON

4.2.1 单个MON挂掉

#测试多个文件
#!/bin/bash
while true
do
  curtime=`date --date='0 days ago' +%s`
  fio -filename=/test/$curtime -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=libaio -bs=4m -size=20G -runtime=1 -group_reporting -name=mytest
done
 
#测试单个文件
fio -filename-testfile -size=20G -direct=1 -thread -name=/test/fio-test-name -ioengine=libaio -bs=512k/1M/4M/16M -rw=rw  -write_bw_log=rw -iodepth=64 -iodepth_batch=8 -iodepth_batch_complete=8

4.2.2 结论

挂载方式写入方式故障描述
fuse单个文件停掉单个MON,客户端写入无影响.
多个文件停掉单个MON,客户端写入无影响.
kernel单个文件停掉单个MON,客户端写入无影响.
多个文件停掉单个MON,客户端写入无影响.

4.2.3 所有MON挂掉

#测试多个文件
#!/bin/bash
while true
do
  curtime=`date --date='0 days ago' +%s`
  fio -filename=/test/$curtime -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=libaio -bs=4m -size=20G -runtime=1 -group_reporting -name=mytest
done
 
#测试单个文件
fio -filename-testfile -size=20G -direct=1 -thread -name=/test/fio-test-name -ioengine=libaio -bs=512k/1M/4M/16M -rw=rw  -write_bw_log=rw -iodepth=64 -iodepth_batch=8 -iodepth_batch_complete=8

4.2.4 结论

挂载方式写入方式故障描述
fuse单个文件所有的MON都挂掉,会在60秒左右IO夯死
多个文件所有的MON挂掉,会在挂掉后立刻IO夯死
kernel单个文件所有的MON都挂掉,会在60秒左右IO夯死
多个文件所有的MON挂掉,会在挂掉后10秒左右IO夯死.

单个文件模式(内核模式):

2099201-3c32ba07c96d4621.png
image.png

单个文件模式(fuse模式):

2099201-7a71576adc5120d7.png
image.png

4.3 OSD

4.3.1 单个OSD挂掉

#测试多个文件
#!/bin/bash
while true
do
  curtime=`date --date='0 days ago' +%s`
  fio -filename=/test/$curtime -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=libaio -bs=4m -size=20G -runtime=1 -group_reporting -name=mytest
done
 
#测试单个文件
fio -filename-testfile -size=20G -direct=1 -thread -name=/test/fio-test-name -ioengine=libaio -bs=512k/1M/4M/16M -rw=rw  -write_bw_log=rw -iodepth=64 -iodepth_batch=8 -iodepth_batch_complete=8

4.3.2 结论

挂载方式写入方式故障描述
fuse单个文件停掉一个osd,MDS客户端的写入无影响
多个文件停掉一个osd,MDS客户端的写入无影响.
kernel单个文件停掉一个osd,MDS客户端的写入无影响
多个文件停掉一个osd,MDS客户端的写入无影响.

4.3.3 集群一半OSD挂掉

#测试多个文件
#!/bin/bash
while true
do
  curtime=`date --date='0 days ago' +%s`
  fio -filename=/test/$curtime -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=libaio -bs=4m -size=20G -runtime=1 -group_reporting -name=mytest
done
 
#测试单个文件
fio -filename-testfile -size=20G -direct=1 -thread -name=/test/fio-test-name -ioengine=libaio -bs=512k/1M/4M/16M -rw=rw  -write_bw_log=rw -iodepth=64 -iodepth_batch=8 -iodepth_batch_complete=8

4.3.4 结论

挂载方式写入方式故障描述
fuse单个文件集群2/3 的osd 挂掉,MDS客户端立刻会夯死.
多个文件集群2/3 的osd 挂掉,MDS客户端立刻会夯死.
kernel单个文件集群2/3 的osd 挂掉,MDS客户端立刻会夯死.
多个文件集群2/3 的osd 挂掉,MDS客户端立刻会夯死.

4.3.5 集群所有OSD挂掉


#!/bin/bash
while true
do
  curtime=`date --date='0 days ago' +%s`
  fio -filename=/test/$curtime -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=libaio -bs=4m -size=20G -runtime=1 -group_reporting -name=mytest
done
 
#测试单个文件
fio -filename-testfile -size=20G -direct=1 -thread -name=/test/fio-test-name -ioengine=libaio -bs=512k/1M/4M/16M -rw=rw  -write_bw_log=rw -iodepth=64 -iodepth_batch=8 -iodepth_batch_complete=8

4.3.6 结论

挂载方式写入方式故障描述
fuse单个文件集群所有的osd 挂掉,MDS客户端会立刻夯死
多个文件集群所有的osd 挂掉,MDS客户端会立刻夯死.
kernel单个文件集群所有的osd 挂掉,MDS客户端会立刻夯死
多个文件集群所有 的osd 挂掉,MDS客户端立刻会夯死.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值