3

我在由三个节点组成的集群上使用 Apache Hadoop-2.7.1

nn1 主名称节点

nn2(第二个名称节点)

dn1(数据节点)

我已经配置了高可用性,并且 nameservice 和 zookeeper 在所有三个节点上都工作
,它作为领导者在 nn2 上启动

首先,我必须提到 nn1 处于活动状态,而 nn2 处于待机状态

当我在 nn1 上杀死名称节点时

,nn2 变为活动状态,因此正在发生自动故障转移

但在以下情况下(我在 nn1 处于活动状态且 nn2 处于待机状态时应用)并且是:

当我关闭 nn1 时(nn1 整个崩溃)

nn2 保持待机并且不会变为活动状态,因此不会发生自动故障转移

日志中有明显错误

Unable to trigger a roll of the active NN(which was nn1 and now it is closed ofcourse)

nn2 和 dn1 上的两个现有日志节点不应该发生自动故障转移

可能的原因是什么?

4

2 回答 2

2

通过更改 hdfs-site.xml 中的 dfs.ha.fencing.methods 解决了我的问题

不仅包括 ssh 防护,还包括另一种外壳防护方法

总是返回真

<name>dfs.ha.fencing.methods</name>
<value>sshfence
       shell(/bin/true)
</value>

如果防护失败,自动故障转移将失败,我指定了两个选项,第二个选项(shell(/bin/true))总是返回成功。这是针对主要 NameNode 机器出现故障且 ssh 方法将失败且不会执行故障转移的解决方法情况。我们想避免这种情况,所以第二种选择无论如何都是故障转移

你可以在这里找到详细信息https://www.packtpub.com/books/content/setting-namenode-ha

于 2017-04-16T10:33:35.997 回答
0

这似乎是由于sshfence防护方法中的一个错误,标识为HADOOP-15684,在 3.0.4、3.1.2 和 3.2.0 中修复,并通过HDFS-14397向后移植到 2.10.0 。

于 2021-05-11T22:10:50.843 回答