本节书摘来自华章计算机《深入理解Hadoop(原书第2版)》一书中的第2章,第2.5节,作者 [美]萨米尔·瓦德卡(Sameer Wadkar),马杜·西德林埃(Madhu Siddalingaiah),杰森·文纳(Jason Venner),译 于博,冯傲风,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
2.5 HDFS 的高可用性
通过前面对HDFS的讲解,我们很清楚地知道在Hadoop1.x系统中,名称节点会引发系统单点故障。Hadoop1.x系统只有一个名称节点,如果运行名称节点服务的节点机器出现故障,那么整个集群将会处于不可用的状态,除非名称节点服务在另外一台机器上重新启动。除了名称节点服务偶尔出现故障,从维护的角度来看,同样存在隐患。如果运行名称节点服务的机器需要重启,那么在名称节点服务无法运行的这段时间内,整个集群是不可用的。
Hadoop2.x引入了高可用名称节点(High Availability NameNode)的概念,在这里,我们只是从概念上做个讲解。访问Hadoop网站可以更详细地了解高可用名称节点的实现细节。
高可用名称节点背后的核心思想是使用两个相同的名称节点:一个处在活动模式(active mode),另一个处在待机模式(standby mode)。处于活动模式的名称节点为系统提供服务,处在待机模式的名称节点需要实时同步活动名称节点的数据,一旦活动名称节点当机,系统可快速的进行故障切换。在当前设计中,为了达到这个目的,两个名称节点必须共享同一个存储设备(通过NFS)。活动名称节点的任何修改都会记录到共享存储设备中的edits日志文件中。待机名称节点将这些修改应用到自己的名称空间中。一旦活动名称节点发生故障,待机名称节点会确保edits文件中的所有数据都被应用,并接管活动名称节点的职责。
我们知道名称节点保存的元数据中不包括数据块的存储位置。这些信息是在数据节点启动过程中,名称节点请求数据节点获得。为了保证待机名称节点的迅速启动,数据节点要知道两个名称节点的位置,并在启动的时候向两个名称节点都发送信息。数据节点也同时向两个名称节点交换心跳信息。