zk是如何实现hadoop集群的HA (高可用)

zk是如何实现hadoop集群的HA (高可用)

在典型的HA集群中,一般有倆台不同的机器充当nn,(note1 主机 nn ,note2 备用主机nn )。在任何时间,有且只有一台机器处于active状态;另一台机器处于standby状态。 active nn 负责所有客户端的操作,standby nn 主要用于备用,它的主要目的是 active 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 的位置,并向它们发送块文件所在的位置及心跳,

在任何时候,集群中只有一个 NN 处于 Active 状态是极其重要的。否则,在两个 Active NN的状态下 NameSpace 状态将会出现分歧,这将会导致数据的丢失及其它不正确的结果。为了保证这种情况不会发生,在任何时间,JNs 只允许一个 NN 充当 writer。在故障恢复期间,将要变成 Active 状态的 NN 将取得 writer 的角色,并阻止另外一个 NN 继续处于 Active状态。

为了部署 HA 集群,你需要准备以下事项:
(1)、NameNode machines:运行 Active NN 和 Standby NN 的机器需要相同的硬件配置;
(2)、JournalNode machines:也就是运行 JN 的机器。JN 守护进程相对来说比较轻量,所以这些守护进程可以可其他守护线程(比如 NN,YARN ResourceManager)运行在同一台机器上。在一个集群中,最少要运行 3 个 JN 守护进程,这将使得系统有一定的容错能力。当然,你也可以运行 3 个以上的 JN,但是为了增加系统的容错能力,你应该运行奇数个 JN(3、5、7 等),当运行 N 个 JN,系统将最多容忍(N-1)/2 个 JN 崩溃。在 HA 集群中,Standby NN 也执行 namespace 状态的 checkpoints,所以不必要运行Secondary NN、CheckpointNode 和 BackupNode;事实上,运行这些守护进程是错误的。

待会总结 先看学习网址
学习网址:https://blog.csdn.net/qq_42711214/article/details/84109404

发布了105 篇原创文章 · 获赞 87 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/zengxianglei/article/details/94356578
今日推荐