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,即在電池充放電時不關閉緩存。