zookeeper 사용하기
- Posted at 2009/05/19 09:11
- Filed under project/lucene_hadoop
zookeeper는 hadoop의 서브 프로젝트로 분산 환경에서 노드들 간의 정보 공유, 락, 이벤트 등 다양한 용도로 사용됩니다. hadoop이나 neptune과 같은 대규모 분산 시스템에서는 아주 유용한 도구입니다. zookeeper의 활용이나 시스템 아키텍처는 zookeeper 사이트 보다는 구글의 chubby 논문(http://labs.google.com/papers/chubby-osdi06.pdf)을 참고하세요.
neptune의 경우 1.2 버전까지는 pleaides라는 자체 개발한 분산 락 서비스를 사용하였지만 1.3 부터는 zookeeper를 이용하고 있습니다.
분산된 환경을 구성하다 보면 특정 메타 정보를 여러 노드가 공유해야 될 필요가 있습니다. 대부분의 분산 환경에서는 메타 정보를 저장하는 노드에 SPOF(Single Point Od Failure)일 가능성이 높습니다. zookeeper는 3개 또는 5개의 노드가 하나의 zookeeper 셀을 구성하고 각 노드들의 모든 상태 정보는 공유되기 때문에 장애가 발생하지 않는 것이 보장됩니다. 따라서 공유 정보를 zookeeper에 저장하여 보관하면 SPOF를 없앨 수 있습니다.
이런 기능을 수행하기 위해 zookeeper의 기본 기능은 파일 시스템과 비슷한 형태의 스토리지를 제공합니다. 각 노드의 메모리 또는 로컬 파일시스템을 이용하기 때문에 스토리지 용량은 크지 않으며 I/O 속도에 최적화 되어 있지는 않습니다. zookeeper에 저장되는 단이를 znode라고 하는데 znode는 디렉토리와 비슷한 계층적 구조를 가지고 있으며 znode에는 byte[] 형태의 정보를 저장할 수 있습니다. 데이터를 저장할 수 있는 디렉토리 구조를 제공한다고 볼 수 있습니다. znode는 생성 옵션에 따라 메모리와 디스크에 저장되는데 메모리에 저장되는 znode는 생성한 클라이언트의 접속이 끊기면(세션이 종료되면) 자동으로 삭제됩니다.
zookeeper의 또 다른 기능은 각 znode의 변경 상황을 모니터링 할 수 있는 기능입니다. 특정 znode의 상태 정보 변경에 관심있는 zookeeper 클라이언트는 znode에 callback 메소드를 등록할 수 있으며 zookeeper 서버는 상태 정보가 변경되면 등록된 클라이언트로 이벤트를 전송해 줍니다. znode와 이벤트 기능을 이용하여 다양한 기능을 구현할 수 있습니다.
neptune의 경우 다음과 같은 용도로 zookeeper를 사용하고 있습니다.
1. master election: neptune master의 역할은 tablet 할당 역할만 수행하기 때문에 장애가 발생하여도 클러스터에 큰 문제는 없지만 보다 안정적인 서비스를 위해 자체 failover 기능을 가지고 있습니다. 여러 노드에 neptune master를 동시에 수행하게되면 zookeeper를 이용하여 특정 한 노드를 active한 master로 선출하고 나머지 노드는 standby 상태가 됩니다. active 한 노드에 장애가 발생한 경우 zookeeper로 부터 이벤트를 받고 다시 master election 과정을 거쳐 한 노드가 active master로 선출됩니다.
2. tablet server, change log server membership: neptune은 클러스터 운영중에 노드를 추가하거나 제거할 수 있습니다. 이런 노드 추가/제거에 대한 정보를 zookeeper로 부터 이벤트를 받아 처리합니다.
3. 공유정보 저장: root tablet의 위치, active한 master의 노드 정보 등을 zookpeeper에 저장합니다.
4. lock: 전체적인 i/o 스케쥴링을 위해 zookeeper의 znode를 이용하여 lock을 얻습니다.
첨부파일은 master election과 클러스터 member ship에 활용된 예제입니다. zookeeper를 먼저 실행시킨 후 Master를 실행하면 3개의 master가 수행되고 master1이 active master로 선출됩니다. master1을 kill 시키면 master2가 다시 active로 선출됩니다.
Slave를 수행하면 5초 주기로 Slave 객체가 만들어지는데 master 노드에서 추가되는 이벤트를 받는 것을 볼 수 있습니다.
zookeeper 실행은 다운로드 받은 후 압축을 해제한 다음 .conf/zoo_sample.cfg 내용을 수정한 다음 다음 명령으로 실행
java -cp .\zookeeper-3.1.1.jar;.\lib\log4j-1.2.15.jar;.\conf org.apache.zookeeper.server.quorum.QuorumPeerMain .\conf\zoo_sample.cfg

neptune의 경우 1.2 버전까지는 pleaides라는 자체 개발한 분산 락 서비스를 사용하였지만 1.3 부터는 zookeeper를 이용하고 있습니다.
분산된 환경을 구성하다 보면 특정 메타 정보를 여러 노드가 공유해야 될 필요가 있습니다. 대부분의 분산 환경에서는 메타 정보를 저장하는 노드에 SPOF(Single Point Od Failure)일 가능성이 높습니다. zookeeper는 3개 또는 5개의 노드가 하나의 zookeeper 셀을 구성하고 각 노드들의 모든 상태 정보는 공유되기 때문에 장애가 발생하지 않는 것이 보장됩니다. 따라서 공유 정보를 zookeeper에 저장하여 보관하면 SPOF를 없앨 수 있습니다.
이런 기능을 수행하기 위해 zookeeper의 기본 기능은 파일 시스템과 비슷한 형태의 스토리지를 제공합니다. 각 노드의 메모리 또는 로컬 파일시스템을 이용하기 때문에 스토리지 용량은 크지 않으며 I/O 속도에 최적화 되어 있지는 않습니다. zookeeper에 저장되는 단이를 znode라고 하는데 znode는 디렉토리와 비슷한 계층적 구조를 가지고 있으며 znode에는 byte[] 형태의 정보를 저장할 수 있습니다. 데이터를 저장할 수 있는 디렉토리 구조를 제공한다고 볼 수 있습니다. znode는 생성 옵션에 따라 메모리와 디스크에 저장되는데 메모리에 저장되는 znode는 생성한 클라이언트의 접속이 끊기면(세션이 종료되면) 자동으로 삭제됩니다.
zookeeper의 또 다른 기능은 각 znode의 변경 상황을 모니터링 할 수 있는 기능입니다. 특정 znode의 상태 정보 변경에 관심있는 zookeeper 클라이언트는 znode에 callback 메소드를 등록할 수 있으며 zookeeper 서버는 상태 정보가 변경되면 등록된 클라이언트로 이벤트를 전송해 줍니다. znode와 이벤트 기능을 이용하여 다양한 기능을 구현할 수 있습니다.
neptune의 경우 다음과 같은 용도로 zookeeper를 사용하고 있습니다.
1. master election: neptune master의 역할은 tablet 할당 역할만 수행하기 때문에 장애가 발생하여도 클러스터에 큰 문제는 없지만 보다 안정적인 서비스를 위해 자체 failover 기능을 가지고 있습니다. 여러 노드에 neptune master를 동시에 수행하게되면 zookeeper를 이용하여 특정 한 노드를 active한 master로 선출하고 나머지 노드는 standby 상태가 됩니다. active 한 노드에 장애가 발생한 경우 zookeeper로 부터 이벤트를 받고 다시 master election 과정을 거쳐 한 노드가 active master로 선출됩니다.
2. tablet server, change log server membership: neptune은 클러스터 운영중에 노드를 추가하거나 제거할 수 있습니다. 이런 노드 추가/제거에 대한 정보를 zookeeper로 부터 이벤트를 받아 처리합니다.
3. 공유정보 저장: root tablet의 위치, active한 master의 노드 정보 등을 zookpeeper에 저장합니다.
4. lock: 전체적인 i/o 스케쥴링을 위해 zookeeper의 znode를 이용하여 lock을 얻습니다.
첨부파일은 master election과 클러스터 member ship에 활용된 예제입니다. zookeeper를 먼저 실행시킨 후 Master를 실행하면 3개의 master가 수행되고 master1이 active master로 선출됩니다. master1을 kill 시키면 master2가 다시 active로 선출됩니다.
Slave를 수행하면 5초 주기로 Slave 객체가 만들어지는데 master 노드에서 추가되는 이벤트를 받는 것을 볼 수 있습니다.
zookeeper 실행은 다운로드 받은 후 압축을 해제한 다음 .conf/zoo_sample.cfg 내용을 수정한 다음 다음 명령으로 실행
java -cp .\zookeeper-3.1.1.jar;.\lib\log4j-1.2.15.jar;.\conf org.apache.zookeeper.server.quorum.QuorumPeerMain .\conf\zoo_sample.cfg

Posted by 김형준
- Response
- No Trackback , 3 Comments
Trackback URL : http://www.jaso.co.kr/trackback/348
Comments List
-
Good!!
-
갈아타셨군요. ㅋㅋ
Master.java





