블로그 이미지

2. 주키퍼(zookeeper) 기본 구조

2011.01.26 20:14


1. 주키퍼의 구조

주키퍼는 다중의 서버의 집합을 묶어서 관리해주는 시스템입니다. 그 중에서 리더가 되는 서버를 하나가 존재합니다. 리더라고 불리는 서버는 모든 서버에 중심이 되는 곳입니다. 
 또한 하나의 서버에서 처리가 되어 데이터가 변경되면 모든 서버에 전달되어 동기화를 하게 됩니다. 
주키퍼는 하나의 분산처리 서버입니다.

 

2. SPOF(single Point Of Failure) 처리

말은 어려워도 한개의 서버가 이상 발생시 처리를 뜻합니다.

액티브 서버 : 현재 서비스를 하고있는 서버

스탠바이 서버 : 장애 발생시 대처하기 위한 대기 서버

동작중이던 액티브 서버가 장애가 발생 할 경우 관리시스템이 판단하여 기존의 스탠바이 서버를 액티브 서버로 전환하여 서비스를 처리하는 모습입니다.

 

3. 데이터 모델

주키퍼의 데이터 저장 구조는 파일시스템의 폴더와 파일 구조와 비슷한 형태인 트리 구조로 저장됩니다.

/app1 : 하나의 폴더로 생각
/app1/p_1 : 하나의 노드로 데이터가 저장되는 znode

계층적인 네임스페이스이며 각각의 노드들은 z노드(znode)라고 합니다. znode는 다음과 같은 특징이 있습니다.

  1. 모든 노드에 저장 할 수있다.(부모).
  2. 크기가 작은 데이터로 저장된다.
    서버의 상태, 락 정보, 환경설정 등과 같은 크기가 작은 데이터가 저장된다.
  3. znode는 저장되는 순간부터 버전을 가지고 있다.
    데이터 변경시 버저업이 된다
  4. 접근 권한이 있다.
    znode는 ACL(접근권한)을 관리 할 수있다.

주키퍼의 znode데이터는 메모리에 저장이 된다. 그래서 주키퍼의 힙 메모리 크기 만큼 저장이 가능합니다 이렇게 메모리에 저장되기 때문에 주키퍼는 속도가 빠르게 되었고 물론 영속성을 보존을 위하여 트랜잭션 로그와 스냅샷 파일은 로컬 디스크에 저장이 되어 주키퍼가 재시작을 했을 경우에도 데이터가 유지가 됩니다.


4. 성능


주키퍼는 매우 빠른속도로 동작 됩니다. 하지만 서버 수가 증가함에 따라서 성능은 저하되는 것을 볼수 있습니다.

원본내용 :

The figure ZooKeeper Throughput as the Read-Write Ratio Varies is a throughput graph of ZooKeeper release 3.2 running on servers with dual 2Ghz Xeon and two SATA 15K RPM drives. One drive was used as a dedicated ZooKeeper log device. The snapshots were written to the OS drive. Write requests were 1K writes and the reads were 1K reads. "Servers" indicate the size of the ZooKeeper ensemble, the number of servers that make up the service. Approximately 30 other servers were used to simulate the clients. The ZooKeeper ensemble was configured such that leaders do not allow connections from clients.


5. 신뢰성


주키퍼의 서버가 이상 발생시 SPOF문제를 제대로 처리 하는지 나타내는 그래프 입니다. 위의 그래프에서 이상하게 처리 능력이 하락 하는 부분이 있습니다. 바로 저 부분이 문제가 발생되어 주키퍼가 복구하여 지속적인 서비스를 하게 되는 부분 입니다.

  1. beyondj2ee 2013.04.04 23:42 신고  address  modify / delete  reply

    좋은글 감사 합니다. ^^