본문 바로가기
개발관련 자료

쥬피커(Zookeeper) #3 - 사용

by jinu957 2020. 6. 11.
728x90

이번 포스팅에서는 작년 기상청 프로젝트에서 프로세서들을 관리하는 툴이 필요하여 ZooKeeper가 검토되었고 그때 자료조사를 한 내용를 올리도록 하겠습니다.

 

순서는 

 

2020/06/11 - [개발관련 자료] - ZooKeeper #1 - 개요 및 특징

2020/06/11 - [개발관련 자료] - ZooKeeper #2 - 데이터모델

2020/06/11 - [개발관련 자료] - Zookeeper #3 - 사용

 

으로 진행되며 도입 검토 차원에서 이루어진 조사라서 실무적용 보다는 ZooKeeper란 어떤 것인지 파악하는 정도로만 생각하시면 될듯합니다.

 


1. 클러스터 관리

  • 그룹 멤버십 목록을 가질 부모  znode 생성(: /members)
  • 부모 znode 자신을 위한 자식  znode ephemeral 생성 (: /members/m-hostip
  • 자식 znode 데이터는 다른 구성원이 자신과 통신하는데 필요한 정보 저장(: IP/Port) 또는 주기적으로 상태를 변경(load, memory, CPU etc.)
  • 탈퇴하고자  경우 자신에 해당하는  znode 삭제
  • 멤버십 목록, 주기적 갱신( 클라이언트) - 주기적으로 getChildren 실행해서 목록 갱신
  • 멤버십 목록,  Watch 이용( 클라이언트) - 부모 znode getChildren  WATCH 등록하고 getChildren 결과로 목록 갱신
  • NodeChildrenChanged 이벤트 수신 ,  과정 재실행

 

2. 리더 선출

  • 마스터 후보 등록: 부모 znode 자신을 위한 자식 znode 시퀀스 & ephemeral  생성 (: /masters/m-0000000010)
  • 마스터 선출

      - 부모 znode getChild WATCH 등록

      - NodeChildrenChanged 이벤트 수신시, 현재 마스터가 없는지 확인

      - 마스터에 해당 자식 znode 없으면 부모 znode 자식 znode 구한뒤 시퀀스 번호가 가장 작은 znode 마스터로 선택

      - 부모 znode getChild WATCH 등록

 

 

3. 분산 배타적 잠금

  • N개의 클라이언트가 잠금(lock) 소유하려고 시도한다고 가정
  • 클라이언트들을 임시, 순차znode /cluster/locknode 생성
  • 클라이언트들은 잠금 znode 하위의 자식 리스트를 요청한다
  • 가장 낮은 ID 가진 클라이언트가 잠금을 소유한다.
  •  외의 클라이언트들은 감시(WATCH) 수행한다.
  • 통지가 발생할 떄마다 잠금을 확인한다.
  • 잠금을 해제하고 싶은 클라이언트는 노드를 삭제하고 다음 클라이언트가 잠금을 획득하게 된다.

 

4. 기타 용도

  • 이벤트 통지: WATCH 사용
  • pub/sub : SEQUENCE사용
  • 분산카운터: SEQUENCE 또는 znode version 사용

 

5. Kafka 적용

 Kafka 기본 구성 요소와 동작

  • Kafka 발행-구독(publish-subscribe) 모델을 기반으로 동작하며 크게 producer, consumer, broker 구성된다.

 

  • Kafka broker topic 기준으로 메시지를 관리한다.
  • Producer 특정 topic 메시지를 생성한  해당 메시지를 broker 전달한다.
  • Broker 전달받은 메시지를 topic별로 분류하여 쌓아 놓으면, 해당 topic 구독하는 consumer들이 메시지를 가져가서 처리하게 된다.
  • Kafka 확장성(scale-out) 고가용성(high availability) 위하여 broker들이 클러스터로 구성되어 동작하도록 설계되어있다.
  • 심지어 broker 1 밖에 없을 때에도 클러스터로써 동작한다.
  • 클러스터 내의 broker 대한 분산 처리는 아래의 그림과 같이 Apache ZooKeeper 담당한다.

 

  • Zookeeper 분산 메시지 큐의 정보를 관리해주는 역할로 Kafka에서 반드시 실행되어야 한다.
  • Kafka 패키지에 기본적으로 포함되어 있는 config/zookeeper.properties 파일은 하나의 Zookeeper 인스턴스를 실행하는데 쓰이는 설정 파일이다.
  • 3개의 인스턴스로 이루어진 클러스터를 구축하기 위해서는 인스턴스  통신을   필요한 설정을 추가해 주어야 한다.
  • config/zookeeper.properties 파일을 열면 기본적으로 다음의 항목들이 설정되어 있다.
dataDir=/tmp/zookeeper
clientPort=2181
maxClientCnxns=0

 

 

728x90

댓글