副本放置策略Copysets论文解读及工程实践
副本放置策略Copysets論文解讀及工程實踐
- 概述
- CopySet論文解讀
- 術語定義
- Random Replication
- Copyset Replication
- Premutation
- Replication
- 工程實踐
- 參考鏈接
概述
分布式存儲追求在系統成本允許的范圍內(一般存儲集群都是三副本,還想方設法的使用條帶化、壓縮等方式降低成本),降低數據丟失的概率,降低故障恢復的時間。好的副本放置策略可以優化整個集群的可用性和一致性。
斯坦福大學曾經出過一篇論文,Copysets: Reducing the Frequency of Data Loss in Cloud Storage,講解了隨機放置副本的問題,提出了copyset副本放置策略。這對很多分布式系統都有借鑒意義。
CopySet論文解讀
本文出現以前,工業界的分布(包括HDFS、GFS、Azure Storage)經常使用隨機副本放置(rack不同),但這種方式丟數據的概率也較大。作者提出使用CopySet放置副本,在5000個節點的RAMCloud集群中,將1%節點故障情況下集群丟數據的概率從之前的99.99%降低到0.15%。
術語定義
- R:數據的副本數量
- N:存儲節點的數量
- S:Scatter width,如果急群中某個存儲節點故障,S個其他存儲節點能參與到集群的修復中。顯然,這個值越大,故障恢復時間就越短。(Ceph集群中S==N)
- copyset:存儲某個數據(GFS中的chunk)的所有存儲節點
- permutation:存儲節點的某種排列方式,例如,N=7可以分解為形如{4, 1, 3, 6, 2, 7 ,5}的premutation
Random Replication
系統對于每一份數據(存儲數據的最小單位,例如GFS中的chunk,WAS中的extent),隨機選出R個不同的存儲節點復制數據。當然,這其中選擇也是有一定技巧的,這些副本不能在同一個故障域(failure domain,如,不同的機架rack、交換機)中。
這種副本架構的工程實踐中,丟數據的概率還是挺大的,根據作者的計算,在上千存儲節點的分布式系統中嗎,當1%的存儲節點同時發生故障,三副本的RamCloud有99.99%的概率丟數據,FaceBook HDFS有22.8%的概率丟數據。
Copyset Replication
Copyset Replication分為兩個階段,Premutation和Replication,相比之前的隨機策略,這種方式可以在縮短故障恢復時間的基礎上降低丟數據的概率(副本分布較均勻)。
Premutation
系統根據R、N,劃分出不同的copyset。每輪劃分出N/R個copyset。每次確保其中的copyset不與當前和之前所有輪次中已經產生的copyset相同,同時需要考慮failure domain的限制。由于每個存儲節點都會分布在每輪的copyset中,因此每輪premutation都可以增大集群的Scatter Width。
Replication
集群根據Premutation選出的replica,尋找合適的copyset放置數據。某一個node可以選擇多個relica
工程實踐
根據上述的描述,一個簡單的生成副本位置的算法如下:
假設在實際工程中故障域只有rack限制,那么算法可以簡化為:
假設有三個rack:A、B、C,每個rack有四個存儲節點A:{1, 2, 3, 4}, B:{5, 6, 7, 8}, C:{9, 10, 11, 12},集群R=3
參考鏈接
總結
以上是生活随笔為你收集整理的副本放置策略Copysets论文解读及工程实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Google Megastore介绍
- 下一篇: Kafka Without ZooKee