大数据分布式存储的冗余研究
2016-08-18王利卿张华敏
王利卿++张华敏
摘要:随着分布式存储的广泛应用,分布式的冗余机制也越来越受关注。该文使用马尔可夫链模拟系统的集群状态,对典型的HDFS分布式存储的冗余做了详细的研究和分析,并由数学模型计算出系统的失效率。在保证系统数据安全的情况下,得出一个合理的数据备份数目。并且从理论和试验中证明了该设计可以达到预期的效果。
关键词: 数据库;大数据;分布式存储;HDFS
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)19-0001-02
近年来,在大数据的环境下,数据的存储出现了许多新的需求,关于数据的可靠性已经越来越被受到重视,所以数据的冗余已经成为研究的热点。现在的系统都是大规模并且需要时长时间稳定运行的,而信息的数量和可靠性正是现在大多是企业所要面临的问题和挑战,这就需要对系统的数据冗余程度的可靠性进行详细的分析和研究。而冗余的策略中备份数据的数目和系统的可靠性密切相关,如果设置太少,就会发生在突发情况下数据的丢失和不易恢复,如果备份设置太多,就会造成存储成本的提高和资源的利用不合理。将分布式存储系统建立模型,然后分析HDFS的冗余机制,在保证系统的可靠性的前提下,得出一个合理的备份数目。
1 分布式存储系统冗余模型
分布式存储的可靠性是通过数据的冗余和存储节点的协作来保证的。分布式存储系统中的冗余机制可以调高数据的可靠性和系统的高可用性。是把同一数据存储在多不同的节点实现数据的可用性,就算是个别节点的数据丢失,剩余其他的节点也可以重构原有数据,其原理如图1所示。
复制是最简单的数据冗余策略。是将一个文件复制成多个备份然后分别存储到系统其他不同节点,一旦发生数据丢失,只要其中一个节点有备份,就可以完整的得到数据。一般来说,如果文件的复制的备份数目越多,数据的可用性和可靠性就越高。但是往往随着备份的数目的增加,会造成硬盘利用率的下降,由于增加了数据的备份,也间接的调高了读写效率[1]。备份数目对系统的可用性影响很大,如果创建的太少就会发生数据丢失并且会造成数据热点,如果设置的太多则会造成存储成本的提高和磁盘空间的浪费。HDFS复制的默认数据备份数是3份,即在数据写入的时候,系统就会默认的复制成三份,然后根据一个备份机制分别存在不同的节点[2]。关于备份数目的影响因素:可以手动调整备份数目;备份所在节点存储空间不够就会发生备份块的丢失;如果备份的默认数目是3,但是节点数目低于3,就会发生数据快的备份数目不够的情况,一般来说,HDFS的三份备份需要得三个节点。
分布式存储复制冗余的数据的结构与数据修复过程如图所示,图1中文件复制成S个备份,图2则显示即使有S-1个节点的数据失效,也能重构原文件。
所有的数据按照固定大小(默认的是64M或者是128M)划分成block,称为基本块,然后各节点会自动的再进行备份,得到的数据称为备份块。
图3就是HDFS分布式存储系统的一个基本框架,图中绿色的数据块表示基本块,白色的数据块表示备份块,客户端1在读取数据块1的时候,会优先请求节点 1 提供的1的基本块,只有在读取失败后才会委托节点1提取在节点2,3,4中的备份块。客户端2写入文件 2,首先会在节点3写入基本块3,由节点3将基本块复制将备份存储在其他节点上。分布式存储系统包含许多能复制数据的存储节点,如果这些节点都是足够可靠,则整个系统就是可靠的[3]。而使用的HDFS就是默认的有三个备份,但是系统某些节点总会发生意外,出现故障,会从集群中撤离。对于撤离的节点,系统不再能从这些节点获得任何数据,如果只是一台发生故障,还不会影响整个集群,但是同时有多台服务器发生故障[4],就可能发生数据丢失的后果。一般来说,如果我们要对系统升级,一般会滚动重启,要么也是逐个节点数据转移下线,然后升级再上线[5]。
集群的节点一般有三种状态,即在线、离线和死亡,分别用状态1、状态2和状态3表示,用包含这三种状态的马尔可夫链来模拟整个集群。假设单个节点都是从状态 1开始,一般都是状态1和状态2的互相转换,最坏的状态是状态3。状态变换图如图4所示:
节点的在线时间t,离线时间都满足指数分布[6]。
使用马尔可夫链模拟[7]整个系统。假设在某个时间点,总共有n个备份,有k个可用备份,而剩下的n-k个备份是需要修复的。如果此时的系统有k个可用备份块,定义此时的系统状态为k,若k个可用备份中任何一个失效则系统转为状态k-1,如果n-k个待修复备份中任何一个被修复则系统转为状态k+1。
以下的图5模型是一个连续马尔可夫链,此时的系统有n个备份,定义系统节点是小的概率是kλ,定义系统节点修复的概率是(n-k)。状态0为起始态,表明没有任何可用备份,系统失效。
假定分布式存储系统节点数目是i个,那么i个节点上的备份全部失效的概率(也就是系统完全失效的概率):
得到了i个副本全部失效的情况下系统失效的概率公式,这也是从理论上分析了系统的失效率。
2 实验验证
为进一步验证数据备份的数目和系统的高可靠性和高可用性之间的关系,文中使用分布式系统HDFS进行仿真实验。实验的主要参数如表1所示:
用HDFS做一个简单实验,默认情况下HDFS存在三个备份,冗余度为3,上传一个文件128M*16,也就是说这个文件分成了16个块,存放在集群上。假设如果有任意一个节点能ping到该节点则表示它在线,反之则表示它离线。现在开始研究备份数目和节点失效率这两个因素对系统的可靠性的影响。分别在节点宕机率为0.01和0.05和0.1的情况下,用副本数目分别是2、3、4来测试集群的失效率,表2是数据的失效率与备份的数目和单机大宕机率之间的关系。
从表中发现,备份得数目比较多的时,数据的可靠性就会大一点,目前大家把e-10作为一个界限,当系统的失效率低于这个值时,就是可以接受的,所有在宕机率一般为0.05左右,三份备份数据就是一个合理的备份,这也是HDFS默认的备份数目是3的原因。如果备份太多,就会造成硬盘的浪费,所以选取合适的备份数目,才能在保证系统的可靠性的基础上保证系统的可用性。
3 总结
为了权衡系统的高可用性和高可靠性,就要对分布式存储的冗余策略做一个详细的分析和研究。文中使用马尔可夫链模拟分布式系统的集群状态,然后使用数学手段计算推导系统的失效率。使用HDFS来测试节点的宕机率与数据的失效率成正比,数据的备份数与数据的失效率成反比,一般来说,数据备份数目3是一个合理的值。
参考文献:
[1] TOM White Hadoop权威指南[M].清华大学出版社,2015.
[2] http://www.e-gov.org.cn/xinxihua/news08/201311/145690.html
[3] Jing Tian, Zhi Yang and Yafei Dai, A Data Placement Scheme with Time-Related Model for P2P Storages,Proceeding of Seventh International Conference on Peer-to-Peer Computing, 2007.
[4] 马延辉,HBase企业应用开发实践[M].机械工业出版社,2014.
[5] Lars George HBase权威指南[M].人民邮电出版社,2013.
[6] Weatherspoon H, Chun Byung-Gon, So Chiu Wah, et al. Long-term data maintenance in wide-area storage systems: a quantitative approach[R]. Berkeley USA: University of California, 2005.
[7] 杨传辉,大规模分布式存储系统原理解析与架构实践[M].机械工业出版社,2013.