nn1, nn2, nn3 이렇게 3대의 namenode를 구성하고,

failover 관련 hdfs-site.xml 설정은 아래처럼 sshfence로 구성.

<property>
  <name>dfs.ha.fencing.methods</name>
  <value>sshfence</value>
</property>

<property>
  <name>dfs.ha.fencing.ssh.private-key-files</name>
  <value>/home/exampleuser/.ssh/id_rsa</value>
</property>

 

failover 테스트를 위해 nn1 을 강제로 종료했는데,

다른 namenode가 자동으로 선출되지 않고 zkfc 로그에 아래와 같은 에러가 있음.

INFO org.apache.hadoop.ha.NodeFencer: ====== Beginning Service Fencing Process... ======
INFO org.apache.hadoop.ha.NodeFencer: Trying method 1/1: org.apache.hadoop.ha.SshFenceByTcpPort(null)
WARN org.apache.hadoop.ha.SshFenceByTcpPort: Unable to create SSH session
com.jcraft.jsch.JSchException: invalid privatekey: [B@7bb7a6d5

 

 

JSCH가 ssh 키를 PEM 포맷만 받아먹을 수 있어서 발생한 문제.

// id_rsa 생성할 때 이렇게 그냥 생성했었는데
ssh-keygen -t rsa

// 아래처럼 PEM 포맷으로 생성해주고 테스트하니까 failover가 정상 작동
ssh-keygen -t rsa -m PEM

 

 

 

 

Posted by bloodguy
,