MooseFS超实用手册(7)--破坏性测试及总结_java

说明:部分内容来自于互联网和官方手册。



单独的破坏测试过程

12.1、测试数据存储服务器

我用5个服务器组成了MFS的存储平台,其中一个是master,其余四个服务器是chunkserver.先停止一个chunkserver服务,然后在某个MFS客户端往挂接点的目录(/mnt/mfs)里复制数据或者创建目录/文件、或者读取文件、或者删除文件,观察操作是否能正常进行。再停止第2个chunkserver,重复执行上述操作;然后再停止第3个服务器,执行类似的文件读些操作。减少chunkserver试验后,我们再来逐步增加chunkserver服务器,然后对MFS执行读写等相关访问操作,检验其正确性。

通过增减chunkserver服务器的测试,服务的可靠性确实不错,哪怕只剩下最后一个服务器,也能正常提供存储访问服务。

12.2、测试元数据服务器

元数据服务器最重要的文件在目录 /usr/local/mfs/var/mfs ,MFS每一个数据的变化,都被记录在这个目录的文件里,我们可以通过备份这个目录的全部文件,来保障整个MFS文件系统的可靠性.在正常情况下,元数据服务器的改变日志文件(changelogs) 实时地、自动地复制到所有的数据存储服务器,并且以changelog_csback.*.mfs的形式命名。换句换说,即使元数据服务器报废了,也能再部署一个元数据服务器,然后从数据存储服务器chunkserver取得恢复所需要的文件。

(一)本地测试

1、停止元数据服务 /usr/local/mfs/sbin/mfsmaster

2、备份元数据服务器数据 cd /usr/local/mfs/var; tarczvf mfs.tgz mfs

3、删除目录 mv mfs mfs.bk 或 rm –rf mfs

4、启动元数据服务 ../sbin/mfsmaster start 启动失败,提示不能初始化数据。

5、解包 tar zxvf mfs.tgz

6、执行恢复操作 .. /sbin/mfsmetarestore –a

7、启动元数据服务 ../sbin/mfsmaster start

8、在MFS客户端检查MFS存储的数据是否跟恢复前一致?能否正常访问等等。

(二) 迁移测试

1、 安装新的MFS元数据服务器。

2、 从当前的元数据服器(master)或日志备份服务器(mfsmetalogger)复制备份文件metadata.mfs.back/metadate_ml.mfs.back到新的元服务器目录(metadata.mfs.back需要定时用crontab备份).

3、 从当前的元数据服器(master)或日志备份服务器(mfsmetalogger)复制元数据服务器数据目录(/usr/local/mfs/var/mfs)到这个新的元数据服务器。

4、 停止原先的那个元数据服务器(关闭计算机或停止它的网络服务)。

5、 更改新的元数据服务器的ip为原来那个服务器的ip.

6、 执行数据恢复操作,其命令为:mfsmetarestore -mmetadata.mfs.back -o metadata.mfs changelog_ml.*.mfs 恢复成功后再执行启动新的元数据服务操作。

7、 启动新的元数据服务/usr/local/mfs/sbin/mfsmaster start

8、 在MFS客户端检查MFS存储的数据是否跟恢复前一致?能否正常访问等等。

SHELL脚本优化配置

13.1 debian启动脚本

MooseFS 启动脚本的编写
下面提供一个脚本,比如启动mfschunkserver的脚本,可将其更改为mfsmaster或mfsmetalogger,针对两种版本的操作系统:
debian
-------------
mfsmaster:
#!/bin/bash
### BEGIN INIT INFO
# Provides: mfsd
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: MooseFS is an Open Source, easy to deploy and maintain,distributed,fault tolerant file system for POSIX compliant OSes.
### END INIT INFO
# /etc/init.d/mfsmaster
# Written by hto

set -e

DAEMON=/usr/sbin/mfsmaster
# This may be mfsmaster
CONFD=/etc/mfs
PATH=/sbin:/bin:/usr/sbin:/usr/bin

# Exit if mfs*.conf doesn't have listen=yes
if [ -f $CONFD/mfsmaster.cfg ] && [ -x $DAEMON ] ; then
echo ''
else
echo 'Mian configure file NOT exist! or the command NOT found!'
exit 1
fi

case "$1" in
start)
echo -n "Starting distrib-storages server: $NAME"
$DAEMON -c $CONFD/mfsmaster.cfg $1
echo "."
;;
stop)
echo -n "Stopping distrib-storages server: $NAME"
$DAEMON -c $CONFD/mfsmaster.cfg $1
echo "."
;;
restart)
echo -n "Restarting distrib-storages server: $NAME"
$DAEMON -c $CONFD/mfsmaster.cfg $1
echo "."
;;
*)
echo "Usage: $DAEMON {start|stop|restart}"
exit 2
;;
esac

exit 0

-------------
mfschunkserver:
#!/bin/bash
### BEGIN INIT INFO
# Provides: mfsd
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: MooseFS is an Open Source, easy to deploy and maintain,distributed,fault tolerant file system for POSIX compliant OSes.
### END INIT INFO
# /etc/init.d/mfschunkserver
# Written by hto

set -e

DAEMON=/usr/sbin/mfschunkserver
# This may be mfschunkserver

CONFD=/etc/mfs
PATH=/sbin:/bin:/usr/sbin:/usr/bin

# Exit if mfs*.conf doesn't have listen=yes
if [ -f $CONFD/mfschunkserver.cfg ] && [ -x $DAEMON ] ; then
echo ''
else
echo 'Mian configure file NOT exist! or the command NOT found!'
exit 1
fi

case "$1" in
start)
echo -n "Starting distrib-storages server: $NAME"
$DAEMON -c $CONFD/mfschunkserver.cfg $1
echo "."
;;
stop)
echo -n "Stopping distrib-storages server: $NAME"
$DAEMON -c $CONFD/mfschunkserver.cfg $1
echo "."
;;
restart)
echo -n "Restarting distrib-storages server: $NAME"
$DAEMON -c $CONFD/mfschunkserver.cfg $1
echo "."
;;
*)
echo "Usage: $DAEMON {start|stop|restart}"
exit 2
;;
esac

exit 0

-------------
mfsmetalogger:
#!/bin/bash
### BEGIN INIT INFO
# Provides: mfsd
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: MooseFS is an Open Source, easy to deploy and maintain,distributed,fault tolerant file system for POSIX compliant OSes.
### END INIT INFO
# /etc/init.d/mfsmetalogger
# Written by hto

set -e

DAEMON=/usr/sbin/mfsmetalogger
# This may be mfsmetalogger
CONFD=/etc/mfs
PATH=/sbin:/bin:/usr/sbin:/usr/bin

# Exit if mfs*.conf doesn't have listen=yes
if [ -f $CONFD/mfsmetalogger.cfg ] && [ -x $DAEMON ] ; then
echo ''
else
echo 'Mian configure file NOT exist! or the command NOT found!'
exit 1
fi

case "$1" in
start)
echo -n "Starting distrib-storages server: $NAME"
$DAEMON -c $CONFD/mfsmetalogger.cfg $1
echo "."
;;
stop)
echo -n "Stopping distrib-storages server: $NAME"
$DAEMON -c $CONFD/mfsmetalogger.cfg $1
echo "."
;;
restart)
echo -n "Restarting distrib-storages server: $NAME"
$DAEMON -c $CONFD/mfsmetalogger.cfg $1
echo "."
;;
*)
echo "Usage: $DAEMON {start|stop|restart}"
exit 2
;;
esac

exit 0

13.2 redhat启动脚本
#!/bin/bash
#chkconfig:345 32 32 //此行的345参数表示,在哪些运行级别启动,启动序号(S32);关闭序号(K32)
#description:mfschunkserver //此行必写,描述服务.
### BEGIN INIT INFO
# Provides: mfsd
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: MooseFS is an Open Source, easy to deploy and maintain,distributed,fault tolerant file system for POSIX compliant OSes.
### END INIT INFO
# /etc/init.d/mfschunkserver
# Written by hto

set -e

DAEMON=/usr/sbin/mfschunkserver
# This may be mfschunkserver

CONFD=/etc/mfs
PATH=/sbin:/bin:/usr/sbin:/usr/bin

# Exit if mfs*.conf doesn't have listen=yes
if [ -f $CONFD/mfschunkserver.cfg ] && [ -x $DAEMON ] ; then
echo ''
else
echo 'Mian configure file NOT exist! or the command NOT found!'
exit 1
fi

case "$1" in
start)
echo -n "Starting distrib-storages server: $NAME"
$DAEMON -c $CONFD/mfschunkserver.cfg $1
echo "."
;;
stop)
echo -n "Stopping distrib-storages server: $NAME"
$DAEMON -c $CONFD/mfschunkserver.cfg $1
echo "."
;;
restart)
echo -n "Restarting distrib-storages server: $NAME"
$DAEMON -c $CONFD/mfschunkserver.cfg $1
echo "."
;;
*)
echo "Usage: $DAEMON {start|stop|restart}"
exit 2
;;
esac

exit 0
--------------------------------
将做成的启动脚本加入系统中:
update-rc.d mfsmetalogger defaults
update-rc.d mfschunkserver defaults

invoke-rc.d mfschunkserver restart

chkconfig --level 345 mfschunkserver on
service mfschunkserver restart




存储效能测试工具

存储产品的效能体现的存储产品的工作效率,访问速度可以体现系统在单位时间内传输数据量的大小,平均响应时间则可以体现系统响应读写请求的快慢。这些都是衡量一个存储系统的工作效能是否优秀的重要依据。
为了获取存储产品的效能,我们需要使用存储效能测试工具

业内通常使用的效能测试工具有很多。
如果按照测试工具适用性来分类,可以分为通用工具和专用工具:通用工具的代表有IOMeter,测试人员可以根据自己的需要,使用IOMeter定制特定的测试用例,以便获取到在该用例条件下的测试结果,由于其开放性,使得IOMeter可以试用于大多数的测试环境;专用工具的通过是模拟特定使用场景下的效能负载,获取被测系统在特定条件下的效能数据,可以真实反映被测系统在实际使用条件下的性能表现,其主要代表有SPC、SPT等。
如果按照使用平台分类,包括Java工具和非Java工具:Java由于具备高移植性和高平台通用性,使得基于Jave平台开发的工具可以试用在多种测试平台下,SPC就是一款使用Jave语言开发的测试工具;IOMeter和SPT是基于C/C++实现的效能测试工具,虽然移植性没有基于Jave语言开发的工具好,但是由于C/C++语言的特点,这类工具的执行效率会比较高,并且可以直接对硬件设备进行操作。
如果按照收费情况分类,包括收费工具和免费工具:IOMeter是一款免费的测试工具,并且源代码是公开的;SPC工具是需要收费的,但是由于SPC机构的权威性,其测试结果是广泛受到业界认可的。

关于存储效能比较权威的机构是SPC。SPC制定了专业的效能测试标准,可以针对不同的应用场景,产生不同的IO负载,从而测试出存储设备在实际的应用场景中的工作能力。应用场景包括在线事务处理、数据库查询、邮件服务器、大文件访问、视频点播等。存储业界主要的厂商,基本都参与了SPC组织,并参与了SPC测试标准的制定,使得SPC与存储产业的联系十分紧密。SPC使用Java语言实现了测试工具,在存储业界被广泛使用。

目前,主要的效能测试工具包括如下几种:

1.SPC
类型:专用
实现:Java
收费情况:收费
链接:
http://www.storageperformance.org/home
优点:
(1)权威,测试标准统一
(2)专用工具,无需配置即可模拟特定使用场景的效能测试
缺点:
(1)费用较高
(2)用户控制是命令行方式
(3)测试结果数据可读性不高,需专业人士手动整理

2.SPT
类型:专用
实现:C/C++
收费情况:收费
链接:
http://www.storagetest.com/sts/infusions/products/products.php?readmore=2
优点:
(1)测试标准统一,即符合SPC测试标准
(2)专用工具,无需配置即可模拟特定使用场景的效能测试
(3)友好的图形界面,易于使用
(4)自动生成测试图表,直观,可读性高

3.TPC
类型:专用工具,针对OLTP使用场景
实现:多种,如QUEST公司的BenchmarkFactory,以及HP的 LoadRunner
链接:
http://www.tpc.org/

4.IOmeter
类型:非专用
实现:C/C++
收费情况:免费
链接:
http://www.iometer.org/ 
优点:
(1)支持多操作系统
(2)简单易用
缺点:
(1)测试参数需自行设定
(2)不能确保横向比较的产品效能,是在统一的测试标准下得出的

5.IOZone
类型:非专用
实现:C/C++
收费情况:免费
链接:
www.iozone.org
优点:
(1)支持多操作系统
(2)简单易用
缺点:
(1)测试参数需自行设定
(2)不能确保横向比较的产品效能,是在统一的测试标准下得出的

6.VDBench
类型:非专用
实现:java
收费情况:免费
链接: 
http://sun.systemnews.com/articles/138/4/storage/22110
优点:
(1)支持多操作系统
(2)简单易用
(3)实现基准和测试流程,类似SPC 测试
缺点:
(1)测试参数需自行设定
(2)不能确保横向比较的产品效能,是在统一的测试标准下得出的