본문 바로가기

DataEngineering/Kafka

[ZooKeeper] 리눅스 ZooKeeper java.net.ConnectionException: 연결이 거부됨 오류 해결 | 프로삽질러

ZooKeeper 클라이언트 ./zkCli.sh 를 실행하니 java.net.ConnectionException : 연결이 거부됨 에러가 뜨면서 실행에 실패하였다. zkSever.sh 실행도 성공까지 오래걸렸는데 산넘어 산이다 !! 그래도 해결했으니까 해결한 과정에서 또 하나 배워간다... 

 

./zkCli.sh java.netConnectionException: 연결이 거부됨 

위의 사진은 ./zkCli.sh 실행 시 출력된 결과인데 저것만으로는 아무리 구글링을 해도 ZooKeeper 관련 java.net.ConnectException 에러를 해결하는 게시글이 마땅히 없어 zookeeper 로그파일을 천천히 뜯어보기로 했다. 

zookeeper 의 logs 디렉토리 

1
2
cd /usr/zookeeper
ls
cd logs
ls
cs

/usr/zookeeper 의 logs 디렉토리

본인이 설정한 Zookeeper 디렉토리의 하위 디렉토리로 logs 디렉토리가 존재한다. logs 디렉토리에서 zookeeper-root-...-.out 파일에 Zookeeper 관련 로그들이 저장되어 있다.

log 파일 뜯어보기

첫번째 라인부터 쭉 훑은 결과, 77번째 라인부터 문제상황이 발생한걸 직감할 수 있는(ㅜㅜ) 에러 로그 메시지들이 쏟아져 나왔다. 

Unable to start AdminServer, abnormally

AdminServerAdeminServerException Problem starting AdminServer on address 0.0.0.0, port 8080 and command URL

caused by: java.io.IOException: Failed to bind to /0.0.0.0:8080

caused by: java.net.BindException: 주소가 이미 사용 중입니다. 

 

즉. java.ConnectionException: 연결이 거부됨 에러는 내부 AdminServer의 8080 port 주소가 이미 다른 어플리케이션에 의해 사용 중이라 bind 되지 못해서 Zookeeper 클라이언트가 서버와 연결하지 못했다는 것을 유추할 수 있다.

netstat -l | grep 8080 명령어를 사용하여  8080 port 를 사용하고 있는 다른 프로세스를 조회해보았는데 사용 중인 프로세스가 없었다. 앞서 zookeeper 환경 설정 변경/추가 시 작성했던 zoo.cfg 파일에 admin.ServerPort를 지정하여 앞으로  ZooKeeper가 사용할 adminPort를 명시했다. 

1
2
3
4
5
6
# zoo.cfg 파일에 아래의 내용 추가
sudo vi /usr/zookeeper/conf/zoo.cfg
 
######################
admin.serverPort=8081
######################
cs

 

admin.serverPort=8081 을 추가한 zoo.cfg

저장 후 zkServer.sh 을 다시 실행 후 zkCli.sh 을 실행하니 zkCli.sh 정상 작동 됨을 확인할 수 있었다. 

+ 앞으로 알 수 없는 에러가 발생하면 로그파일을 뜯어보는 습관을 가지도록 깨달았다ㅜㅜ