當前位置:
首頁 > 科技 > 針對靜默數據錯誤,如何採用DIX和DIF保證數據一致性?

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

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

什麼是靜默數據破壞?

經常跟數據打交道的人都應該知道,數據在存儲系統傳輸中,經過了多個部件、多種傳輸通道和複雜的軟體處理過程,其中任意一個環節發生錯誤都可能會導致數據錯誤。但是這種錯誤一般無法被立即檢測出來,而是後續通過應用在訪問數據過程中,才發現數據已經出錯,這種數據很難在數據發生錯誤那一刻被檢查出來的錯誤,我們稱為靜默數據破壞,即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的頁面數據布局不斷變化,針對文件,資料庫和網卡廠商相應支持力度不足,並未形成類似規範和標準。

溫馨提示:

求知若渴, 虛心若愚

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 架構師技術聯盟 的精彩文章:

Flash快閃記憶體顆粒和工藝知識深度解析

TAG:架構師技術聯盟 |