針對靜默資料錯誤,如何採用DIX和DIF保證資料一致性?
作者:晗狄 來源:微信公眾號(架構師技術聯盟)
原文連結: 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何保證mongodb和資料庫雙寫資料一致性?MongoDB資料庫
- 如何保證MySQL和Redis資料一致性?MySqlRedis
- 如何保證MySQL資料一致性MySql
- 保證Redis和資料庫資料一致性的方法Redis資料庫
- 如何保證快取和資料庫的一致性?快取資料庫
- 資料庫和快取的一致性如何保證資料庫快取
- 趣說 | 資料庫和快取如何保證一致性?資料庫快取
- 冗餘資料一致性,到底如何保證?
- Spark CommitCoordinator 保證資料一致性SparkMIT
- 面試常問:如何保證Redis快取和資料庫的資料一致性NRXW面試Redis快取資料庫
- 使用雙非同步後,如何保證資料一致性?非同步
- Zookeeper 如何保證分散式系統資料一致性分散式
- Oracle Goldengate是如何保證資料有序和確保資料不丟失的?OracleGo
- 如何保證快取與資料庫的雙寫一致性?快取資料庫
- 【NetApp資料恢復案例】針對NetApp誤刪除資料的恢復APP資料恢復
- 【面試普通人VS高手系列】Redis和Mysql如何保證資料一致性面試RedisMySql
- MySQL是怎麼保證資料一致性的MySql
- 如何保證快取(redis)與資料庫的雙寫一致性快取Redis資料庫
- HTTPS 如何保證資料傳輸安全HTTP
- Elasticsearch如何保證資料不丟失?Elasticsearch
- 靜默安裝Oracle11g資料庫Oracle資料庫
- 靜默安裝Oracle資料庫11gOracle資料庫
- 【資料分析】針對家庭用電資料進行時序分析(1)
- 針對python錯誤 format()PythonORM
- 遠端辦公如何保證資料安全?
- 哪些錯誤程式碼表示資料採集被禁止呢?
- 面對流量洪峰,Kafka如何保證資料安全和系統的高吞吐量?Kafka
- 如何全面保護AI資料隱私和資料安全?AI
- PHP 併發扣款,保證資料一致性(悲觀鎖)PHP
- 阿里雲資料庫連線資料庫錯誤:如何解決?阿里資料庫
- 【北亞伺服器資料恢復】LUN對映出錯導致檔案系統一致性錯誤的資料恢復案例伺服器資料恢復
- 19c(19.3) 單機資料庫靜默安裝資料庫
- 靜默方式安裝、升級oracle(二): 建立資料庫Oracle資料庫
- 阿里面試題:如何保證快取與資料庫的雙寫一致性?阿里面試題快取資料庫
- Redis和MySQL如何保持資料一致性?RedisMySql
- 靜默方式安裝、升級oracle(三): 升級資料庫軟體及資料庫Oracle資料庫
- Linux:保證資料安全落盤Linux
- 使用表單驗證,建立資料驗證層,Ajax 統一返回驗證錯誤資訊