背景介绍
lustre做为成熟的并行文件系统开源项目,在代码的 lustre/test目录下提供了测试套件,使用bash脚本搭建起了lustre定制化的测试框架。参与lustre开发的人员应该熟悉并使用这一套框架,做为程序交付质量的基本防护,本文从使用者角度介绍该测试套件使用流程。
程序安装
lustre测试套件发布式打包为lustre-tests.rpm(如lustre-tests-2.15.1-1.x86_64.rpm),默认相关文件安装在/usr/lib64/lustre目录,需要在服务端集群和客户端都安装上测试程序包。测试环境搭建步骤:
1. 所有节点安装好测试套件lustre-tests.rpm
2. 关闭selinux、防火墙,做互信访问
3. 所有节点安装pdsh
4. 所有节点创建用户runas,uid 500, gid 500
5. 集群节点需要安装的工具:yum install tar psmisc bc net-tools
如下截图所示,auster 是测试框架执行的入主脚本。
执行测试
在做为客户端角色的机器执行测试程序,先切换到/usr/lib64/lustre/tests/ 目录, tests目录的子目录cfg下为测试执行的环境配置文件,通过bash环境变量的形式指定用于测试的mgs/mds/ost服务器节点等信息,默认有local.sh和ncli.sh两个配置文件。测试时需要根据实际的测试环境修改配置,如下配置指定使用3个mds角色和4个ost角色进行测试。
[root@ctos tests]# cat cfg/my.sh
# MDS and MDT configuration
MDSCOUNT=3
mds_HOST="ctos"
MDSDEV1="/dev/sdc"
mds2_HOST="ctos"
MDSDEV2="/dev/sdd"
mds3_HOST="ctos"
MDSDEV3="/dev/sde"
#mds4_HOST="ctos"
#MDSDEV4="/dev/sdf"
# OSS and OST configuration
OSTCOUNT=4
ost_HOST="ctos1"
OSTDEV1="/dev/sdb"
ost2_HOST="ctos1"
OSTDEV2="/dev/sdc"
ost3_HOST="ctos1"
OSTDEV3="/dev/sdd"
ost4_HOST="ctos1"
OSTDEV3="/dev/sde"
# Client configuration
#CLIENTCOUNT=1
#CLIENT1="ctos2"
OSTSIZE=5368709120
#VERBOSE=true
PDSH="/usr/bin/pdsh -S -Rssh -w"
SHARED_DIRECTORY=${SHARED_DIRECTORY:-/opt/testing/shared}
. /usr/lib64/lustre/tests/cfg/ncli.sh
使用如下命令实际执行测试,-f指定前述my.sh做为配置输入,-d指定结果输入目录,然后指定执行sanity用例集中的 0a用例,也可以一次指定执行用例集中所有用例。
./auster -f my -rsv -d /opt/results/ sanity --only 0a
测试结果分析
执行过程回显用例信息,统计执行时间
详细执行分析输入到日志文件中,针对出错的用例还会自动搜集Lustre 日志(lctl dk命令)
测试用例集
如下为当前归档到代码库的测试用例集。
脚本文件 | 维护状态 | 描述Test |
conf-sanity.sh | Active | 用于验证配置的单元测试集,用不同的配置执行Lustre以确保程序在不常见配置场景正常执行。 |
dne_sanity.sh | Inactive | 同时在不同的目录并发执行sanity |
insanity.sh | Active | 用于验证并发多种错误场景 |
large-lun.sh | Active | Large LUN 测试 |
large-scale.sh | Active | 验证基于版本的恢复 |
lfsck.sh | Deprecated | 已替换为sanity-lfsck |
lfsck-performance.sh | Active | 测试以下lfsck性能: 压力场景lfsck,创建时lfsck,备份和恢复,并行从1.8版本升级 |
liblustre | Deprecated | 连接到liblustre客户端库的测试 |
lustre-rsync-test.sh | Active | 验证 lustre_rsync (复制) 特性 |
metadata-updates.sh | Active | 测试当多客户端创建删除文件、修改文件属性时元数据能正确更新 |
mmp.sh | Active | 测试多挂载保护特性(MMP) |
ost-pools.sh | Active | 测试OST池特性 |
parallel-scale.sh | Active | 执行功能测试(兼容性、层级读写、分散写、追加写、并行锁、属性预读),性能测试(IOR、compilebench 和 metabench)、压力测试(simul) |
parallel-scale-cifs.sh | Active | 测试Lustre通过Samba导出,在客户端执行并发压力compilebench, dbench, fsx, 和 iozone。需要预先在Samba服务端和客户端安装依赖包 |
parallel-scale-nfs.sh | Active | 由parallel-scale-nfsv3.sh 和 parallel-scale-nfsv4.sh 通过指定版本的方式调用 |
parallel-scale-nfsv3.sh | Active | 在auster框架中提供nfs配置功能 |
parallel-scale-nfsv4.sh | Active | 在auster框架中提供nfs配置功能 |
performance-sanity.sh | Active | 性能 mdsrate 测试(大文件、小文件创建、打开、删除、查询属性,10M文件目录的查询速率 |
posix.sh | Active | POSIX兼容性自动测试。需要在系统上预装POSIX代码。创建回环设备格式化为ext4文件系统,然后拷贝、编译执行POSIX程序。再Lustre系统执行上述步骤,比对两次结果 |
racer.sh | Active | 通过并发创建、移动、删除一批文件等操作测试文件系统并发竞争情况 |
recovery-double-scale.sh | Active | 测试节点故障切换 |
recovery-mds-scale.sh | Active | 节点故障测试:24小时内持续在10分钟间隔随机故障切换(MDS或OST),验证不会发生程序错误 |
recovery-random-scale.sh | Active | 验证客户端失败不会影响其它客户端 |
recovery-small.sh | Active | 验证通信失败场景RPC回复的单元测试用例集 |
replay-dual.sh | Active | 验证服务端失败场景两个客户端恢复的单元测试集 |
replay-ost-single.sh | Active | 用于验证OST失败后恢复的测试用例 |
replay-single.sh | Active | 用于验证MDS失败后恢复的测试用例 |
replay-vbr.sh | Active | 验证基于版本的恢复 |
runtests | Active | 通过写数据、解挂载、挂载验证数据持久性。该用例通过关闭文件系统再挂载验证数据一致性,其他很多用例只验证了文件存在、文件大小 |
sanity.sh | Active | 持续集成的用例用于验证常见配置场景的操作。此用例集验证了之前发现会引起功能或数据问题的操作场景,其中的一些测试执行路径是Lustre特有的,需要使用 "lctl set_param fail_loc=X" 命令触发Lustre故障注入框架,否则会不可能或难于复现引起问题的操作场景 |
sanity-benchmark.sh | Active | 使用简单性能基线测试测试文件系统基本功能。执行dbench, bonnie++, iozone, fsx, 和 pios |
sanity-dom.sh | Active | Data on MDT 特性基本用例集 |
sanity-flr.sh | Active | File Level Redundancy 特性基本用例集 |
sanity-gss.sh | Active | GSSAPI 特性测试。 |
sanity-hsm.sh | Active | HSM 特性基本用例集 |
sanity-krb5.sh | Active | Kerberos 特性基本用例集 |
sanity-lfsck.sh | Active | lfsck 特性基本用例集 |
sanity-lnet.sh | Active | lnet 特性基本用例集 |
sanity-pcc.sh | Active | Persistent Client Cache 特性基本用例集 |
sanity-pfl.sh | Active | 测试 Progressive File Layout 特性 |
sanity-quota.sh | Active | 测试 quota |
sanity-scrub.sh | Active | 测试 OI scrub 功能 |
sanity-sec.sh | Active | 测试 Lustre 角色特性,包括 UID/GID 映射 |
sanityn.sh | Active | 通过在一个客户端将同一文件系统挂载两次,测试验证两个客户端的正常操作场景。以支持同一个脚本或程序挂载使用同一个文件系统,脚本或程序本身不需要感知分布式总局。 |
scrum-performance.sh | Active | 测试 OI scrub 性能 |