分布式文件系统(HDFS)的高可靠性主要是由多种策略及机制共同作用实现的。

主要有:

冗余副本策略

可以指定数据文件的副本数量,默认是3;

保证所有的数据块都有副本,不至于在一个datanode宕机后,数据的丢失。


机架策略


集群一般放在不同机架上,机架间带宽要比机架内带宽要小;


HDFS具有“机架感知”能力,它能自动实现在本机架上存放一个副本,然后在其它机架再存放另一副本,这样可以防止机架失效时数据丢失,也可以提高带宽利用率。


心跳机制


Namenode周期性从datanode接收心跳信号和块报告,Namenode根据块报告验证元数据;
Namenode对没有按时发送心跳的datanode会被标记为宕机,不会再给它任何I/O请求;
datanode失效造成副本数量下降,并且低于预先设置的阈值,namenode会检测出这些数据块,并在合适的时机迕行重新复制;
引发重新复制的原因还包括数据副本本身损坏、磁盘错误,复制因子被增大等。


安全模式


Namenode启动时会先经过一个“安全模式”阶段,安全模式阶段不会产生数据写;
在安全模式阶段Namenode收集各个datanode的报告,当数据块达到最小副本数以上时,会被认为是“安全”的;
在一定比例(可设置)的数据块被确定为“安全”后,再过若干时间,安全模式结束;
当检测到副本数不足的数据块时,该块会被复制直到达到最小副本数。


校验和


在文件建立时,每个数据块都产生校验和,校验和会保存在.meta文件内;
客户端获取数据时可以检查校验和是否相同,从而发现数据块是否损坏;
如果正在读取的数据块损坏,则可以继续读取其它副本。


回收站


删除文件时,其实是放入回收站/trash,回收站里的文件可以快速恢复;
可以设置一个时间阈值,当回收站里文件的存放时间超过这个阈值,就被彻底删除,并且释放占用的数据块。


元数据保护


映像文件和事务日志是Namenode的核心数据,可以配置为拥有多个副本;
副本会降低Namenode的处理速度,但增加安全性。


快照机制


支持存储某个时间点的映像,需要时可以使数据重返这个时间点的状态;