HDFS的高可用性将通过在同一个集群中运行两个NN(active NN & standby NN)来解决上面两个问题,
这种方案允许在机器破溃或者机器维护快速地启用一个新的NN来恢复故障,
为了让Standby NN的状态和Active NN保持同步,
即元数据保持一致,
它们都将会和JournalNodes守护进程通信。
当Active NN执行任何有关命名空间的修改,
它需要持久化到一半以上的JournalNodes上(通过edits log持久化存储),
而Standby NN负责观察edits log的变化,它能够读取从JNs中读取edits信息,
并更新其内部的命名空间。一旦Active NN出现故障,Standby NN将会保证从JNs中读出了全部的Edits,
然后切换成Active状态。Standby NN读取全部的edits可确保发生故障转移之前,是和Active NN拥有完全同步的命名空间状态。
为了提供快速的故障恢复,Standby NN也需要保存集群中各个文件块的存储位置。
为了实现这个,集群中所有的Database将配置好Active NN和Standby NN的位置,
并向它们发送块文件所在的位置及心跳。
总结完毕,不知道有没有帮助到你对hdfs高可用的理解呢?