DELL服务器的Riad卡都有可充电池的特性,这块可充电电池,在不使用时,也会有微弱的放电现象,当它的电量放电到低到一定程度时,Raid卡控制器就会对电池进行一次“放电”,将剩余的电量放掉,然后再进行一次“充电”。
这其实是一种对“电池”保护机制,以及对Raid阵列卡可用性提供保障的机制。
但是问题就出在这个放电、充电的过程上:
默认情况下,当RAID卡的电池的电量低于某阈值时,RAID卡固化程序认为此时的电池是不可用的,为了保证数据的安全,会禁用RAID的“缓存”,这种默认的机制本来是合情合理的,没有什么可“质疑”的。问题是,当RAID的缓存被禁用之后,RAID的I/O能力会大幅度下降。而据DELL工程师将,这个充放电的时间需要维持7个小时左右(据我观察服务器的TTY日志,好像每次持续1-2小时)。 对于高I/O的应用来说,这种下降,有可能是致命的,可能会导致系统I/O阻塞,构架不良的系统,有可能会被这个“故障点”(正在充放电的设备上的应用)拖死,简直太要命了!!!
有两种方法解决这个问题:
1、检查电池的状态,对电池的充放电进行撑握,也可有计划地安排手动充放电。
一般DELL服务器的电池充放电周期为90天,然后在快接近下次充电的时候,选择在晚上或者服务器空闲时间手动强制充放电(需要先安装MegaCli,见第2);从而避免充放电在未知的时间里自动进行充放电,影响服务器正常运行。
查看电池充放电周期:
[root@localhost MegaCli]# echo "`./MegaCli64 -AdpBbuCmd -getBbuProperties -aALL | grep Period | cut -d " " -f4`/3600/24" | bc
90
[root@localhost MegaCli]#
手动强制充放电:
[root@localhost MegaCli]# ./MegaCli64 -AdpBbuCmd -BbuLearn –a0
2、改变RAID卡策略,使其在充放电时,不禁用Raid卡缓存。
这样做电池在自动充放电的时候,就不会关闭写缓存,些时I/O的性能不会下降;但是,假如在此时服务器断电,Raid卡缓存中的数据会来不及写进磁盘,从而造成数据的丢失(没有这么巧,刚好在Raid电池充放电时断电吧?)。
DELL服务器大多是LSI的MegaRAID卡,用lsmod命令查看服务器是否用的MegaRAID卡,出现结果就说明是:
[root@localhost delltool]# lsmod | grep megaraid
megaraid_sas 77643 7
改变MegaRaid卡的策略就要用到官方提供的工具MegaCli来进行控制。
MegaCli的当前版本下载地址:点击下载
下载解压后,有Lib_Utils-1.00-09.noarch.rpm和MegaCli-8.02.21-1.noarch.rpm两个rpm包,一起上传到服务器上,用rpm -ivh命令依次安装Lib_Utils和MegaCli(Lib_Utils是MegaCli的依赖包,必须先安装),安装完成后就可以用MegaCli命令来进行控制了;
首先进入MegaCli的安装目录(以下都以64位系统为例,所有命令都是进入MegaCli安装目录执行):
[root@localhost /]# cd /opt/MegaRAID/MegaCli/
查看Raid卡当前的缓存策略:
[root@localhost MegaCli]# ./MegaCli64 -LDGetProp -Cache -LAll -aAll
Adapter 0-VD 0(target id: 0): Cache Policy:WriteBack, ReadAdaptive, Direct, No Write Cache if Bad BBU
Adapter 0-VD 1(target id: 1): Cache Policy:WriteBack, ReadAdaptive, Direct, No Write Cache if Bad BBU
Adapter 0-VD 2(target id: 2): Cache Policy:WriteBack, ReadAdaptive, Direct, No Write Cache if Bad BBU
Exit Code: 0x00
[root@localhost MegaCli]#
注:因为我有当时创建了3个虚拟磁盘,所以会显示三行,可以看到缓存策略是No Write Cache if Bad BBU,即在电池充放电时关闭缓存。
调整缓存策略,在充放电时不关闭写缓存:
[root@localhost MegaCli]# ./MegaCli64 -LDSetProp CachedBadBBU -lall -a0
调整完后,再次查看Raid卡当前的缓存策略:
[root@localhost MegaCli]# ./MegaCli64 -LDGetProp -Cache -LAll -aAll
Adapter 0-VD 0(target id: 0): Cache Policy:WriteBack, ReadAdaptive, Direct, Write Cache OK if bad BBU
Adapter 0-VD 1(target id: 1): Cache Policy:WriteBack, ReadAdaptive, Direct, Write Cache OK if bad BBU
Adapter 0-VD 2(target id: 2): Cache Policy:WriteBack, ReadAdaptive, Direct, Write Cache OK if bad BBU
Exit Code: 0x00
[root@localhost MegaCli]#
注:缓存策略已经变为Write Cache OK if bad BBU,即在电池充放电时不关闭缓存。