陣列卡快取電池充放電問題詳解

小米運維發表於2019-01-02

本文主要詳細解釋了與陣列卡快取電池充放電相關的各方面的問題。

磁碟陣列是伺服器上歷史悠久的一項技術,它能夠透過不同的陣列模式合理利用空間和效能配比出價效比極高的磁碟陣列,被大部分伺服器OEM廠商所廣泛採用。其中以LSI公司的MegaRAID SAS產品為主,廣泛用於各品牌(除惠普外)x86伺服器。

為何有快取?

陣列卡核心技術包含三部分內容:

1、資料條帶化;

2、資料冗餘;

3、快取記憶體。

其中快取記憶體即所謂的陣列卡記憶體(以下簡稱快取):陣列卡控制器透過一系列演算法將上層應用下發的寫請求進行最佳化並儲存在陣列卡的快取記憶體內以此提高應用的寫效能(上層應用不必等待資料實際Flush到磁碟上即可完成寫操作)。由於陣列卡快取也屬於RAM(易失性儲存)的一種,因此也存在掉電丟資料的風險。一旦伺服器斷電,陣列卡快取中的資料就會丟失,這會給應用造成資料一致性的風險。

電池的誕生

為了保障斷電後資料的一致性,於是一種可迴圈充電式的電池被應用到陣列卡快取單元上。如今大部分陣列卡快取單元都會外接一個可充電式的電池包,以此來為斷電後的快取提供電源支援,同時保障資料在一定時間內不丟失(這個時間通常為48小時)。待到下一次伺服器再次恢復電源後,陣列卡控制器會將快取中的資料Flush到磁碟,以避免髒資料的產生。

快取的供電方式

1、一般情況下伺服器通電時陣列卡快取使用的是主機板供電;

2、伺服器斷電後陣列卡板卡電路自動將快取的供電方式由主機板切換到電池。

電池為何要進行充放電操作?

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

電池充放電會有哪些操作?

1、控制器首先對電池進行完全放電直至零電量;

2、控制器重新對電池進行充電操作直至充滿;

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

4、等待下一個充放電時間點。

為何充放電會引發效能問題?

充放電操作時由於電池電量無法提供足夠的資料保障時間,為了避免風險發生陣列卡控制器預設會將快取關閉,正是由於快取被關閉而引發了寫效能急劇下降的問題。

惠普伺服器為何沒有同類問題?

1、惠普伺服器使用的是自家設計的基於PMC控制器的陣列卡,它採用的是鎳氫電池。鎳氫電池沒有太強的惰性,並且特性和鋰電池不同,它並不需要透過完全放電來校準電量。

2、當鎳氫電池由於自放電而導致電量降低時到一定程度時(比如80%),陣列卡控制器會檢測到電量下降並對電池進行娟流充電以補充失去的電量。整個過程對使用者是透明的,也不需要關閉快取,因此並不會影響IO效能。

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

有!快閃記憶體式電容方案不但可以替代電池提供幾乎無限的資料保護時間,並且控制器也不會因為充放電操作而關閉快取。快閃記憶體式電容能夠在伺服器斷電時,由高容量電容向陣列卡短暫地供電(大約幾分鐘),隨後陣列卡控制器會將快取中的資料全部複製到同等容量的快閃記憶體介質上。因為快閃記憶體是非易失性儲存器,因此可以認為資料保護時間是無限的。待下一次伺服器正常通電開機,陣列卡控制器在初始化階段會將快閃記憶體中的髒資料重新Flush到磁碟上。

當然快閃記憶體式電容方案也不是絕對完美的,缺點也顯而易見,就是成本太高!

為何採用可充電式電池?

1、基於可充電式電池的快取單元價格低廉,比起基於快閃記憶體式電容的快取單元要便宜許多;

2、可充電式電池透過迴圈充電已經能夠滿足一定的資料保護時間。

說到底還是因為成本!

陣列卡自動充放電帶來的運維問題?

1、電池壽命有限,更換週期通常是2-3年,更換需要停機操作,增加運維工作量;

2、電池自動充放電時會強制關閉快取影響寫效能,給業務效能造成很大影響,給運維帶來壓力;

3、由於電池問題引發的問題和故障數不勝數,增加運維團隊的工作量。

為何放棄陣列卡自動充放電功能?

1、通常伺服器都是雙電方案,單電源故障的更換操作可線上完成;

2、綁線規範使得電源和插頭之間不會出現鬆動脫離的情況,更加減少了掉電的風險;

3、單個電源的月故障率遠遠低於磁碟、記憶體、陣列卡,雙電同時故障機率極其低。

充放電問題的解決方案

1、快取單元的供電方案更換成快閃記憶體式電容;

2、快取設定為WT(寫快取開啟)和CachedBadBBU(強制寫快取開啟),AutoLearn仍舊週期性進行只是該過程進行階段快取不會被關閉;(推薦)

3、擔心AutoLearn期間電池的資料保護時間不夠的話,也可以選擇不強制開啟寫快取,僅在業務低峰期時透過MegaCli工具人為地進行電池Relearn操作。

陣列卡快取電池充放電問題詳解

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559359/viewspace-2287151/,如需轉載,請註明出處,否則將追究法律責任。

相關文章