Dell的服务器因为性价比高,是中小企业构建IT设施采用的主流品牌。
下面简单说一下Dell服务器的RAID卡的性能调整。个人在这方面的经验并不十分丰富,有可能理解有误。
问题的焦点,是因为RAID卡的缓存模块的(BBU)电池,具体的原理,这里并不深研,有兴趣的同学,可跟据下面提供的URL自行研究。这块电池是可充电池,我的理解是这样的:这块电池的作用,是用来“保护数据”的,即当服务器突然掉电时,RAID卡的电池储存的电能足以驱动RAID卡和磁盘,某些固化在RAID卡中的程序会将RAID卡“缓存”(注意这里提到的缓存)的数据,写到磁盘上,从而降低、减少数据丢失的风险。
可能是可充电池的特性,这块可充电电池,在不使用时,也会有微弱的放电现象,当它的电量放电到低到一定程度时,RAID卡程序,会对电池进行一次“放电”,将剩余的电量放掉,然后再进行一次“充电”。
这其实是一种对“电池”保护机制,以及对RAID设施可用性提供保障的机制。
问题就出在这个放电、充电的过程。
默认情况下,当RAID卡的电池的电量低于某阈值时,RAID卡固化程序认为此时的电池是不可用的,为了保证数据的安全,会禁用RAID的“缓存”,这种默认的机制本来是合情合理的,没有什么可“质疑”的。问题是,当RAID的缓存被禁用之后,RAID的I/O能力会有所下降(这简直是一定的)。对于高I/O的应用来说,这种下降,有可能是致命的,可能会导致系统I/O阻塞,构架不良的系统,有可能会被这个“故障点”(正在充放电的设备上的应用)拖死。
有两种方法解决这个问题:
1. 检查电池的状态,对电池的充放电进行撑握,也可有计划地安排手动充放电。
此时I/O性能依然是会下降的,可以安排在系统负载低的时候进行手动充放电,从而避免充放电在未知的时间里自动进行充放电,影响业务。
2. 为了保障性能,粗暴地改变RAID卡策略,使在充放电时,不禁用RAID卡缓存。
些时I/O的性能不会下降,但是,假如在此时服务器掉电,RAID卡缓存中的数据会来不及写进磁盘,从而造成数据的丢失。
使用1比较稳妥,但是比较耗时、耗力。使用2比较简单,对于不是非常重要的数据、某者还有别的冗余方案的应用,可以使用。
Dell的服务器,大多使用的都是LSI的MegaRAID卡,查看系统使用的什么RAID卡,可以使用lspci命令,这个假如包含在pciutils包中。
常见的MegaRAID卡:
- 02:0e.0 RAID bus controller [0104]: Dell PowerEdge Expandable RAID controller 4 [1028:0013] (rev 06)
- 04:03.0 RAID bus controller [0104]: Dell PowerEdge Expandable RAID controller 4/Di [1028:000f] (rev 02)
- 02:04.0 RAID bus controller [0104]: American Megatrends Inc. MegaRAID [101e:1960] (rev 02)
- 02:03.0 RAID bus controller [0104]: LSI Logic / Symbios Logic MegaRAID [1000:1960] (rev 01)
也可以通过lsmod | grep megaraid 来检查系统使用的是不是MegaRAID卡。
MegaRAID卡,可以通过官方提供的工具MegaCli来进行控制,对缓存的控制策略调整就用这个工具来进行操作。
MegaCli的当前版本可从这里下载。
假如你使用的是RHEL或者CentOS,可使用我的repo安装,步聚如下:
1) wget -P /etc/yum.repo.d http://www.bsdmap.com/bsdmap.repo
2) yum install megacli
默认安装在/opt/MegaRAID/MegaCli/目录下,32位系统为MegaCli,64位系统为MegaCli64,以64位系统为例:
1. 查看当前“策略”
/opt/MegaRAID/MegaCli/MegaCli64 -ldinfo -lall -a0
Adapter 0 — Virtual Drive Information:
Virtual Disk: 0 (Target Id: 0)
Name:Virtual Disk 0
RAID Level: Primary-0, Secondary-0, RAID Level Qualifier-0
Size:953344MB
State: Optimal
Stripe Size: 64kB
Number Of Drives:1
Span Depth:1
Default Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU
Current Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU
Access Policy: Read/Write
Disk Cache Policy: Disk’s Default
Virtual Disk: 1 (Target Id: 1)
Name:
RAID Level: Primary-5, Secondary-0, RAID Level Qualifier-3
Size:3813376MB
State: Optimal
Stripe Size: 64kB
Number Of Drives:5
Span Depth:1
Default Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU
Current Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU
Access Policy: Read/Write
Disk Cache Policy: Disk’s Default
Exit Code: 0×00
2. 调整
/opt/MegaRAID/MegaCli/MegaCli64 -LDSetProp CachedBadBBU -lall -a0
再查看
/opt/MegaRAID/MegaCli/MegaCli64 -ldinfo -lall -a0
Adapter 0 — Virtual Drive Information:
Virtual Disk: 0 (Target Id: 0)
Name:Virtual Disk 0
RAID Level: Primary-0, Secondary-0, RAID Level Qualifier-0
Size:953344MB
State: Optimal
Stripe Size: 64kB
Number Of Drives:1
Span Depth:1
Default Cache Policy: WriteBack, ReadAheadNone, Direct, Write Cache OK if Bad BBU
Current Cache Policy: WriteBack, ReadAheadNone, Direct, Write Cache OK if Bad BBU
Access Policy: Read/Write
Disk Cache Policy: Disk’s Default
Virtual Disk: 1 (Target Id: 1)
Name:
RAID Level: Primary-5, Secondary-0, RAID Level Qualifier-3
Size:3813376MB
State: Optimal
Stripe Size: 64kB
Number Of Drives:5
Span Depth:1
Default Cache Policy: WriteBack, ReadAheadNone, Direct, Write Cache OK if Bad BBU
Current Cache Policy: WriteBack, ReadAheadNone, Direct, Write Cache OK if Bad BBU
Access Policy: Read/Write
Disk Cache Policy: Disk’s Default
Exit Code: 0×00
http://linux.dell.com/repo/hardware/
http://tools.rapidsoft.de/perc/
http://linux.dell.com/wiki/index.php/Repository/firmware
http://hwraid.le-vert.net/wiki/LSIMegaRAID
http://hwraid.le-vert.net/wiki/LSIMegaRAIDSAS