HDFS高可用

一、高可用存在背景

在Hadoop2.x之前,HDFS集群中只有一个NameNode节点,而NameNode节点可能会发生单点故障,一旦NameNode节点发生单点故障,整个集群都将处于不可用状态。或者当NameNode节点所属的机器进行软件或硬件升级时,同样会造成整个集群处于不可用状态。
为了解决上述问题,所以出现了HDFS高可用特性。

二、高可用架构

在一个典型的高可用集群中,两个或更多的独立的节点被配置成NameNode。当一个NameNode处于活跃状态,其他的NameNode都处于待机状态。活跃状态的NameNode负责处理客户端的请求等操作,待机节点只保持待机状态,当活跃的NameNode发生故障的时候,待机节点迅速变成活跃状态,提供故障转移。保证集群正常运行。
由一组专门的JournalNodes(JNS)负责所有集群的通信,用来保持待机节点与活跃节点的信息同步。当活跃节点的系统命名空间出现改动时,由JNS来记录这些修改。待机节点会不断地监控JNS的edits日志,并读取。当待机节点读取了JNS的edits之后,会把edits更新到自己的命名空间。当活跃节点发生故障时,备用节点会确保在变成活跃节点之前已经把所有的JNS的信息同步完成。这样,在故障转移时,可以确保备用节点和活动节点的命名空间完全同步。
为了进行快速的故障转移,所以当备用节点转换成活动节点时,不仅要命名空间完全同步,还需要有各个数据块的位置信息,所以,在非故障情况下也就是平时,各个数据节点也要配置所有的NameNode的位置,各个数据节点也需要向活跃节点和备用节点都发送块位置信息和心跳。
一个集群中只可以有一个NameNode处于活跃状态。如果一旦有多个NameNode处于活跃状态,那么两个节点上的命名空间会迅速的产生差异,造成数据块丢失或其他错误。为了防止这种情况(脑裂)的发生,NJS同一时间只允许一个NameNode写edits。

三、部署

在CDH集群里,高可用的配置十分方便。

1.点击HDFS>操作>启动High Availability.

hadoop高可用单点启动namenode hdfs namenode高可用_高可用


2.填写自定义名称

hadoop高可用单点启动namenode hdfs namenode高可用_命名空间_02


3.分配角色

hadoop高可用单点启动namenode hdfs namenode高可用_命名空间_03


4.在每台JN节点上创建目录,用来存放日志。

hadoop高可用单点启动namenode hdfs namenode高可用_大数据_04


更改/data0/jn的所属主与属组(所有节点)

hadoop高可用单点启动namenode hdfs namenode高可用_命名空间_05


hadoop高可用单点启动namenode hdfs namenode高可用_hadoop_06


5.启动High Availability

hadoop高可用单点启动namenode hdfs namenode高可用_hadoop_07


hadoop高可用单点启动namenode hdfs namenode高可用_hadoop_08


两个NameNode,配置完成

hadoop高可用单点启动namenode hdfs namenode高可用_hadoop_09


hadoop高可用单点启动namenode hdfs namenode高可用_命名空间_10


hadoop高可用单点启动namenode hdfs namenode高可用_分布式_11