本文包含如下内容
一、Dell服务器 RAID卡介绍
二、阵列卡的Stripe size介绍
三、megacli介绍、安装、使用、crontab监控脚本
以下在系统下使用相关命令得到的数据,dell支持的各种RAID卡的详细参数参见本文第五部分。
使用megacli命令查看得到的RAID卡数据:
SAS 6/iR :只支持2块硬盘做 raid0,或者raid1,或者不做阵列卡 (Dell硬件聊天室获得)
PERC 6/i Integrated
Memory Size: 256MB
RAID Level Supported: RAID0, RAID1, RAID5, RAID6, RAID10, RAID50, RAID60, PRL 11, PRL 11 with spanning, SRL 3 supported
Supported Drives: SAS, SATA
Min Stripe Size: 8 KB
Max Stripe Size: 1.0 MB
接口速度Link Speed: 3.0Gb/s
PERC H700 Integrated
Memory Size: 512MB
RAID Level Supported: RAID0, RAID1, RAID5, RAID6, RAID10, RAID50, RAID60, PRL 11, PRL 11 with spanning
Supported Drives: SAS, SATA
Min Stripe Size: 8 KB
Max Stripe Size: 1.0 MB
接口速度Link Speed: 6.0Gb/s
官方资料:
PERC H200(6 Gb/秒)
PERC H700(6Gb /秒),配备512 MB非易失性高速缓存
PERC H700(6 Gb/秒),配备512 MB电池后备高速缓存;512 MB、1 G非易失性电池后备高速缓存
PERC 6/i,配备256 MB电池后备高速缓存
官方资料:
PERC H800(6Gb/秒),配备512 MB非易失性高速缓存
PERC H800(6Gb/秒),配备512 MB电池后备高速缓存;512 MB、1 G非易失性电池后备高速缓存
PERC 6/E,配备256 MB或512 MB电池后备高速缓存
Stripe size 默认64KB。
在每个磁盘上连续写入数据的总量,也称作“条带深度”。你可以指定每个逻辑驱动器的条带容量从2KB,4KB,8KB一直到128KB。为了获得更高的性能,要选择条带的容量等于或小于操作系统的簇的大小。大容量的条带会产生更高的读取性能,尤其在读取连续数据的时候。而读取随机数据的时候,最好设定条带的容量小一点。如果指定128KB的条带将需要8MB内存。
不同Stripe size的选择直接影响性能,如IOPS和吞吐量。
Stripe size值小,通过多块磁盘响应多个I/O请求,可以增加I/O访问速率(IOPS)
Stripe size值大,通过多块磁盘响应一个I/O请求,可以增加数据传输速率(Mbps)
我们知道顺序和随机对于带宽和iops的需求成反比,即顺序的读写比较消耗带宽,随机的读写比较消耗iops;
通常,小Stripe size适用于数据库,一般Stripe size适用于文件服务器,大Stripe size适用于多煤体应用。实际应用stripe size大小应在效率测试后具体设置。
数据库一般4-16KB
web服务器默认即可,16-64KB
流媒体等大文件建议128KB以上
查看RAID信息的工具有mpt-status、megarc、dell OpenManage。经测试只有megacli可以实现目标,dell OpenManage由于较大90M左右没有安装。
megacli工具非常强大,不仅能查看RAID卡信息,而且还能设置RAID卡,但是不支持SAS 6/iR的RAID卡,不推荐采用megacli在线设置RAID卡,本文也仅用于监控挂接在RAID上的硬盘状态。
root@3:~# lspci |grep RAID H700
02:00.0 RAID bus controller: LSI Logic / Symbios Logic Device 0079 (rev 04)
root@3:~# lspci |grep RAID PERC 6/i
03:00.0 RAID bus controller: LSI Logic / Symbios Logic MegaRAID SAS 1078 (rev 04)
root@k:~# lspci|grep SAS SAS 6/iR
03:00.0 SCSI storage controller: LSI Logic / Symbios Logic SAS1068E PCI-Express Fusion-MPT SAS (rev 08)
root@3:~# more /etc/apt/sources.list
增加如下源:
##add monitor dell perc 6/i raidcontroller's source
deb http://hwraid.le-vert.net/debian lenny main
root@3:~# apt-get update
root@3:~# apt-get install megacli
术语:BBU 电池备份单元(Battery Backup Unit)
常用查看命令:
megacli -LDInfo -Lall -aALL 查raid级别
megacli -AdpAllInfo -aALL 查raid卡信息
megacli -PDList -aALL 查看硬盘信息
megacli -AdpBbuCmd -aAll 查看电池信息
megacli -FwTermLog -Dsply -aALL 查看raid卡日志
megacli -adpCount 显示适配器个数
megacli -AdpGetTime �CaALL 显示适配器时间
megacli -AdpAllInfo -aAll 显示所有适配器信息
megacli -LDInfo -LALL -aAll 显示所有逻辑磁盘组信息
megacli -PDList -aAll 显示所有的物理信息
megacli -AdpBbuCmd -GetBbuStatus -aALL |grep ‘Charger Status’ 查看充电状态
megacli -AdpBbuCmd -GetBbuStatus -aALL 显示BBU状态信息
megacli -AdpBbuCmd -GetBbuCapacityInfo -aALL 显示BBU容量信息
megacli -AdpBbuCmd -GetBbuDesignInfo -aALL 显示BBU设计参数
megacli -AdpBbuCmd -GetBbuProperties -aALL 显示当前BBU属性
megacli -cfgdsply -aALL 显示Raid卡型号,Raid设置,Disk相关信息
该脚本实现在监控到硬盘故障时发出报警邮件,并关联到手机短信,以便通知运维人员及时处理。
root@3:~# more /backup/check_raid_disk_health
#!/bin/sh
log_dir=/backup/
log_name=_raid_disk_monitor
logtime=$(date +%Y%m%d --date='1 days ago')
fix=.log
host=_`hostname`
STATUS=0
echo "Checking RAID status on $host" >$log_dir$logtime$log_name$host$fix
RAID_Contrller=`megacli -AdpAllInfo -aALL |grep "Product Name" | cut -d: -f2`
echo "Controller : $RAID_Contrller" >>$log_dir$logtime$log_name$host$fix
Online_disk_num=`megacli -PDList -aALL | grep Online | wc -l`
echo "Totall number of Physical disks online : $Online_disk_num" >>$log_dir$logtime$log_name$host$fix
Degrade_disk=`megacli -AdpAllInfo -a0 |grep "Degrade"`
echo $Degrade_disk >>$log_dir$logtime$log_name$host$fix
Degrade_disk_num=`echo $Degrade_disk |cut -d" " -f3`
Failed_disk=`megacli -AdpAllInfo -a0 |grep "Failed Disks"`
echo $Failed_disk >>$log_dir$logtime$log_name$host$fix
Failed_disk_num=`echo $Failed_disk |cut -d" " -f4`
[ "$Degrade_disk_num" -ne 0 ] && STATUS=1
[ "$Failed_disk_num" -ne 0 ] && STATUS=1
exit $STATUS
或者
#!/bin/bash
Battery=`/usr/sbin/MegaCli -AdpBbuCmd -GetBbuStatus -aALL|grep "Charger Status"|awk -F: '{print $1" :"$2}'`
raid=`/usr/sbin/MegaCli -cfgdsply -aALL|grep "RAID Level"|tail -1|awk -F: '{print $1" :"$2}'`
Disknum=`/usr/sbin/MegaCli -cfgdsply -aALL|grep -c "Non Coerced Size"`
Onlinedisk=`/usr/sbin/MegaCli -cfgdsply -aALL | grep "Online" | wc -l | sed 's/ //'`
Faileddisk=`/usr/sbin/MegaCli -AdpAllInfo -aALL | grep "Failed Disks"|awk -F' ' '{print $4}'`
case "$raid"
in
"RAID Level : Primary-1, Secondary-0, RAID Level Qualifier-0") echo "Raid Level :Raid 1";;
"RAID Level : Primary-0, Secondary-0, RAID Level Qualifier-0") echo "Raid Level :Raid 0";;
"RAID Level : Primary-5, Secondary-0, RAID Level Qualifier-3") echo "Raid Level :Raid 5";;
"RAID Level : Primary-1, Secondary-3, RAID Level Qualifier-0") echo "Raid Level :Raid 10";;
esac
if [ -z "$Battery" ];then
echo "Battery :Null"
else
echo "$Battery"
fi
echo "Total Diak Number:$Disknum"
echo "Online Disk Number:$Onlinedisk"
echo "Failed Disk Number:$Faileddisk"
echo ""