布式文件系统研究13:Google File System (3)
时间:2007-04-16 来源:leejianzhou
Google File System
容错和诊断
4.1 高可靠性
4.1.1 快速恢复
不管如何终止服务,MASTER和数据块服务器都会在几秒钟内恢复状态和运行。实际上,GoogleFS不对正常终止和不正常终止进行区分,服务器进程都会被切断而终止。客户机和其他的服务器会经历一个小小的中断,然后它们的特定请求超时,重新连接重启的服务器,重新请求。
4.1.2 数据块备份
如上文所讨论的,每个数据块都会被备份到不同机架上的不同服务器上。对不同的名字空间,用户可以设置不同的备份级别。在数据块服务器掉线或是数据被破坏时,MASTER会按照需要来复制数据块。
4.1.3 MASTER备份
为确保可靠性,MASTER的状态、操作记录和检查点都在多台机器上进行了备份。一个操作只有在数据块服务器硬盘上刷新并被记录在MASTER和其备份的上之后才算是成功的。如果MASTER或是硬盘失败,系统监视器会发现并通过改变域名启动它的一个备份机,而客户机则仅仅是使用规范的名称来访问,并不会发现MASTER的改变。
4.2 数据完整性
每个数据块服务器都利用校验和来检验存储数据的完整性。原因:每个服务器随时都有发生崩溃的可能性,并且在两个服务器间比较数据块也是不现实的,同时,在两台服务器间拷贝数据并不能保证数据的一致性。
每个Chunk按64kB的大小分成块,每个块有32位的校验和,校验和和日志存储在一起,和用户数据分开。
在读数据时,服务器首先检查与被读内容相关部分的校验和,因此,服务器不会传播错误的数据。如果所检查的内容和校验和不符,服务器就会给数据请求者返回一个错误的信息,并把这个情况报告给MASTER。客户机就会读其他的服务器来获取数据,而MASTER则会从其他的拷贝来复制数据,等到一个新的拷贝完成时,MASTER就会通知报告错误的服务器删除出错的数据块。
附加写数据时的校验和计算优化了,因为这是主要的写操作。GoogleFS只是更新增加部分的校验和,即使末尾部分的校验和数据已被损坏而我们没有检查出来,新的校验和与数据会不相符,这种冲突在下次使用时将会被检查出来。
相反,如果是覆盖现有数据的写,在写以前,GoogleFS必须检查第一和最后一个数据块,然后才能执行写操作,最后计算和记录校验和。如果GoogleFS在覆盖以前不先检查首位数据块,计算出的校验和则会因为没被覆盖的数据而产生错误。
在空闲时间,服务器会检查不活跃的数据块的校验和,这样可以检查出不经常读的数据的错误。一旦错误被检查出来,服务器会拷贝一个正确的数据块来代替错误的。
4.3 诊断工具
广泛而细致的诊断日志以微小的代价换取了在问题隔离、诊断、性能分析方面起到了重大的作用。GoogleFS服务器用日志来记录显著的事件(例如服务器停机和启动)和远程的应答。远程日志记录机器之间的请求和应答,通过收集不同机器上的日志记录,并对它们进行分析恢复,我们可以完整地重现活动的场景,并用此来进行错误分析。
批评意见
GoogleFS只能有一个主服务器(Master)——代码不允许存在多个主服务器。这看起来是限制系统可扩展性和可靠性的一个缺陷,因为系统的最大存储容量和正常工作时间受制于主服务器的容量和正常工作时间,也因为它要将所有的元数据进行编制,并且因为几乎所有的动作和请求都经过它。
但是Google的工程师们辩解说事实并不是这样。元数据是非常紧凑的,仅仅只有数 K 到数 M 的大小,并且主服务器通常是网络上性能最好的节点之一;至于可靠性,通常有一个“影子”主服务器作为主服务器的镜像,一旦主服务器失败它将接替工作。另外,主服务器极少成为瓶颈,因为客户端仅仅取得元数据,然后会将它们缓存起来;随后的交互工作是直接与ChunkServer进行。同样,使用单个的主服务器可以大幅度地降低软件的复杂性,如果有多个的主服务器,软件将变得复杂以能够保证数据完整性、自动操作、负载均衡和安全性。
总结
以今天的观点来看,GoogleFS的设计思想并没有什么特别出彩的地方。但是,不要忘了,Google FS在2000年左右的时候就已经设计并实现了,它的设计思想领先了同时代的其他研究小组3年的时间,这恐怕也是Google公司创新能力的最好证明