HDFS 高可用配置参考http://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html
Hadoop 高可用介绍
Hadoop2.x中的高可靠指的是可以同时启动2个NameNode。其中一个处于工作状态(Active ),另一个处于随时待命状态(Standby)。当一个Active NameNode所在的服务器宕机时,可以在数据不丢失的情况下,手工或者自动将另一个Standby NameNode切换到Active 并继续提供服务。
JournalNode 介绍
- 为了使备用节点(StandbyNameNode)将其状态与Active节点保持同步,两个节点与一组名为“JournalNode”(JN)的单独守护程序进行通信。
- 当Active NameNode执行任何命名空间修改时,会把最近的操作记录写到本地的一个edits文件中(edits file),并传输到大部分中JournalNode(写入2n+1个journalnode上,只要有n+1个写入成功就认为这次写入操作成功了)。
- standby namenode定期的检查,从JournalNode把最近的edit文件读过来,然后把edits文件和fsimage文件合并成一个新的fsimage。Standby NameNode可以确保在集群出错时,NameNode命名空间状态已经完全同步了。
- standby namenode合并生成新的fsimage后会通知active namenode获取这个新fsimage。active namenode获得这个新的fsimage文件之后,替换原来旧的fsimage文件。
主备节点的切换
为了提供快速故障切换,还需要备用节点具有关于集群中块的位置的最新信息。为了实现这一点,DataNodes被配置为具有两个NameNodes的位置,并且向两者发送块位置信息和心跳。
人工切换是通过执行HA管理的命令来改变namenode的状态,从standby到active,或者从active到standby。自动切换则在active namenode挂掉的时候,standby namenode自动切换成active状态,取代原来的active namenode成为新的active namenode,HDFS继续正常工作。
对于HA群集的正确操作至关重要,因此一次只能有一个NameNodes处于活动状态。否则,命名空间状态将在两者之间迅速分歧,冒数据丢失或其他不正确的结果。为了确保这个属性并防止所谓的“分裂大脑情景”,JournalNodes将只允许一个NameNode作为一个作者向JournalNodes写数据。在故障切换期间,要变为活动状态的NameNode将简单地接管写入JournalNodes的角色,这将有效地防止其他NameNode继续处于活动状态,允许新的Active安全地进行故障切换。
Zookeeper 在 Hadoop中的作用
主备节点的自动切换需要配置zookeeper。active namenode和standby namenode把他们的状态实时记录到zookeeper中,zookeeper监视他们的状态变化。当zookeeper发现active namenode挂掉后,会自动把standby namenode切换成active namenode。
JournalNode 和 Zookeeper 的区别
- JournalNode的作用是在HA的两个NameNode之间保持editlog的共享同步。
- Zookeeper的作用是两个NameNode之间互相的错误感知(active的掉了,standby的可以看见)