sshfence 이슈

active 네임노드를 강제로 죽이고 standby 네임노드가 active가 되는 것을 확인하기 위해 설정한 sshfence 가 잘 먹히는지, DFSZkFailoverController가 자동으로 위 명령을 수행하는 것을 확인해보았다.

먼저, active 네임 노드를 kill명령을 통해 강제로 죽이고, standby 네임노드가 active 네임노드로 변환이 되길 기대했으나 변환이 되지 않았다.

리소스 매니저는 정상적으로 변환되는 것이 확인되었다.

허나 active 네임노드를 다시 실행했을 때, 기존 standby 네임노드가 active 네임노드로 변환하는 것으로 보아 DFSZkFailoverController는 정상 동작 하는 것을 확인되어, sshfence를 위주로 검색을 진행했다.

두 가지 에러가 발생하는 것을 확인했다.

  1. ssh 접근 불가
  2. fuser 명령어가 없음.

ssh 접근 불가

2019-02-21 15:38:17,747 INFO org.apache.hadoop.ha.SshFenceByTcpPort.jsch: Connecting to 192.168.56.192 port 22
2019-02-21 15:38:17,756 WARN org.apache.hadoop.ha.SshFenceByTcpPort: Unable to connect to 192.168.56.192 as user hadoop
com.jcraft.jsch.JSchException: java.net.ConnectException: Connection refused (Connection refused)
	at com.jcraft.jsch.Util.createSocket(Util.java:394)

sshfence를 위해 ssh 접속을 해야 하는데 기본 값이 22로 잡혀 있어서 위와 같은 에러가 발생하였다.

테스트를 했던 서버의 ssh 포트는 다른 번호여서 발생한 에러라 생각하고, 먼저 ~/.ssh/config에서 포트번호를 바꿔야하나 싶어서 수정을 했었지만 먹히지 않았다.

그래서 추가로 더 찾아 sshfence에 추가로 port 번호를 기재할 수 있었다.

<property>
  <name>dfs.ha.fencing.methods</name>
  <value>sshfence([[username][:port]])</value>
</property>

value에 sshfence(hadoop:5858)를 적어주어 해당 에러가 더 이상 발생하지 않았다.

fuser 명령어 없음

2019-02-21 15:51:34,990 WARN org.apache.hadoop.ha.SshFenceByTcpPort: PATH=$PATH:/sbin:/usr/sbin fuser -v -k -n tcp 8020 via ssh: bash: fuser: command not found

sshfence는 프로세스 kill을 하기 위해 fuser 명령을 사용하는데, 해당 서버의 운영체제를 CentOS 7, minimum으로 설치해서 그런지 명령어가 없어서 추가로 설치를 진행했습니다.

yum -y install psmisc

두 이슈를 처리 후 정상적으로 standby 네임노드가 active 네임노드로 전환되는 것이 확인되었습니다.

Comments