容错机制
1.Master容错
具体来说,Master上保存了GFS文件系统的三种元数据。
- 命名空间(Name Space),也就是整个文件系统的目录结构。
- Chunk与文件名的映射表。
- Chunk副本的位置信息,每一个Chunk默认有三个副本。
首先就单个Master来说,对于前两种元数据,GFS通过操作日志来提供容错功能。第三种元数据信息则直接保存在各个Chunk Server上,当Master启动或Chunk Server向Master注册是自动生成。因此当Master发生故障时,在磁盘数据保存完好的情况下,可以迅速恢复以上元数据。为了防止Master彻底死机的情况,GFS还提供了Master远程的实时备份,这样当前GFSMaster出现故障无法工作时,另外一台GFS Master可以迅速接替其工作。
2.Chunk Server容错
GFS采用副本的方式实现Chunk Server的容错。每一个Chunk有多个存储副本(默认有3个),分布存储在不同的Chunk Server上。副本的分布策略需要考虑多种因素,如网络的拓扑、机架的分布、磁盘的利用率等。对于每一个Chunk,必须将所有的副本全部写入成功,才视为成功写入。在其后的过程中,如果相关的副本出现丢失或不可恢复等状况,Master会自动将该副本复制到其他Chunk Server,从而确保副本保持一定的个数。尽管一份数据需要存储三份,好像磁盘空间的利用率不高,但综合比较多中因素,加之磁盘的成本不断降低,采用副本无疑是最简单、最可靠、最有效,而且实现的难度也最小的一种方法。
GFS中的每一个文件被划分成多个Chunk,Chunk的默认大小是64MB,这是因为Google应用中处理的文件都比较大,以64MB为单位进行划分,是一个较为合理的选择。Chunk Server存储的是Chunk的副本,副本以文件的形式进行存储。每一个Chunk以Block为单位进行划分,大小为64KB,每一个Block对应一个32bit的校验和。当读取一个Chunk副本时,Chunk Server会将读取的数据和校验和进行比较,如果不匹配,就会返回错误,从而使Client选择其他Chunk Server上的副本。
点击加载更多评论>>