4. Yahoo! 에서 개발
아파치 소프트웨어 재단에서 후원하는 오픈소스 프로젝트
일반적인 분산 시스템 환경에서, 개별적인 프로그램들의 동작을 안정적으
로 ‘코디네이팅’ 해주는 미들웨어 서비스 (또는 Tool?)
5. 기본 특징
분산시스템의 Coordination 작업
즉, 개별적으로 동작하는 여러 프로세스들의 ‘협력’이나 ‘경합’을 조절
경합상황에서의 ‘상호배제’(Mutual exclusion)와 같은 요구사항 구현가능
동기화 기본요소
Lock이나 Master 선출과 같은 동기화 기본요소에 대한 Handling 가능
프로세스 상호간에 전달되는 metadata도 관리, 조작 가능
6. 알아야 할 점!
ZooKeeper는 ‘대용량’ 저장소가 아니다!
애플리케이션 데이터와 코디네이션 데이터의 구분
ZooKeeper는 단지 다양한 분산애플리케이션에서 흔히 사용되는 작업들을 구
현할 수 있도록 핵심 작업(operation)들을 제공함
(마스터 사용, 프로세스들의 응답 체크 etc…)
7. Apache Hbase
클러스터 마스터 선출, 가용서버 목록 저장
클러스터의 메타데이터 관리
Apache Solar
클러스터의 메타데이터 저장
메타데이터 업데이트
8.
9. 기본 개념
파일 시스템의 트리(Tree)와 같은 ‘계층구조’로 구성
부모/자식 개념을 가지고 있으며 Leaf 노드는 ‘데이터’ 노드
server id
/
/master
/workers
/workers/worker-1
/tasks
/tasks/task-1
/assign
/assign/worker-1
run cmd /assign/worker-1/task-1
10. 주요 API
create /path data data를 담고 있는 /path라는 이름의
znode를 생성한다
delete /path /path znode를 삭제한다
exists /path /paht znode가 존재하는지 확인한다
setData /path data /path znode의 데이터를 data로 저장
한다
getData /path /path의 데이터를 반환 한다
getChildren /path /path의 자식 목록을 반환한다.
13. 기본 Flow
클라이언트가 znode의 내용을 알기위해 매번 폴링(Polling) 하는것은 비용이 많
이 소모됨
따라서 주키퍼는 ‘알림’(Notification)에 기반한 매커니즘을 따름
1
c1
c2
zk
2 3
getChildren /tasks
set watch
{ }
create /tasks/task-1
getChildren /tasks
set watch
{ task-1 }
14. Standalone
말 그대로, 하나의 서버에서 실행되는 주키퍼 서비스
이러한 단독 모드에서는 주키퍼의 상태가 복제될 수 없음
Quorum
주키퍼 앙상블(Ensemble)이라고 불리우는 주키퍼 서버 그룹으로 이루어짐.
쿼럼 모드에서는 주키퍼 서버 간 상태가 복제되고, 클라이언트의 요청을 함께
처리
“Quorum” : 투표를 위해 출석이 요구되는
최소 국회의원 숫자
주키퍼 서비스가 제대로 동작하기 위해서는
전체 앙상블 서버 대수의 과반 이상이 정상
동작하고 있어야 함
15. Session
주키퍼 앙상블에 요청하기전에 클라이언트는 반드시 주키퍼 서버와 세션을 수
립(establish)해야 함.
이 세션이 끝나게 되면 해당 클라이언트가 생성한 임시노드는 삭제됨
Session 상태와 전이
NOT_CONNECTED CONNECTING CONNECTED CLOSED
1 2
3
4
5
16.
17. 공식 웹사이트에서 Download (Window)
https://zookeeper.apache.org/releases.html
18. wget 이용 (Linux)
$ wget 'http://apache.mirror.cdnetworks.com/zookeeper/zookeeper-3.4.7/zookeeper-3.4.7.tar.gz'
$ tar xzvf zookeeper-3.4.7.tar.gz
data 디렉토리 생성과 zoo.cfg 생성
$ cd zookeeper-3.4.7
$ mkdir data
$ cd zookeeper-3.4.7/conf
# sample cfg 파일로부터 복사하여 zoo.cfg 생성
$ cp zoo_sample.cfg zoo.cfg
19. 기본 설정 훑어보기
tickTime : 주키퍼 앙상블이 사용하는 시간의 최소 단위. 세션을 타임아웃 시키는 최소 버킷 크
기를 결정
clientPort : 클라이언트가 앙상블로 연결하기위한 TCP 포트
dataDir : 주키퍼 앙상블 구성 서버의 고유값이 저장되는 myid 파일과 데이터의 스냅샷이나 트
랜잭션 로그가 존재한다
initLimit : 팔로워가 리더와 초기에 연결하는 시간에 대한 타임아웃
syncLimit : 팔로워가 리더와 동기화 하는 시간에 대한 타임아웃
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home1/irteam/apps/zookeeper/data
clientPort=2181
20. 각 서버 세팅
최초 압축을 해제한뒤, 압축해제한 디렉토리로부터 zookeeper1, 2, 3을
각각 복사
myid 파일 생성
복사한 각 zookeeper 디렉토리에서 ‘data’ 디렉토리 생성후 myid 파일 생성
$ tar xzvf zookeeper-3.4.7.tar.gz
$ cp zookeeper-3.4.7 zookeeper1
$ cp zookeeper-3.4.7 zookeeper2
$ cp zookeeper-3.4.7 zookeeper3
$ mkdir zookeepr1/data
$ mkdir zookeepr2/data
$ mkdir zookeepr3/data
$ echo 1 > zookeeper1/data/myid
$ echo 2 > zookeeper2/data/myid
$ echo 3 > zookeeper3/data/myid
21. 설정 파일
dataDir을 각 3개의 zookeeper 디렉토리 data 경로로 설정
clientPort 도 마찬가지로 각 zookeeper 에 2181 부터 2183 까지 설정
server.n=host:[쿼럼통신port]:[리더선출port] 를 추가
단, 위 사항은 ‘하나의 서버’에 3개의 zookeeper 인스턴스를 띄울때임. (각각 다른서
버에 있다면 clientPort나 server.n 포트가 동일해도 상관없음.
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home1/irteam/apps/zookeeper[1~3]/data
clientPort=2181~3
server.1=127.0.0.1:2222:2223
server.2=127.0.0.1:3333:3334
server.3=127.0.0.1:4444:4445
24. Master
새로운 워커와 작업을 감시하고 가용한 워커들에게 작업을 할당한다
Worker
마스터가 작업을 실행 할 수 있는 워커를 볼 수 있도록 워커는 시스템에 자신을
등록하고 새로운 작업을 감시한다
Client
클라이언트는 새로운 작업을 생성하고 마스터 워커 시스템으로부터
응답을 기다린다