您的位置:首页 > 其它

一次服务器宕机分析

2017-10-24 10:19 211 查看
昨天一天线上数据库服务器(hp pc server)宕机,该服务器压力并不大

从硬件监控上是存储有问题的,通过hp自身的日志分析,是阵列卡的电池电量太低引起的。只能保修换了,一下是我整理的的一些只是点:

服务器上的Raid卡电池,简称BBU,是个很重要的组件,它对于磁盘的I/O性能影响很大,但一般的BBU电量只能用90天,电用完后系统会自动给其充电,但因充电一般需要几个小时,在充电期间,Raid卡的cache状态是处于write through的,即不带缓存功能。所以为了保证服务器处于正常运行状态,就需要手工进行BBU的充放电,通常把充放电时间定在夜里面,也就是服务器负载最小的时候。

RAID卡都有写cache(Battery Backed Write Cache),写cache对IO性能的提升非常明显,因为掉电会丢失数据,所以必须由电池提供支持。

       电池会定期充放电,一般为90天左右,当发现电量低于某个阀值时,会将写cache策略从writeback置为writethrough,相当于写cache会失效,这时如果系统有大量的IO操作,可能会明显感觉到IO响应速度变慢,cpu 队列堆积系统load 飙高

RAID cache:

RAID cache技术最近几年,在磁盘存储技术上发展的非常迅速,作为高端存储,cache已经是整个存储的核心所在,就是中低端存储,也有很大的cache存在,包括最简单的RAID卡,一般都包含有几十,甚至几百兆的RAID cache;

RAID cache是磁盘读写速度的关键之一;

作为缓存,cache的作用具体体现在读与写两个不同的方面:

作为写,一般存储阵列只要求数据写到cache就算完成了写操作,当写cache的数据积累到一定程度,阵列才把数据刷到磁盘,可以实现批量的写入。所以,阵列的写是非常快速的。至于cache数据的保护,一般都依赖于镜相与电池(或者是UPS)。

cache在读数据方面的作用一样不可忽视,因为如果所需要读取的数据能在cache中命中的话,将大大减少磁盘寻道所需要的时间

RAID cache的两种使用方法:

Write Through:系统的写磁盘操作并不利用阵列卡的Cache,而是直接与磁盘进行数据的交互,影响写入性能

Write Back:利用阵列Cache作为系统与磁盘间的二传手,系统先将数据交给Cache,然后再由Cache将数据传给磁盘,可提高写入性能

Write Back with BBU:此是阵列卡配有Battery Backup模块元时的可选项,它的作用是用以在系统断电时保护Cache中的数据,避免断电造成中间数据的丢失,也就是我们公司所使用Dell服务器应该的RAID设置

RAID 电池的作用:

用以在系统断电时保护Cache中的数据,避免断电造成中间数据的丢失;

那在更换RAID卡电池之前,服务器虽然已经下线,无数据写入,但还有一部分数据存在RAID cache中,并未写入硬盘中;但一般RAID卡电池坏掉后,RAID卡会自动将写缓存(即write back)禁止,变为write through方式,会使写性能有一定的下降,但不影响数据安全

若RAID电池和某块硬盘同时出现故障,应先更换RAID卡电池,待服务器重启成功,RAID卡工作正常后再更换故障的硬盘,最大限度保证数据安全

————————————————————————————————————————————————————————————————————————————————

4000

磁盘阵列是服务器上历史悠久的一项技术,它能够通过不同的阵列模式合理利用空间和性能配比出性价比极高的磁盘阵列,被绝大部分的服务器OEM厂商所广泛采用。其中以LSI公司的MegaRAIDSAS产品为主,广泛用于各品牌(除惠普外)的x86服务器。
为何有缓存?
阵列卡核心技术包含三部分内容:1、数据条带化;2、数据冗余;3、高速缓存。其中高速缓存就是所谓的阵列卡内存(以下简称缓存):阵列卡控制器通过一系列算法将上层应用请求过来的写请求进行优化并缓存在阵列卡内存里以此提高应用的写性能(上层应用不必等待数据实际Flush到磁盘上即可完成写操作)。由于缓存也属于RAM的一种,因此也存在掉电丢数据的风险。一旦服务器断电,阵列卡内存中的数据就会丢失,这会给应用造成数据完整性的风险。
电池的诞生
为了保障断电后数据的完整性,于是一种可循环充电式的电池被应用到阵列卡内存单元上。如今大部分阵列卡的内存单元都会外接一个可充电式的电池,以此来为断电后的缓存提供电源支持保障数据在一定时间内不丢失(这个时间通常为48小时)。待到下一次服务器再次恢复电源后,阵列卡控制器会将缓存中的数据Flush到磁盘,以避免脏数据的产生。
缓存的供电方式
1、一般情况下服务器通电时缓存使用的是主板供电; 2、服务器断电时阵列卡板卡电路自动将缓存的供电方式由主板切换到电池;
电池为何要进行充放电操作?
阵列卡锂电池,我们知道锂电池有较强的惰性,它在非充电状态下会缓慢地自放电(电池特性),一段时间后电量就会和刚充满电时不同,为了能够及时校准电量避免电池因为自放电而导致电量不明确,于是阵列卡控制器会对电池进行周期性地充放电操作(Relearn),以此保证电量的准确性,同时还可以判断电池是否故障或者老化。
电池充放电会有哪些操作?
1、控制器首先对电池进行完全放电直至零电量;
2、控制器重新对电池进行充电操作直至充满;
3、控制器对电池的电量重新进行计算校准;
4、等待下一个充放电时间点;
为何充放电会引发性能问题?
充放电操作时由于电池电量无法提供足够的数据保障时间,为了避免风险发生阵列卡控制器默认会将缓存关闭,正是由于缓存被关闭而引发了写性能急剧下降的问题。
惠普服务器为何没有同类问题?
1、惠普阵列卡采用的是镍氢电池,它没有惰性,并且特性和锂电池不同,它并不需要通过完全放电来校准电量。2、当镍氢电池由于自放电而导致电量降低时到一定程度时(比如80%),阵列卡控制器会感知到这一信息并对电池进行娟流充电以补充失去的电量,整个过程对用户是透明的,也不需要关闭缓存,因此并不会影响IO性能。
是否存在可充电式电池的替代方案?
有!闪存式电容方案不但可以替代电池提供几乎无限的保护数据时间,并且控制器也不会因为充放电而关闭缓存。闪存式电容能够在服务器断电时,由高容量电容向阵列卡提供短暂的供电(大约几分钟),随后阵列卡控制器会将缓存中的数据全部复制到同等容量的闪存介质上。因为闪存是非易失性存储器,因此可以人为几乎是无限时间的数据保护。待下一次服务器正常通电开机,阵列卡控制器在初始化阶段会将闪存中的脏数据重新Flush到磁盘上。
闪存式电容方案也不是绝对非常完美的,缺点也显而易见,就是成本太高!
为何采用可充电式电池?
1、基于可充电式电池的缓存单元价格低廉,比基于闪存式电容的缓存单元要便宜许多;2、可充电式电池可以通过循环充电已经能够满足一定的数据保护时间。
说到底还是因为成本!

阵列卡自动充放电带来的运维问题?
1、电池寿命有限,更换周期通常是2-3年,更换需要停机操作,增加运维工作量;
2、电池自动充放电时会强制关闭缓存影响阵列性能,给业务造成很大影响,给运维带来压力;
3、由于电池问题引发的问题和故障数不胜数,增加运维团队的工作量。

为何放弃阵列卡自动充放电功能?
1、xiaomi服务器都是双电方案,单电源故障更换操作可在线完成;
2、绑线规范使得电源和插头之间不会出现松动脱离的情况,更加减少了掉电的风险;

3、单个电源的月故障率远远低于磁盘、内存、阵列卡,双电同时故障概率极其低(大约为百万分之1.5552);
解决方案:
1、缓存单元的供电方案更换成闪存式电容;
2、缓存设置为WT(写缓存开启)和CachedBadBBU(强制写缓存开启),AutoLearn仍旧进行只是该过程进行阶段缓存不会被关闭; (推荐)
3、担心AutoLearn期间电池的数据保护时间不够的话,也可以选择不强制打开写缓存,仅在业务低峰期通过MegaCli工具人为进行电池Relearn操作;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: