ZooKeeper 시간 동기화와 네임스페이스 z노드

 

·       Version : Zookeeper

 

주키퍼(Zookeeper) 하나 이상의 서버에서 수행되기 때문에 클라이언트의 처리 요청에 따라 버전 정보나, 시간정보등에 대해서 모든 주키퍼 서버가 공유해야한다. 주피커는 아래와 같은 방법으로 시간이나 버전 정보를 관리한다.

·       Zxid (Zookeeper Transaction Id) : 주키퍼 노드의 상태를 변경하는 요청에 대해 부여되는 트랜잭션ID, 모든 변경 요청에 대해서 순차적으로 부여된다. zxid 낮을 수록 먼저 요청되었다는 것을 보장한다.

·       Version numbers : 노드의 데이터가 변경될때 마다 버전 값이 증가. 버전에는 z노드 데이터 변경, 자식 노드의 변경, AC 변경이 있으며 각각 다른 버전이 부여된다.

·       Tick time : 세션 타임아웃, 커넥션 타임아웃 등과 같은 이벤트의 경과 시간을 의미.

·       Real time : 대부분의 경우에 시스템 시간을 사용하지 않지만, 노드의 생성, 수정 일시에 대한 정보는 시스템 시간을 사용한다.

 

주키퍼는 파일 시스템과 유사한 계층적인 네임 스페이스를 제공한다. 이러한 노드를 z노드(znode)라고 한다. z노드는 아래와 같은 특징이 있다.

·       부모 노드에도 데이터 저장 가능

·       크기가 작은 데이터 위주로 저장 (서버의 상태, 정보, 환경 설정등과 같은 크기가 작은 메타 데이터)

·       버전 : z노드에 저장되는 모든 데이터는 버전을 가지고 있음

·       접근권한 : z노드 단위로 권한(ACL) 관리 가능

 

주키퍼 클라이언트는 라이브러리는 대부분 z노드 연산과 관련이 있으며 클라이언트 라이브러리는 JAVA, C, Python, Perl등을 지원한다. 주키퍼 클라이언트 API Zookeeper이라는 클래스를 사용하며 클래스의 생성자에는 3개의 파라메터가 있다.

·       주키퍼 서버 목록 : 콤마(,) 구분하여 구분한다. (EX : server1:2181, server2:2181…) 서버 정보에 루트 패스를 지정할수도 있으며 노드 정보를 같이 입력해주면(EX : server3:2181/app/myapp1)  해당 노드를 루트 노드로 인식한다.

·       세션 타임아웃 : 주키퍼 서버와 클라이언트 연결에 대한 타임아웃으로 단위는 밀리초(ms) 이다.

·       와처(watcher) : 이벤트 리스너를 등록한다.

 

주키퍼 클라이언트 API 동기, 비동기 방식을 모두 지원한다. 비동기 호출을 하더라도 처리되는 순서는 주키퍼 서버에 의해 보장 된다. 아래표는 주키퍼 클라이언트 API 대한 설명이다.

API

설명

exists

특정 노드가 존재하는지 확인. 반환값이 NULL이면 존재하지 않음

create

노드를 생성. 노드 생성시 최대1MB 까지 데이터 함께 저장가능. 이미 노드가 존재하면 KeeperException, NodeExistsException 발생.

delete

특정 노드를 삭제. 노드가 존재하지 않으면 KeeperException, NodeExistsException 발생.

getData

노드의 데이터를 가져옴

setData

노드의 데이터를 설정. 버전이 맞지 않으면 Exception발생. 버전 값이 -1이면 버전에 상관없이 데이터 저장

getChildren

노드의 자식 목록을 가져옴

sync

주키퍼의 모든 서버에 복제본이 저장될때 까지 기다림

 

 

[참고자료]

·       Time in ZooKeeper : https://zookeeper.apache.org/doc/r3.1.2/zookeeperProgrammers.html#sc_timeInZk

·       ZooKeeper | Command Line Utilities: "zkCli" : http://www.mtitek.com/tutorials/zookeeper/zkCli.php

·       Zookeeper - CLI : https://www.tutorialspoint.com/zookeeper/zookeeper_cli.htm

 

 

 

2020-05-06 / Sungwook Kang / http://sungwookkang.com

 

Hadoop, Big Data, 하둡, 빅데이터, 데이터분석, 주키퍼, Zookeeper, 분산 코디네이션

+ Recent posts