標籤:raid ssd 資料一致性
RAID系統是用來對儲存資料進行資料保護的有效手段。在RAID建立過程中往往會存在一個時間極長的系統初始化過程,為什麼RAID初始化過程中會存在這樣的一個操作呢?這個操作對SSD會導致什麼方面的影響呢?儲存老吳從技術研發的角度和大家一起對RAID初始化過程進行分析、研究。
傳統RAID的基主要組織結構如所示:
650) this.width=650;" title="1.jpg" alt="wKioL1XG1z_CDEmiAADN2K33QkA096.jpg" src="http://s3.51cto.com/wyfs02/M01/71/1F/wKioL1XG1z_CDEmiAADN2K33QkA096.jpg" />
所有加入RAID Group的盤會按照LBA地址切分成一系列的切片,這些切片被稱之為Stripe Unit,不同盤中相同LBA地址所對應的Stripe Unit會組織成一個條帶(Stripe)。在一個條帶中對所有資料進行編碼,例如RAID6產生兩個編碼資料區塊P和Q,可以允許兩個資料盤同時損壞。
所以,在RAID系統中,所有條帶中的資料都需要滿足編解碼演算法規則,即條帶中的所有資料可以按照一定規則產生編碼資料,並且該編碼資料和條帶中儲存的編碼資料相同。這種情況被稱之為該條帶中的資料是一致的。當一個磁碟發生故障時,可以通過儲存在條帶中的編碼資料恢複丟失的資料區塊。
如果一個條帶中的資料不一致,即條帶中的資料計算得到的編碼結果和儲存的編碼資料不相同,那麼一旦一個磁碟發生故障,那麼通過儲存在條帶中的編碼資料將無法正確恢複丟失的資料區塊。所以,一個資料不一致的條帶將會在故障發生時導致資料正確性問題。
在建立一個RAID系統時,RAID Group中的磁碟可能是新盤,也可能是一塊已經被使用過的資料盤,這些盤上的資料不會全是零。在這種情況下,採用這些盤構建的資料條帶一定不能滿足資料一致性的需求。即每個條帶中的資料按照一定規則計算得到的編碼資料和條帶中的編碼資料是不相符的。這種資料不一致的條帶將會對RAID資料正確性問題引入極大的風險。
正因為這個原因,在建立一個RAID的時候需要考慮將系統中所有的條帶進行初始化,以此來保證條帶中資料的一致性。條帶初始化通常可以採用兩種方式來解決:
1, 通過全盤寫零的方式初始化RAID系統中的所有的條帶。資料全零的條帶,其校正資料也為零。因此,全零資料可以保證條帶的一致性。
2, 將所有條帶進行校正計算,更新條帶中的校正資料,以此達到條帶資料的一致性。
當一個RAID系統被初始化完成後,所有條帶中的資料將會變得一致,如所示:
650) this.width=650;" width="882" height="301" title="2.jpg" style="width:714px;height:229px;" alt="wKiom1XG1VazKW-cAAG58A9PTqk379.jpg" src="http://s3.51cto.com/wyfs02/M01/71/23/wKiom1XG1VazKW-cAAG58A9PTqk379.jpg" />
RAID系統初始化過程是一個非常漫長的過程,其主要原因是需要對系統中所有條帶進行初始化。還需要考慮和前端使用者IO之間的效能平衡,所以,RAID系統初始化往往是一個後台執行的一個過程,會持續較長時間,並且對前端應用的效能造成影響。
對於SSD而言,RAID系統初始化過程還會引入其他問題。在系統初始化過程中,無論是採用寫零還是校正資料更新的方式,都需要向SSD盤寫入資料,這個過程會導致無謂的資料寫放大。使用者資料還沒有被寫入的時候,通過初始化的方式就已經在SSD內部建立了資料對應表。對SSD而言降低了使用壽命和效能。因此,一個針對SSD的RAID系統需要考慮對系統初始化過程的最佳化,傳統RAID是不會考慮到SSD這個特殊特性的。所以,傳統RAID不能直接在SSD上進行部署,會對SSD本身的壽命和效能造成影響。
RAID系統採用資料條帶化的方式對資料進行保護,但是在條帶化資料保護的過程同樣引入了一系列問題,系統初始化就是一個典型的條帶一致性問題。一個優秀的RAID資料保護系統在設計的過程中都會解決掉這個問題,例如EMC的Data Domain RAID就不存在系統初始化過程,當然其需要和檔案系統進行配合,並且在RAID條帶資料分布上做了很多的最佳化。
本文出自 “儲存之道” 部落格,請務必保留此出處http://alanwu.blog.51cto.com/3652632/1683079
你知道RAID的初始化過程嗎?