陣列卡緩存電池充放電問題詳解

磁盤陣列是服務器上歷史悠久的一項技術,它可以經過不一樣的陣列模式合理利用空間和性能配比出性價比極高的磁盤陣列,被大部分服務器OEM廠商所普遍採用。其中以LSI公司的MegaRAID SAS產品爲主,普遍用於各品牌(除惠普外)x86服務器。算法

爲什麼有緩存?緩存

陣列卡核心技術包含三部份內容:一、數據條帶化;二、數據冗餘;三、高速緩存。其中高速緩存即所謂的陣列卡內存(如下簡稱緩存):陣列卡控制器經過一系列算法將上層應用下發的寫請求進行優化並存儲在陣列卡的高速緩存內以此提升應用的寫性能(上層應用沒必要等待數據實際Flush到磁盤上便可完成寫操做)。因爲陣列卡緩存也屬於RAM(易失性存儲)的一種,所以也存在掉電丟數據的風險。一旦服務器斷電,陣列卡緩存中的數據就會丟失,這會給應用形成數據一致性的風險。服務器

電池的誕生運維

爲了保障斷電後數據的一致性,因而一種可循環充電式的電池被應用到陣列卡緩存單元上。現在大部分陣列卡緩存單元都會外接一個可充電式的電池包,以此來爲斷電後的緩存提供電源支持,同時保障數據在必定時間內不丟失(這個時間一般爲48小時)。待到下一次服務器再次恢復電源後,陣列卡控制器會將緩存中的數據Flush到磁盤,以免髒數據的產生。ide

緩存的供電方式工具

一、通常狀況下服務器通電時陣列卡緩存使用的是主板供電;
二、服務器斷電後陣列卡板卡電路自動將緩存的供電方式由主板切換到電池;性能

電池爲什麼要進行充放電操做?優化

LSI陣列卡用的是鋰電池方案,咱們知道鋰電池有較強的惰性,它在非充電狀態下會緩慢地自放電(電池特性),一段時間後電量就會降低。爲了可以及時校準電量避免電池由於自放電而致使電量不明確,因而陣列卡控制器會對電池進行週期性地充放電操做(Relearn),以此保證電量的準確性,同時還能夠判斷電池是否故障或者老化。設計

電池充放電會有哪些操做?內存

一、控制器首先對電池進行徹底放電直至零電量;

二、控制器從新對電池進行充電操做直至充滿;

三、控制器對電池的電量從新進行計算校準;

四、等待下一個充放電時間點;

爲什麼充放電會引起性能問題?

充放電操做時因爲電池電量沒法提供足夠的數據保障時間,爲了不風險發生陣列卡控制器默認會將緩存關閉,正是因爲緩存被關閉而引起了寫性能急劇降低的問題。

惠普服務器爲什麼沒有同類問題?

一、惠普服務器使用的是自家設計的基於PMC控制器的陣列卡,它採用的是鎳氫電池。鎳氫電池沒有太強的惰性,而且特性和鋰電池不一樣,它並不須要經過徹底放電來校準電量。
二、當鎳氫電池因爲自放電而致使電量下降時到必定程度時(好比80%),陣列卡控制器會檢測到電量降低並對電池進行娟流充電以補充失去的電量。整個過程對用戶是透明的,也不須要關閉緩存,所以並不會影響IO性能。

是否存在可充電式電池的替代方案?

有!閃存式電容方案不但能夠替代電池提供幾乎無限的數據保護時間,而且控制器也不會由於充放電操做而關閉緩存。閃存式電容可以在服務器斷電時,由高容量電容向陣列卡短暫地供電(大約幾分鐘),隨後陣列卡控制器會將緩存中的數據所有複製到同等容量的閃存介質上。由於閃存是非易失性存儲器,所以能夠認爲數據保護時間是無限的。待下一次服務器正常通電開機,陣列卡控制器在初始化階段會將閃存中的髒數據從新Flush到磁盤上。

固然閃存式電容方案也不是絕對完美的,缺點也顯而易見,就是成本過高!

爲什麼採用可充電式電池?

一、基於可充電式電池的緩存單元價格低廉,比起基於閃存式電容的緩存單元要便宜許多;
二、可充電式電池經過循環充電已經可以知足必定的數據保護時間。

說到底仍是由於成本!

陣列卡自動充放電帶來的運維問題?
一、電池壽命有限,更換週期一般是2-3年,更換須要停機操做,增長運維工做量;
二、電池自動充放電時會強制關閉緩存影響寫性能,給業務性能形成很大影響,給運維帶來壓力;
三、因爲電池問題引起的問題和故障數不勝數,增長運維團隊的工做量。

爲什麼放棄陣列卡自動充放電功能?
一、一般服務器都是雙電方案,單電源故障的更換操做可在線完成;
二、綁線規範使得電源和插頭之間不會出現鬆動脫離的狀況,更加減小了掉電的風險;
三、單個電源的月故障率遠遠低於磁盤、內存、陣列卡,雙電同時故障機率極其低;

充放電問題的解決方案:

一、緩存單元的供電方案更換成閃存式電容;

二、緩存設置爲WT(寫緩存開啓)和CachedBadBBU(強制寫緩存開啓),AutoLearn仍舊週期性進行只是該過程進行階段緩存不會被關閉;(推薦)

三、擔憂AutoLearn期間電池的數據保護時間不夠的話,也能夠選擇不強制打開寫緩存,僅在業務低峯期時經過MegaCli工具人爲地進行電池Relearn操做。

相關文章
相關標籤/搜索