[하둡교육 3일차] Zookeeper
Zookeeper 필요성
하둡 이전에 이미 있었던 녀석이다.
특징
1) in-Memory DB(file DB) : 메모리상에 모든걸 다 가지고 있음.(전원이 나가도 무관 - 디스크에 백업은 함, 전원을 키면 디스크에서 읽어들여 다시 메모리에 올림.)
2) 분산 : 데이터 백업에 대해서 고민 하지 않아도 된다.
서버 3대에 Zookeeper가 있다면, 분산으로 같은 데이터를 메모리, disk에 가지고 있다.
하둡이 왜 Zookeeper가 필요로 했나?
일반적인 분산 시스템 구조 : Master/Slave
Master가 죽으면 다 죽음. HDFS에서 Master가 메타데이터를 가지고 있고, Slave가 데이터를 가지고 있음.
성능을 고려 했을 때,
(출처 : http://zookeeper.apache.org/doc/trunk/images/zkservice.jpg)
최근 HA방식(마스터 2개) - Active, Stand-By : Active에 부하 심함
=> Active, Active 방식(데이터 동기화 문제 있음) => Leader/Follower 구조 (리더 권한은 서로 주고 받음)
ex) update시 Follower를 통해 Reader에 요청을 넘기고 Reader가 우선 자기 자신에 파일에 쓰고 나머지도 브로드 캐스팅 해줌. (메모리 저장), done 보고 , Reader가 commit
Zookeeper 데이터 모델
- 디렉토리만 있음.(데이터를 가지는 디렉토리)
- 임시노드(세션이 삭제되면 임시노드도 삭제)
- 시퀀스 노드
- 고속처리
초당 : 5만번 변경, 20만번 읽기
Zookeeper API - 참고 : http://zookeeper.apache.org/doc/r3.4.1/api/
- String create(..)
- void delete(..)
등등
Zookeeper의 Watch 기능
클라이언트는 특정 znode에 Watch를 설정 -> znode 변경이 발생하면 클라이언트에게 알려 줌.
노드 변경 시 Zookeeper가 알려 줌.(push 서비스라 생각하면 됨.)
Zookeeper는 최소 3대로 해야 좋다.
출처 : https://t1.daumcdn.net/cfile/tistory/183AD14F4D40129D2C