hadoop高可用配置权限异常 Unable to fence NameNode at cls1/10.1.196.22:8020

____simple_html_dom__voku__html_wrapper____>

背景:arrm架构,3台节点 高可用

namenode:cls1,cls2

datanode:cls1,cls2,cls3

JournalNode:cls1,cls2,cls3

DFSZKFailoverController:cls1,cls2

hadoop高可用配置权限异常 Unable to fence NameNode at cls1/10.1.196.22:8020

遇到的问题是:

kill 掉 active 这个节点的nameNode ,cls2 无法转成成新的activate  , 高可用 无法激活,如下:

fencing 失败:

hdfs-site.xml 中     <property>
                <name>dfs.ha.fencing.methods</name>
                <value>sshfence</value>
        </property>  这个参数是控制 active 和 standby 转化通道,但是以下报错:

hadoop高可用配置权限异常 Unable to fence NameNode at cls1/10.1.196.22:8020

JSch 发起了 publickey 认证,但服务端不接受它的公钥签名算法/类型。OpenSSH 9.x 默认策略非常严格,而 JSch 0.1.54 很老,通常只会用 ssh-rsa(SHA1) 或者不支持 rsa-sha2-256/512 的用户认证签名,于是被拒。

所以你手工 ssh 能成功不代表 JSch 能成功:OpenSSH 客户端支持 rsa-sha2/ed25519 等新算法,但 JSch 0.1.54 不行。

解决方法:

现在按下面做,cls1、cls2 都要做一遍(谁当被 fence 的那台,谁的 sshd 都得允许 JSch 的 ssh-rsa)。

1)在 cls2 修改正确配置文件

在 cls2:

sudo cp -a /usr/etc/sshd_config /usr/etc/sshd_config.bak.$(date +%F_%T)

# 追加(或你用 vi 手工加也行)
echo 'PubkeyAcceptedAlgorithms +ssh-rsa' | sudo tee -a /usr/etc/sshd_config

一般只加这一条就够了(HostkeyAlgorithms 不必加)。

然后重启 sshd(别 reload,直接 restart 最稳):

sudo systemctl restart sshd || sudo service sshd restart

验证生效:

sudo sshd -T | grep -i pubkeyacceptedalgorithms

✅ 输出里应出现 ssh-rsa。

2)在 cls1 同样修改 /usr/etc/sshd_config

在 cls1 重复同样操作(同理,避免以后反向 fencing 又失败)。

3)重启两边 zkfc 让它重新 fencing

在 cls1、cls2:

hdfs –daemon stop zkfc
hdfs –daemon start zkfc

然后看:

hdfs haadmin -getAllServiceState

— 最准结果:

hadoop高可用配置权限异常 Unable to fence NameNode at cls1/10.1.196.22:8020

© 版权声明

相关文章