본문 바로가기

Programming/Zookeeper4

ZooKeeper 활용해보기 가장 간단하게 ZooKeeper를 활용하기 위해서 서비스 중인 서버의 연결 상태를 체크하기 위한 용도로 구현을 해보기로 했다. 먼저 서비스 중인 각각의 서버를 Worker라 부르고 이를 모니터링하는 서버를 Monitor라고 부르기로 했다.Znode 구성Worker는 서버 구동 시 ZooKeeper의 /workers 노드의 하위에 Ephemeral 모드로 추가가 된다. 그리고 Monitor는 /workers 노드를 watch하고 있다가 변경사항이 발생하면 하위 노드까지 Watch를 수행한다. 결과적으로 아래 그림과 같은 형태가 되고 Worker1,2가 추가되거나 제거되는 경우 이벤트가 발생하여 Monitor가 인지하게 된다. 이를 통해 굉장히 쉽게 서버 상태를 모니터링할 수 있는 기능을 운영툴에 추가 했다.. 2016. 9. 25.
ZooKeeper API 주키퍼는 Java와 C를 위한 공식적인 API를 제공하고, 주키퍼 커뮤니티에서 .NET, python 등 여러 언어의 비공식적인 API를 제공하고 있다.주키퍼 API의 기본Znode는 주키퍼 앙상블의 핵심 컴포넌트이고 주키퍼 API는 주키퍼 앙상블과 znode의 세세히 조작할 수 있는 간단한 메소드를 제공한다.주키퍼 앙상블에 접속하면 주키퍼 앙상블은 클라이언트에게 하나의 Session ID를 발급한다.주기적으로 서버에 heartbeats를 전송한다. 그렇지 않으면 주키퍼 앙상블은 Session ID를 만료하고 클라이언트는 재연결해야한다.znode Get/Set은 session ID가 존재하는 한 활성화된다.모든 작업이 완료되었다면 주키퍼 앙상블과의 연결을 종료한다. 클라이언트가 오랫동안 비활성화 되면, .. 2016. 9. 25.
ZooKeeper 설치 설치ZooKeeper를 다운 받고 압축을 해제한다. ZooKeeper를 시작하기 위해서는 설정 파일이 필요하므로 conf/zoo.cfg 파일을 생성한다. tickTime=2000 dataDir=/var/lib/zookeeper clientPort=2181tickTime : milliseconds 단위의 heartbeat 시간을 의미한다.dataDir : in-memory 데이터베이스 스냅샷을 저장하기 위한 경로이고, 한편으로는 데이터베이스 갱신 시 작성되는 로그가 저장되는 경로이다.clientPort : 클라이언트의 커넥션을 listen 하는 port.이제 ZooKeeper를 실행할 수 있다. bin/zkServer.sh startZooKeeper의 로그 메세지는 log4j를 사용한다.여기서는 ZooKe.. 2016. 9. 25.
ZooKeeper 개요 Fundamentals주키퍼의 아키텍쳐Client : 서버로 접근하여 정보를 얻는 분산 어플리케이션 클러스트 내 노드들 중 하나이다. 특정 시간 주기로 모든 클라이언트는 서버로 메세지를 보내고 이를 통해 서버는 클라이언트가 살아있음을 인지한다. 이와 유사하게 서버도 클라이언트가 연결 될 때 응답을 전송한다. 클라이언트가 연결된 서버로부터 응답을 받지 못하면 자동으로 다른 서버로 메세지를 redirect 한다.Server : 서버는 주키퍼 앙상블 내 노드들 중 하나로서 클라이언트에게 서비스를 제공한다. 클라이언트에게 응답 패킷을 전달하므로써 서버가 살아있다는 것을 알린다.Ensemble : 주키퍼 서버들의 그룹이다. 하나의 앙상블은 최소한 3개의 노드를 권장한다.Leader : 연결된 노드들 중 어떠한 노.. 2016. 9. 25.