빅데이터

빅데이터_Chapter06_Zookeeper

강용민 2022. 4. 14. 09:46

Zookeeper란?

주키퍼는 분산 코디네이션 서비스를 제공하는 오픈소스 프로젝트이다.

이러한 어플리케이션의 목적은 개발자가 코디네이션 로직보다는 비즈니스 핵심 로직에 집중하게끔 지원하는 역할을 한다.

주키퍼는 Leader Follower로 구성되는 Master-Slave 아키텍처를 기반으로 구성되어 있다.

NameNode에 장애가 발생하면 모든 클라이언트가 HDFS를 사용할 수 없기에 stanby namenode를 둔다.

 

액티브 네임노드는 네임노드의 역할을 수행하고, 스탠바이 네임노드는 액티브 네임노드와 동일한 메타데이터 정보를 유지하다가,

액티브 네임노드에 문제가 발생하면 스탠바이 네임노드가 액티브 네임노드로 동작하게 됩니다.

액티브 네임노드에 문제가 발생하는 것을 자동으로 확인하는 것이 어렵기 때문에 보통 주키퍼를 이용하여 장애 발생시 자동으로 변경될 수 있도록 합니다.

 

Active Name Node 는 Client 로부터 파일 시스템 쓰기(업데이트, 삭제, 이동 등) 요청을 받으면 클라이언트로써 저널 노드에 접근하여 해당 트랜잭션을 Journal Node 로 전송하고 저장을 요청합니다.

저널 노드(데몬)는 Name Node 로부터 받은 트랜잭션(edit log 내용)를 저널 노드 자신의 로컬 디스크에 저장합니다.

해당 edit log 내용은 전체 저널 노드들에 동시에 쓰여집니다

 

주키퍼의 사용용도

주키퍼는 클러스터에서 구성 서버들끼리 공유되는 데이터를 유지하거나 어떤 연산을 조율하기 위해 주로 사용된다. 주요 사용 용도는 다음과 같다.

  • 설정 관리(Configuration management) : 클러스터의 설정 정보를 최신으로 유지하기 위한 조율 시스템으로 사용된다.
  • 클러스터 관리(Cluster management)  : 클러스터의 서버가 추가되거나 제외될 떄 그 정볼ㄹ 클러스터 안 서버들이 공유하는 데 사용된다.
  • 리더 채택(Leader selection) : 다중 어플리케이션 중에서 어떤 노드를 리더로 선출할 지를 정하는 로직을 만드는 데 사용된다. 주로 복제된 여러 노드 중 연산이 이뤄지는 하나의 노드를 택하는 데 사용된다.
  • 락, 동기화 서비스(Locking and synchronization service) :  클러스터에 쓰기 연산이 빈번할 경우 경쟁상태에 들어갈 가능성이 커진다. 이는 테이블 불일치를 발생시키기에 클러스터 전체를 대상을 동기화해 경쟁상태에 들어갈 경우를 사전에 방지한다.

 

[참조]

https://engkimbs.tistory.com/660

https://eyeballs.tistory.com/251