반응형

ZooKeeper란?

  • ZooKeeper란 분산 처리 환경에서 사용 가능한 데이터 저장소이다.
  • 분산 서버 간의 정보 공유, 서버 투입/제거 시 이벤트 처리, 서버 모니터링, 시스템 관리, 분산 락 처리, 장애 상황 판단 등을 지원한다.
  • ZooKeeper는 데이터를 디렉터리 구조로 저장한다.
  • 각각의 디렉터리 노드를 znode라고 부른다. 이는 이름을 변경할 수 없고, 스페이스를 포함할 수 없다.
  • 데이터가 변경되면 클라이언트에게 어떤 노드가 변경됐는지 콜백을 통해서 알려준다.

ZooKeeper 서버 구성

  • ZooKeeper 서버는 일반적으로 3대 이상을 사용하여 서버 수는 홀수로 구성한다.
  • 서버 간의 데이터 불일치가 발생하면 데이터 보정이 필요한데 이 때 과반수 룰을 적용하기 때문이다.
  • Leader와 Follower 서버로 구성되어 있고, 서버들 끼리 자동으로 Leader를 선정하여 모든 데이터 저장을 주도한다.
  • 클라이언트에서 Follower로 데이터 저장을 시도할 때 Follower → Leader → 나머지 Follower로 데이터를 전달하는 구조
  • 요청 → 모든 서버에 데이터 저장 → 응답하는 과정이 동기 방식으로 동작한다.
  • 데이터는 모든 서버에 동일하게 저장된다.
  • 클라이언트는 ZooKeeper 서버 중 한 대에 연결되어 데이터에 접근한다.

znode 종류

  • Persistent Node
    • 한 번 저장되고 나면 세션이 종료되어도 삭제되지 않고 유지되는 노드
    • 명시적으로 삭제하지 않는 한 해당 데이터는 삭제 및 변경되지 않는다.
    • 트랜잭션 로그와 스냅샷 파일이 디스크에 저장되어 시스템을 재시작해도 데이터가 유지된다.
  • Ephemeral Node
    • 특정 노드를 생성한 세션이 유효한 동안 유지되는 노드이다.
    • 클라이언트와 서버 간의 Ping을 제대로 처리하지 못한다면 해당 노드는 자동으로 삭제된다.
    • 이 기능을 통해 클라이언트가 동작하고 있는지 여부를 쉽게 판단할 수 있다.
  • Sequence Node
    • 노드 생성시 Sequence Number가 자동으로 붙는 노드이다.
    • 이 기능을 활용해 분산락을 구현할 수 있다.

Watch

  • 클라이언트의 폴링 없이도 znode의 변화를 감지할 수 있도록 Watch를 통해 알림을 받는 기능을 제공한다.
  • 알림을 받기 위해 클라이언트는 znode에 대해 Watch를 등록하기만 하면 된다.
  • Watch가 알림을 받는 방식은 one-shot이므로, 알림을 받은 후에는 다시 Watch를 등록해야 이후 다시 알림을 받을 수 있다.

참고

반응형

'Development > ZooKeeper' 카테고리의 다른 글

[ZooKeeper] 명령어  (0) 2021.07.11
[ZooKeeper] 설치  (0) 2021.07.11

+ Recent posts