針對靜默資料錯誤,如何採用DIX和DIF保證資料一致性?

HitTwice發表於2018-08-10

作者:晗狄 來源:微信公眾號(架構師技術聯盟)

原文連結: https://mp.weixin.qq.com/s/qZ6LcAdYu8k59srycCbWug


靜默資料破壞問題是一直存在 儲存系統中最難解決 的資料一致性問題之一,無論是傳統多控、分散式儲存,還是公有云儲存。對儲存系統設計和開發人員來講,資料一致性問題解決能否解決決定著儲存系統是否可以商用。到這個問題一直沒有成為討論的技術焦點,直到最近騰訊雲事件持續熱化以後,“ 資料一致性 ”問題成成為焦點出現在大眾視野。



什麼是靜默資料破壞?


經常跟資料打交道的人都應該知道,資料在儲存系統傳輸中,經過了多個部件、多種傳輸通道和複雜的軟體處理過程,其中任意一個環節發生錯誤都可能會導致資料錯誤。但是 這種錯誤一般無法被立即檢測出來,而是後續透過應用在訪問資料過程中,才發現資料已經出錯 ,這種資料很難在資料發生錯誤那一刻被檢查出來的錯誤,我們稱為 靜默資料破壞 ,即 Silent Data Corruption


靜默資料破壞為什麼難檢測?


我們知道硬碟最核心的使命是正確的存入資料、正確的讀出資料,在出錯時及時丟擲異常告警。包括硬體錯誤、韌體 BUG 或者軟體 BUG、供電問題、介質損壞等 常規的這些問題 都能夠正常被捕獲丟擲告警或異常,但 靜默資料破壞 表現是資料處理都是正常的,直到你使用的時候才發現資料是錯誤的、損壞的。


靜默資料破壞產生原因


 資料產生靜默資料破壞的原因有很多種,但大致可以歸結為以下幾類。

  • 硬體錯誤: 記憶體、CPU、硬碟、資料傳輸鏈路等

  • Firmware錯誤: HBA、硬碟等

  • 軟體bug: 系統軟體、作業系統、應用程式等

  • 其他因素: 如噪聲、電磁等原因。


資料一致性標準和組織


根據資料處理的路徑,資料一致性修復可以在 應用,中介軟體,儲存層 等來進行修復,目前有大量的介紹應用層修復的文章,請大家搜尋參考。今天筆者講從傳統 儲存、網路和中介軟體 層出發,基於很早分享過一篇文章,談談 端到端 的資料一致性解決方案。


在2007年,由 Emulex、Oracle、LSI、希捷成立了 DII   (Data Integrity Initiative), SNIA建立了 DITWG (SNIA Data Integrity Working Group)。他們主要關注兩個技術:


  • T10 Protection Information— DIF

  • Data Integrity Extensions— DIX


T10標準是透過對每個資料塊加入保護資訊(PI,Protection Information)作為一致性標識,T10曾被稱作資料完整性域(DIF,Data Integrity Field)的方法來保護資料完整性。在 每個邏輯扇區擴充了8位元組的保護資訊 用來保證資料一致性 8位元組 包括 2位元組 的Logical Block Guard, 2位元組 的Logical Block Application Tag和 4位元組 的Logical Block Reference Tag


T10 PI只包含了從主機HBA卡透過儲存陣列到硬碟的資料保護,這就需要另一種機制來延伸資料保護範圍。


DIX為了延伸DIF的保護範圍。 將資料完整性保護擴充到了應用層到HBA。DIX使用和T10 PI一樣的8位元組資料完整性資訊作為資料校驗欄位 。不同的是,DIX中使用了IP Checksum作為Logical Block Guard,降低主機CPU的計算開銷。

DIX+DIF可以實現從應用到硬碟的端到端資料保護。 DIX保證應用、HBA卡的資料完整性,T10 PI(DIF)保證HBA 、陣列和硬碟的資料完整性



DIX和DIF資料讀寫流程


資料完整性額外新增的8位元組校驗資料分若干段, 在儲存側叫DIF,後改名為T10 PI;在主機側叫DIX 。寫資料時,主機 HBA 匯流排介面卡、陣列目標器晶片或者其它元件根據使用者資料生成 8位元組PI,資料傳輸過程中會經過檢查點,校驗資料和PI是否匹配,如果發現錯誤,向上返回錯誤,如果沒有錯誤,則繼續向下傳輸,最終寫入硬碟。


寫資料流程: 當資料寫到主機記憶體的時候,Oracle ASM library會對每512位元組資料增加8位元組DIX校驗,8位元組校驗會隨IO請求一起,穿過OS,到達HBA卡驅動;HBA卡進行DIX校驗檢查後刪除DIX校驗,並生成8位元組PI校驗和資料一起傳送給陣列,陣列校驗資料完整性,並將資料傳送到硬碟。


讀資料流程: 從硬碟讀出資料和T10 PI並校驗完整性。若發現錯誤,則透過RAID重建修復資料, 如果沒有錯誤則繼續向上傳輸。 HBA進行T10 PI校驗後刪除T10 PI,並生成DIX保護資訊返回主機。DIX保護資訊會隨IO請求一起,穿過OS,返回應用層。ASM Library對資料和DIX保護資訊進行校驗。


支援端到端一致性必要條件


要使用資料一致性特性,需要作業系統、中介軟體、HBA卡和儲存支援相應的標準規範。 首先陣列需要支援標準的T10 PI,目前很多儲存裝置都支援該標準。當然,即使上層不支援DIX,儲存也可支援並採用T10 PI標準,實現儲存側資料一致性保護。


目前支援DIX標準的上層元件( 資料庫、作業系統和HBA ),其配置要求和相容性如下(相容性會不斷更新)。 


  • 資料庫: Oracle 11g級以上。

  • OS: Oracle Linux 5 or 6 running the UEK2-200 kernel。

  • HBA: Emulex、Qlogic特定型號的FC HBA卡 


支援DIX的儲存廠商


由於DIX和P10在企業Oracle資料庫應用比較廣泛,基於Oracle在資料庫領域的廣泛應用和影響力,目前 主流的儲存廠商都支援該特性規範 ,目前(不完全統計)具備該規範的產品包括但不限於如下:


  • EMC VNX系列支援自定義T10 PI、VMAX支援標準的T10 PI和DIX

  • HDS HUS系列和HDS VSP支援T10 PI

  • IBM DS8000和DS5000某些特定型號支援T10 PI

  • HP P10000支援標準的T10 PI

  • 華為 OceanStor 18000和V3/V5全系列支援T10 PI。


檔案系統是否要DIF


需要提及一點的是, T10 PI需要磁碟提供520扇區來支援(512用來存放資料,8位元組用來儲存T10 PI校驗資料),希捷支援這種磁碟 。一般情況下,檔案系統不需要DIF,原因是檔案系統透過後設資料管理資料,後設資料不斷變化,容易造成IO的頁面資料佈局不斷變化,針對檔案,資料庫和網路卡廠商相應支援力度不足,並未形成類似規範和標準。

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

相關文章