1. 程式人生 > >陣列卡緩存電池充放電問題詳解

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

設計 relearn 加減 都是 其中 需要 ear 寫性能 容量

磁盤陣列是服務器上歷史悠久的一項技術,它能夠通過不同的陣列模式合理利用空間和性能配比出性價比極高的磁盤陣列,被大部分服務器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操作。

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