CephFS 异常测试
1. Cephfs 异常测试方案
CephFS允许客户端缓存metadata 30s,所以这里测试对MDS stop/start的时间间隔取为:2s,10s,60s。
测试组件 |
测试场景 |
挂载方式 |
测试方法 |
---|---|---|---|
MDS |
单MDS |
fuse/kernel |
单个MDS挂掉情况 2s/10s/60s IO情况 |
主从MDS时 |
fuse/kernel |
单主挂掉情况 2s/10s/60s IO情况 |
|
主从MDS时 |
fuse/kernel |
主从同时挂掉情况 2s/10s/60s IO情况 |
|
MON |
单个MON |
fuse/kernel |
单个MON挂掉情况 2s/10s/60s IO情况 |
所有MON |
fuse/kernel |
所有MON挂掉情况 2s/10s/60s IO情况 |
|
OSD |
单个OSD |
fuse/kernel |
单个OSD挂掉情况 2s/10s/60s IO情况 |
集群一半OSD |
fuse/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夯住 |
单个文件:
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立马夯死 |
单个文件模式:
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夯死. |
单个文件模式(内核模式):
单个文件模式(fuse模式):
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客户端立刻会夯死. |
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Hadoop2.7.6_06_mapreduce参数优化
- NFS服务搭建与配置
- Hadoop2.7.6_07_HA高可用
- Hadoop2.7.6_08_Federation联邦机制 1.1. HDFS-federation图解2.1. 注意事项3.1. 部署3.2. 环境变量3.3. c
- ThinkPHP5 SQL注入漏洞 && PDO真/伪预处理分析
- Hive-1.2.1_01_安装部署
- Supervisord远程命令执行漏洞(CVE-2017-11610)
- Hive-1.2.1_02_简单操作与访问方式
- PHP-CGI远程代码执行漏洞(CVE-2012-1823)分析
- Hive-1.2.1_03_DDL操作 1.1. Create Database1.2. Drop Database1.3. Use Database2.1. Cre
- Hive-1.2.1_04_DML操作 5.1. Join8.1. 使用案例8.2. Transform实现
- Hive-1.2.1_05_案例操作
- Mysql字符编码利用技巧
- Hive-1.2.1_06_累计报表查询
- Flume-1.8.0_部署与常用案例