本发明涉及服务器存储技术领域,具体提供一种SAS Switch整机柜混合压力自动化测试方法。
背景技术:
计算机具有诸多优良性能,例如,存储信息量大并且信息安全可靠,使用者获取信息方便快捷等,成为现代生活及工作过程中不可缺少的重要工具。随着社会及经济的进一步发展,用户对计算机的各项性能要求越来越高。服务器与普通计算机相比,具有更高的稳定性、扩展性等性能,受到各大型企业的广泛应用。特别是随着企业规模的扩大,云计算概念得到普及,对服务器的存储能力及传输速度提出了更高的要求,服务器存储硬件的性能决定了服务器的存储能力。
SAS Switch是一种基于SAS协议的交换式存储池。基于SAS Switch数据传输的rack机柜中,将存储区域单独划分管理,大幅度提升了服务器的存储容量。SAS Switch板上行与SAS卡或计算节点相连,下行连接JBOD或者直接挂接硬盘等存储设备,JBOD(Just a Bunch Of Disks)磁盘簇是一个在底板上安装的带有多个磁盘驱动器的存储设备。SAS Switch整机柜中通过SAS Switch节点将JBOD节点中的磁盘分配给计算节点,为保证服务器存储性能的稳定性,在计算节点下进行反复重启加压测试,及时了解计算节点的稳定及JBOD磁盘簇中磁盘的读写性能是非常必要的。
技术实现要素:
本发明的技术任务是针对上述存在的问题,提供一种更加高效,能任意控制时间,提高工作效率,并且方便排除故障的SAS Switch整机柜混合压力自动化测试方法。
为实现上述目的,本发明提供了如下技术方案:
一种SAS Switch整机柜混合压力自动化测试方法,在SAS Switch整机柜的计算节点安装Linux系统,在Linux系统内安装lsscsi命令包,基于SSH协议查询和管理各计算节点,在SSH协议管理的基础上,基于shell脚本编写的工具收集单计算节点下磁盘的SAS地址并实现整机柜所有计算节点自动反复重启并完成加压操作,计算节点每次重启都将对计算节点下磁盘的SAS地址与收集的SAS地址进行对比,判断磁盘的状态,以检测计算节点的稳定性。
SSH为secure shell的缩写,由IEIT的网络小组(Network Working Group)所定制。SSH为建立在应用层和传输层基础上的安全协议,专为远程登录会话和其他网络服务提供安全性的协议。计算节点之间通过SSH协议查询和管理各计算节点,在此基础上采用shell脚本实现整机柜稳定性测试中的反复重启加压测试。
作为优选,所述自动化测试方法具体包括以下步骤:
S1:前置工作:SAS Switch整机柜的计算节点安装Linux系统,在Linux系统内安装lsscsi命令包,配置所有计算节点之间SSH无密码访问;
S2:编写shell脚本,实现整机柜所有计算节点自动反复重启加压测试,并对计算节点下的磁盘SAS地址进行对比,判断磁盘状态,检测计算节点的稳定性:
1)编写check.sh脚本,对单计算节点下的磁盘SAS地址进行收集并作为比较对象;
2)编写sys.sh脚本,对计算节点中磁盘SAS地址与收集的SAS地址进行对比,若相同则输出pass,否则输出fail;
3)编写reboot.sh脚本,使计算节点反复重启并在重启过程中完成加压操作。
将上述脚本整合为一个脚本,编写简单的批量脚本在各个计算节点完成程序check.sh、reboot.sh的执行,即可完成全部操作作业并储存操作结果。
作为优选,步骤S2中,设定所有计算节点重启的总次数。
作为优选,步骤S2中,使计算机点反复重启并完成加压操作的过程中,按照需求控制加压时间。
与现有技术相比,本发明的SAS Switch整机柜混合压力自动化测试方法具有以下突出的有益效果:本发明的方法能任意控制加压时间,能够重复性、自动化操作,更加高效,不仅提高工作效率,并且方便排除故障,使用范围广泛,易于推广,实用性强。
具体实施方式
下面将结合实施例,对本发明的SAS Switch整机柜混合压力自动化测试方法作进一步详细说明。
实施例1
本发明的SAS Switch整机柜混合压力自动化测试方法,在SAS Switch整机柜的计算节点安装Linux系统,在Linux系统内安装lsscsi命令包,基于SSH协议查询和管理各计算节点,在SSH协议管理的基础上,基于shell脚本编写的工具收集单计算节点下磁盘的SAS地址并实现整机柜所有计算节点自动反复重启并完成加压操作,计算节点每次重启都将对计算节点下磁盘的SAS地址与收集的SAS地址进行对比,判断磁盘的状态,以检测计算节点的稳定性。
实施例2
在实施例1的基础上,本实施例所述方法具体包括以下步骤:
S1:前置工作:SAS Switch整机柜的计算节点安装Linux系统,在Linux系统内安装lsscsi命令包,配置所有计算节点之间SSH无密码访问;
S2:编写shell脚本,实现整机柜所有计算节点自动反复重启加压测试,并对计算节点下的磁盘SAS地址进行对比,判断磁盘状态,检测计算节点的稳定性:
1)编写check.sh脚本,对单计算节点下的磁盘SAS的地址进行收集并作为比较对象,详细内容为:
#!/bin/sh
CUR_DIR=$(cd "$(dirname "$0")";pwd)
SAS_DIR=$CUR_DIR/SAS_DIR
NodeIPAddr=$1
MainIPAddr=$2/*该程序执行的2个参数为节点的IP地址*/
if [ ! -d $SAS_DIR ];then
mkdir -p $SAS_DIR
else/*在当前目录新建SAS_DIR目录,若存在则不用新建,后续所有结果都会记录在这个目录中*/
[ -e $SAS_DIR/config_log ] && mv $SAS_DIR/config_log $SAS_DIR/config_log_`date +"%Y-%m-%d_%H:%M:%S"`
[ -e $SAS_DIR/config_stand ] && mv $SAS_DIR/config_stand $SAS_DIR/config_stand_`date +"%Y-%m-%d_%H:%M:%S"`
[ -e $SAS_DIR/result ] && mv $SAS_DIR/result $SAS_DIR/result_`date +"%Y-%m-%d_%H:%M:%S"`
[ -e $SAS_DIR/time ] && mv $SAS_DIR/time $SAS_DIR/time_`date +"%Y-%m-%d_%H:%M:%S"`
fi
/usr/local/bin/lsscsi -t | awk 'BEGIN {FS=" ";RS="\n"}{for (i=NF;i>=2;i--){printf "%-25s",$i;if (i==2)printf "\n"}}' |sort > $SAS_DIR/${NodeIPAddr}_config/*查看节点下每个磁盘对应的SAS地址,并将这些信息写入节点 IP_config文件中,提供比较对象*/
if [ ${NodeIPAddr} == ${MainIPAddr} ];then
cp $SAS_DIR/${NodeIPAddr}_config ${CUR_DIR}
else
scp $SAS_DIR/${NodeIPAddr}_config ${MainIPAddr}:${CUR_DIR}
fi
2)编写sys.sh脚本,对计算节点中磁盘SAS的地址与收集的SAS的地址进行对比,若相同则输出pass,否则输出fail,详细内容为;
#!/bin/sh
CUR_DIR=$(cd "$(dirname "$0")";pwd)
SAS_DIR=$CUR_DIR/SAS_DIR
NodeIPAddr=`ifconfig xgbe0 | grep "inetaddr" | cut -d: -f2 | cut -d' ' -f1`
if [ ! -e $SAS_DIR/config_stand ];then
Loop=1
Time=`date +"%Y-%m-%d %H:%M:%S"`
Flag=pass
echo "$Loop $Time" >> $SAS_DIR/config_log
cat $SAS_DIR/${NodeIPAddr}_config>> $SAS_DIR/config_log
echo -ne "\n" >> $SAS_DIR/config_log
echo "$Loop $Time $Flag" >> $SAS_DIR/result
mv $SAS_DIR/${NodeIPAddr}_config $SAS_DIR/config_stand
else
Loop_last=`cat $SAS_DIR/result | wc -l`
Loop=`expr $Loop_last + 1`
Time=`date +"%Y-%m-%d %H:%M:%S"`
/usr/local/bin/lsscsi -t | awk 'BEGIN {FS=" ";RS="\n"}{for (i=NF;i>=2;i--){printf "%-25s",$i;if (i==2)printf "\n"}}' | sort > $SAS_DIR/config_temp
Check=`grep -vxFf $SAS_DIR/config_temp $SAS_DIR/config_stand`
if [ -z $Check ];then
Flag=pass
else
Flag=fail
fi
echo "$Loop $Time" >> $SAS_DIR/config_log
cat $SAS_DIR/config_temp>> $SAS_DIR/config_log
echo -ne "\n" >> $SAS_DIR/config_log
echo "$Loop $Time $Flag" >> $SAS_DIR/result
fi
3)编写reboot.sh脚本,使计算节点反复重启并在重启过程中完成加压操作,详细内容为:
#!/bin/sh
Cur_Dir=$(cd "$(dirname "$0")";pwd)
SAS_DIR=$Cur_Dir/SAS_DIR
Times=$1
if [ ! -e $Cur_Dir/count.txt ] ; then
touch $Cur_Dir/count.txt
fi
[ ! -e ${SAS_DIR}/offtime ]&& date +"%Y-%m-%d %H:%M:%S" > ${SAS_DIR}/offtime
date +"%Y-%m-%d %H:%M:%S" > ${SAS_DIR}/ontime
time=$(($(date +"%s" -d "`cat ${SAS_DIR}/ontime`") - $(date +"%s" -d "`cat ${SAS_DIR}/offtime`")))
Count=`cat $Cur_Dir/count.txt | wc -l`
echo$Count $time >> ${SAS_DIR}/time
Time=`date +%D_%T`
Reboot=`less /etc/rc.d/rc.local | grep "reboot.sh" | awk '$1~/^sh/ {print $2}'`
if [ -z $Reboot ] ; then
echo "sh $Cur_Dir/reboot.sh $Times" >> /etc/rc.d/rc.local
fi/*将reboot.sh程序写入rc.local让其开机自动执行*/
fdisk -l | grep "^Disk.*bytes$" > tmp.txt
while read line
do
DEV_NAME=`echo $line | awk '{print $2}' | awk -F: '{print $1}'`/*查看节点下的磁盘设备并打印 */
DEV_NAME_ALL="$DEV_NAME_ALL $DEV_NAME"
done<tmp.txt
fori in $DEV_NAME_ALL
do
dd if=$i of=/dev/null bs=256k count=1000000 &
done/*给节点下所分配到的磁盘进行加压*/
sleep 1200/*加压的控制时间,可按照需求随意修改*/
sh $Cur_Dir/sys.sh/*执行当前目录下的sys.sh脚本*/
if [ "$Count" -le "$Times" ] ; then
echo "$Time $Count" >>$Cur_Dir/count.txt
date +"%Y-%m-%d %H:%M:%S" > ${SAS_DIR}/offtime
reboot
else
sed -i '/^sh/d' /etc/rc.d/rc.local
fi/*Times为执行该程序时设定的参数,也就是重启的总次数,若节点重启次数达到设定的次数时,不再运行该程序*/。
以上所述的实施例,只是本发明较优选的具体实施方式,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。