问题描述:
在我的 Hadoop 集群中,我配置了双节点的高可用性(HA)架构,其中每个节点都承担着 NameNode 的角色。最初,主 NameNode(Active)位于 Master1 上,而备用 NameNode(Standby)位于 Master2 上。然而,当我停止了 Master1 上的主 NameNode 时,我们期望备用 NameNode 在一段时间后能够自动转变为主(Active)状态。但是,我发现在这种情况下,备用 NameNode 并没有按预期转变为主(Active)状态。当我重新启动 Master1 上的主 NameNode 后,备用 NameNode 才成功地转变为主(Active)状态。
zkfc报错如下所示:
2024-04-07 09:30:46,582 WARN org.apache.hadoop.ha.SshFenceByTcpPort: Unable to create SSH session
com.jcraft.jsch.JSchException: invalid privatekey: [B@6489bbad
at com.jcraft.jsch.KeyPair.load(KeyPair.java:664)
at com.jcraft.jsch.KeyPair.load(KeyPair.java:561)
at com.jcraft.jsch.IdentityFile.newInstance(IdentityFile.java:40)
at com.jcraft.jsch.JSch.addIdentity(JSch.java:406)
at com.jcraft.jsch.JSch.addIdentity(JSch.java:366)
at org.apache.hadoop.ha.SshFenceByTcpPort.createSession(SshFenceByTcpPort.java:121)
at org.apache.hadoop.ha.SshFenceByTcpPort.tryFence(SshFenceByTcpPort.java:90)
at org.apache.hadoop.ha.NodeFencer.fence(NodeFencer.java:113)
at org.apache.hadoop.ha.NodeFencer.fence(NodeFencer.java:92)
at org.apache.hadoop.ha.ZKFailoverController.doFence(ZKFailoverController.java:559)
at org.apache.hadoop.ha.ZKFailoverController.fenceOldActive(ZKFailoverController.java:532)
at org.apache.hadoop.ha.ZKFailoverController.access$1100(ZKFailoverController.java:63)
at org.apache.hadoop.ha.ZKFailoverController$ElectorCallbacks.fenceOldActive(ZKFailoverController.java:968)
at org.apache.hadoop.ha.ActiveStandbyElector.fenceOldActive(ActiveStandbyElector.java:1022)
at org.apache.hadoop.ha.ActiveStandbyElector.becomeActive(ActiveStandbyElector.java:921)
at org.apache.hadoop.ha.ActiveStandbyElector.processResult(ActiveStandbyElector.java:499)
at org.apache.zookeeper.ClientCnxn$EventThread.processEvent(ClientCnxn.java:684)
at org.apache.zookeeper.ClientCnxn$EventThread.run(ClientCnxn.java:563)
2024-04-07 09:30:46,582 WARN org.apache.hadoop.ha.NodeFencer: Fencing method org.apache.hadoop.ha.SshFenceByTcpPort(null) was unsuccessful.
2024-04-07 09:30:46,582 ERROR org.apache.hadoop.ha.NodeFencer: Unable to fence service by any configured method.
2024-04-07 09:30:46,583 WARN org.apache.hadoop.ha.ActiveStandbyElector: Exception handling the winning of election
刚开始使用的是 ssh-keygen -t rsa 这种免密方式,不能切换,修改后:ssh-keygen -t rsa -m PEM 这种可以。
使用 ssh-keygen -t rsa -m PEM
命令生成的密钥遵循了 PEM 格式的标准,而不仅仅是 SSH 的默认格式。PEM 是一种通用的格式,它在加密领域和各种应用程序之间都得到了广泛的应用。在某些情况下,尤其是在特定的系统或配置中,使用 PEM 格式的密钥可能会更加兼容和可靠。
对于 Hadoop 高可用性(HA)架构,尤其是在配置故障转移时,使用 PEM 格式的密钥可能是必要的。PEM 格式提供了更广泛的兼容性,可能会避免一些潜在的问题,并确保故障转移功能正常运行。
因此,尽管 ssh-keygen -t rsa
生成的密钥对通常也可以工作,但在某些情况下,特别是在涉及到故障转移等关键任务时,使用 PEM 格式的密钥可能会更可靠。
转自:https://blog.csdn.net/garry1861/article/details/121110630