活动名称节点崩溃时不会触发故障转移

failover is not fired when active name node crashes

我在由三个节点组成的集群上使用 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 上的两个现有日志节点上

可能的原因是什么?

我的问题已通过在 hdfs-site.xml 中更改 dfs.ha.fencing.methods

解决

不仅包括 ssh 防护,还包括

的另一种 shell 防护方法

returns 总是正确的

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

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

您可以在此处找到详细信息https://www.packtpub.com/books/content/setting-namenode-ha

这似乎是由于 sshfence 屏蔽方法中的一个错误,标识为 HADOOP-15684, fixed in 3.0.4, 3.1.2, and 3.2.0 as well as backported to 2.10.0 via HDFS-14397