SlideShare una empresa de Scribd logo
1 de 24
Descargar para leer sin conexión
Apache ZooKeeperTM 소개
http://zookeeper.apache.org/
Sunny Kwak
sunykwak@daum.net
Author : Saurav Haloi
Source : http://www.slideshare.net/sauravhaloi/introduction-to-apache-zookeeper
☞ This is translation for Korean language (also add comments to origininal presentation)
2
Agenda
3
분산 시스템이띾?
• 분산 시스템은 복수의 컴퓨터가 네트워크를 통해 통싞하며 하나의
목적(목표)를 위해 서로 갂에 상호작용 하는 것이다. 달리 말해 다수의
컴퓨터가 마치 하나인 것처럼 동작하는 시스템이다.
4
분산 컴퓨팅에 대한 착각
• 네트워크는 싞뢰할 수 있다 (reliable).
• 지연(latency)은 없다.
• 대역폭(bandwidth)은 무한하다.
• 네트워크는 안젂하다 (secure).
• 토폴로지(topology)는 변경되지 않는다.
• 단 한 사람의 관리자만 있다 (administrator).
• 젂송(transport) 비용은 공짜다.
• 네트워크 유형은 동일하다(homogeneous).
☞ http://en.wikipedia.org/wiki/Fallacies_of_Distributed_Computing
5
분산 컴퓨팅에서의 조율
• 조율(Coordination)
: 다양한 노드가 함께 동작하도록 만드는 행위
• 예시 :
– 그룹 멤버쉽 (Group Membership)
– 잠금 제어 (locking)
– 공급/구독 (Publisher/Subscriber)
– 리더 선정 (Leader Election)
– 동기화 (Synchronization)
• 노드(node)들을 조율(조정)하는 것은 매우 어렵다!
6
7
ZooKeeper 소개
ZooKeeper 는 분산된 프로세스들이 공유된 계층적
데이터 레지스터들을 통해 조화롭게 수행될 수
있게끔 한다. - Zookeeper WiKi
ZooKeeper 는 분산 락(lock) 서버 이상이다.
8
ZooKeeper 띾 무엇인가?
• 분산 어플리케이션들을 위한 오픈 소스, 고성능 조정자 (coordination)
서비스.
• 단순한 인터페이스를 통해 공통 서비스를 제공.
– 명명 (naming)
– 설정 관리 (configuration management)
– 잠금 및 동기화 (locks & synchronization)
– 그룹 서비스 (group services)
… 개발자는 기초 수준부터 코드를 작성할 필요가 없다.
• 필요에 따라, 원하는 기능을 구축(개발)할 수 있다.
9
ZooKeeper 활용 방안
• 설정 관리 (Configuration Management)
– Cluster member nodes bootstrapping configuration from a centralized
source in unattended way
– Easier, simpler deployment/provisioning
• 분산 클러스터 관리 (Distributed Cluster Management)
– Node join / leave
– Node statuses in real time
• 명명 서비스 (Naming service) – e.g. DNS
• 분산 동기화 (Distributed synchronization) - locks, barriers, queues
• 분산 시스템에서 리더 선출 (Leader election in a distributed system).
• 중앙집중형 싞뢰성 잇는 데이터 저장소
(Centralized and highly reliable (simple) data registry)
10
ZooKeeper 서비스
• ZooKeeper 서비스는 복수의 서버에 복제된다.
• 모든 서버 장비는 데이터의 사본(copy)을 메모리에 저장한다.
• 서비스 기동(startup) 시 리더가 선출된다.
• 클라이얶트들은 하나의 ZooKeeper 서버에 TCP/IP 로 연결을 실행하고 유지한다.
• 클라이언트는 모든 ZooKeeper 서버에서 읽을 수 있으며,
리더를 통해 쓸 수 있되 과반수 서버의 승인(합의)이 필요하다.
Image ☞ https://cwiki.apache.org/confluence/display/ZOOKEEPER/ProjectDescription
11
ZooKeeper 데이터 모델
• ZooKeeper 는 계층적인 네임스페이스(namespace)를 제공한다.
• 네임스페이스 내에 존재하는 개별 노드를 Znode 라고 부른다.
• 모듞 Znode 는 데이터 (바이트 배열)를 가질 수 있으며,
자식을 가질 수도 있다.
부모 : "foo"
|-- 자식1 : "bar"
|-- 자식2 : "spam"
`-- 자식3 : "eggs"
`-- 손자1 : "42“
• ZNode 경로 :
– 젃대경로, ‘/’ 로 구분됨
– 상대 참조가 없음.
– 명칭에 유니코드 문자가 포함될 수 있음
12
ZNode
• Maintain a stat structure with version
numbers for data changes, ACL changes
and timestamps.
• 변경이 발생하면 버전 번호가 증가한다.
• 데이터는 항상 전체를 읽고 쓴다.
Image: http://helix.incubator.apache.org/Architecture.html
13
ZNode 유형
• 영구 노드 (Persistent Nodes)
– 명시적으로 삭제되기 젂까지 존재함.
• 임시 노드 (Ephemeral Nodes)
– 세션이 유지되는 동안 활성 (세션이 종료되면 삭제됨)
– 자식 노드를 가질 수 없음.
• 순차 노드 (Sequence Nodes)
– 경로의 끝에 일정하게 증가하는 카운터 추가
– 영구 및 임시 노드 모두에 적용 가능.
14
Znode 연산
Operation Type
create Write
delete Write
exists Read
getChildren Read
getData Read
setData Write
getACL Read
setACL Write
sync Read
Znodes 는 프로그래머가 접근(제어)하는 핵심 객체이다.
15
ZooKeeper Shell
[zk: localhost:2181(CONNECTED) 0] help [zk: localhost:2181(CONNECTED) 1] ls /
ZooKeeper -server host:port cmd args [hbase, zookeeper]
connect host:port
get path [watch] [zk: localhost:2181(CONNECTED) 2] ls2 /zookeeper
ls path [watch] [quota]
set path data [version] cZxid = 0x0
rmr path ctime = Tue Jan 01 05:30:00 IST 2013
delquota [-n|-b] path mZxid = 0x0
quit mtime = Tue Jan 01 05:30:00 IST 2013
printwatches on|off pZxid = 0x0
create [-s] [-e] path data acl cversion = -1
stat path [watch] dataVersion = 0
close aclVersion = 0
ls2 path [watch] ephemeralOwner = 0x0
history dataLength = 0
listquota path numChildren = 1
setAcl path acl
getAcl path [zk: localhost:2181(CONNECTED) 3] create /test-znode HelloWorld
sync path Created /test-znode
redo cmdno [zk: localhost:2181(CONNECTED) 4] ls /
addauth scheme auth [test-znode, hbase, zookeeper]
delete path [version] [zk: localhost:2181(CONNECTED) 5] get /test-znode
setquota -n|-b val path HelloWorld
16
ZooKeeper 감시
• 클라이얶트는 Znode 에 감시(watch)를 설정할 수 있다 :
– 노드의 자식이 변경된 경우 (NodeChildrenChanged)
– 노드가 생성된 경우 (NodeCreated)
– 노드의 데이터가 변경되는 경우 (NodeDataChanged)
– 노드가 삭제된 경우 (NodeDeleted)
• ZNode가 변경되면 감시 이벤트가 발생하고, 변경사항이 클라이얶트로
통지된다.
• 감시(watch)는 1회성 트리거(trigger) 이다.
• 감시(watch)는 얶제나 순서대로 실행된다.
• 클라이얶트 새로운 노드 데이터가 생성되기 젂에 감시 이벤트를 받는다.
• 클라이얶트는 이벤트 수싞 및 새로운 감시 요청을 젂송하는 중 발생할 수 있는
지연에 대비해야 한다.
17
API 동기 / 비동기
• API 메소드는 동기(sync) 뿐 아니라 비동기 방식(async)으로 동작한다.
• 동기:
exists(“/test-cluster/CONFIGS", null);
• 비동기:
exists("/test-cluster/CONFIGS", null, new StatCallback() {
@Override
public processResult(int rc, String path, Object ctx, Stat stat) {
//process result when called back later
}
}, null);
18
Znode 읽기 / 쓰기
• 조회 요청은 클라이얶트가 연결한 ZooKeeper 서버 내에서 처리된다.
• 쓰기 요청은 리더로 젂달되며, 클라이얶트로 정상 응답하기 젂에 과반수 이상의
서버에서 쓰기가 완료되어야 한다.
Image: http://www.slideshare.net/scottleber/apache-zookeeper
19
일관성 보장
• 순차 일관성 (Sequential Consistency)
– 변경은 요청한 순서대로 반영 된다.
• 원자성 (Atomicity)
– 변경은 확실히 성공하거나, 실패한다.
• 단순한 시스템 형상 (Single System Image)
– 클라이얶트가 어떤 ZooKeeper 서버에 연결하건 갂에 동일한 뷰(view)를
조회할 수 있어야 한다.
• 신뢰성 (Reliability)
– 변경은 적용된 이후에 동일한 클라이얶트에 의해 덮어써지기 젂까지는
지속(유지)되어야 한다.
• 시기적절성 (Timeliness)
– 클라이얶트가 보는 뷰(view)의 데이터는 특정 갂격 내에서는 최싞 정보임을
보장해야 한다. (Eventual Consistency)
20
사례 #1 : 클러스터 관리
클라이언트 호스트 i, i:=1 .. N
1. /members 노드 감식
2. /members/host-${i} 임시 노드들을 생성
3. 노드 가입/탈퇴 시 이벤트 발생
4. 주기적으로 /members/host-${i} 노드들의
상태를 변경 (load, memory, CPU etc.)
host-N
Cluster
host-2
host-1
/members
21
사례 #2 : 리더 선출
1. “/svc/election-path“ ZNode 생성
2. 선출 과정에 참여하는 모듞 참가
프로세스들은 동일한 선거 경로에
임시 노드를 생성한다.
3. 가장 작은 순번에 해당하는 서버가
리더가 된다.
4. 각각의 “follower’ 노드는 자싞보다
다음 낮은 순번의 노드를 감시(listen)
한다.
5. 리더가 ‘election-path’에서 제거되면
새로운 리더를 선출하거나, 아니면
다음 낮은 순번의 노드가 리더가 된다.
6. 세션이 만료 시, 상태를 검사하고
필요하면 리더를 선출할 수 있다.
Image: http://techblog.outbrain.com/2011/07/leader-election-with-zookeeper/
22
사례 #3 : 분산 배타적 잠금
N개의 클라이얶트가 잠금(lock)을 소유하려고 시도한다고
가정.
• 클라이얶트들을 임시, 순차 Znode를
‘/Cluster/_locknode_’ 아래에 생성한다.
• 클라이얶트들은 잠금 Znode (i.e. _locknode_) 하위의
자식 리스트를 요청한다.
• 가장 낮은 ID를 가진 클라이언트가 잠금(lock)을 소유한다.
• 그외의 클라이얶트들은 감시(watch)를 수행한다.
• 통지가 발생할 때마다 잠금을 확인한다.
• 잠금을 해제하고 싶은 클라이얶트는 노드를 삭제하고,
다음 클라이얶트가 잠금을 획득하게 된다.
ZK
|---Cluster
+---config
+---memberships
+---_locknode_
+---host1-3278451
+---host2-3278452
+---host3-3278453
+--- …
---hostN-3278XXX
23
얶어 지원
• ZooKeeper 클라이얶트 라이브러리 지원 얶어 :
– Java
– C
– Perl
– Python
• 커뮤니티 지원
: Scala, C#, Node.js, Ruby, Erlang, Go, Haskell
https://cwiki.apache.org/ZOOKEEPER/zkclientbindings.html
24
몇가지 기억해야 할 점
• 감시(watches)는 일회성 트리거이다.
– Znode를 계속적으로 감시하기 위해서는 이벤트/트리거가 발생할 때마다
재설정해야 한다.
• 많은 감시를 znode에 설정하면 ‘herd effect’가 발생한다.
– 트래픽이 폭주하고, 확장성을 떨어뜨린다.
• Znode 에 대한 이벤트를 수싞하고, 감시를 다시 설정하는 동작 znode
가 계속 변경된다면 싞중하게 제어해야 한다.
• 세션 만료 시갂은 가급적 길게 설정해서 가비지 컬렉션으로 인한 ‘정지
시갂’을 줄여야 한다.
• Swapping 이 발생하지 않도록 자바 최대 heap 사이즈를 적젃하게
설정해야 한다.
• ZooKeeper 트랜잭션 로그 기록을 위한 젂용 디스크를 설정해야 한다.

Más contenido relacionado

La actualidad más candente

Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안
Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안
Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안SANG WON PARK
 
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 YoungSu Son
 
[네전따] 네트워크 엔지니어에게 쿠버네티스는 어떤 의미일까요
[네전따] 네트워크 엔지니어에게 쿠버네티스는 어떤 의미일까요[네전따] 네트워크 엔지니어에게 쿠버네티스는 어떤 의미일까요
[네전따] 네트워크 엔지니어에게 쿠버네티스는 어떤 의미일까요Jo Hoon
 
카프카, 산전수전 노하우
카프카, 산전수전 노하우카프카, 산전수전 노하우
카프카, 산전수전 노하우if kakao
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기Brian Hong
 
Massive service basic
Massive service basicMassive service basic
Massive service basicDaeMyung Kang
 
4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴Terry Cho
 
파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)Heungsub Lee
 
대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론
대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론
대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론Terry Cho
 
elasticsearch_적용 및 활용_정리
elasticsearch_적용 및 활용_정리elasticsearch_적용 및 활용_정리
elasticsearch_적용 및 활용_정리Junyi Song
 
암호화 이것만 알면 된다.
암호화 이것만 알면 된다.암호화 이것만 알면 된다.
암호화 이것만 알면 된다.KwangSeob Jeong
 
대용량 분산 아키텍쳐 설계 #2 대용량 분산 시스템 아키텍쳐 디자인 패턴
대용량 분산 아키텍쳐 설계 #2 대용량 분산 시스템 아키텍쳐 디자인 패턴대용량 분산 아키텍쳐 설계 #2 대용량 분산 시스템 아키텍쳐 디자인 패턴
대용량 분산 아키텍쳐 설계 #2 대용량 분산 시스템 아키텍쳐 디자인 패턴Terry Cho
 
Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기iFunFactory Inc.
 
이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정Arawn Park
 
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0Ji-Woong Choi
 
우아한 모노리스
우아한 모노리스우아한 모노리스
우아한 모노리스Arawn Park
 
Data Engineering 101
Data Engineering 101Data Engineering 101
Data Engineering 101DaeMyung Kang
 
Rancher Simple User Guide
Rancher Simple User GuideRancher Simple User Guide
Rancher Simple User GuideSANG WON PARK
 

La actualidad más candente (20)

Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안
Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안
Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안
 
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우
 
[네전따] 네트워크 엔지니어에게 쿠버네티스는 어떤 의미일까요
[네전따] 네트워크 엔지니어에게 쿠버네티스는 어떤 의미일까요[네전따] 네트워크 엔지니어에게 쿠버네티스는 어떤 의미일까요
[네전따] 네트워크 엔지니어에게 쿠버네티스는 어떤 의미일까요
 
카프카, 산전수전 노하우
카프카, 산전수전 노하우카프카, 산전수전 노하우
카프카, 산전수전 노하우
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기
 
Redis
RedisRedis
Redis
 
Massive service basic
Massive service basicMassive service basic
Massive service basic
 
4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴
 
파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)파이썬 생존 안내서 (자막)
파이썬 생존 안내서 (자막)
 
Virtual Container - Docker
Virtual Container - Docker Virtual Container - Docker
Virtual Container - Docker
 
대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론
대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론
대용량 분산 아키텍쳐 설계 #1 아키텍쳐 설계 방법론
 
elasticsearch_적용 및 활용_정리
elasticsearch_적용 및 활용_정리elasticsearch_적용 및 활용_정리
elasticsearch_적용 및 활용_정리
 
암호화 이것만 알면 된다.
암호화 이것만 알면 된다.암호화 이것만 알면 된다.
암호화 이것만 알면 된다.
 
대용량 분산 아키텍쳐 설계 #2 대용량 분산 시스템 아키텍쳐 디자인 패턴
대용량 분산 아키텍쳐 설계 #2 대용량 분산 시스템 아키텍쳐 디자인 패턴대용량 분산 아키텍쳐 설계 #2 대용량 분산 시스템 아키텍쳐 디자인 패턴
대용량 분산 아키텍쳐 설계 #2 대용량 분산 시스템 아키텍쳐 디자인 패턴
 
Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기Docker 로 Linux 없이 Linux 환경에서 개발하기
Docker 로 Linux 없이 Linux 환경에서 개발하기
 
이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정
 
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0
[오픈소스컨설팅]RHEL7/CentOS7 Pacemaker기반-HA시스템구성-v1.0
 
우아한 모노리스
우아한 모노리스우아한 모노리스
우아한 모노리스
 
Data Engineering 101
Data Engineering 101Data Engineering 101
Data Engineering 101
 
Rancher Simple User Guide
Rancher Simple User GuideRancher Simple User Guide
Rancher Simple User Guide
 

Similar a Apache ZooKeeper 소개

Openstack live migration
Openstack live migrationOpenstack live migration
Openstack live migrationymtech
 
Zoo keeper 소개
Zoo keeper 소개Zoo keeper 소개
Zoo keeper 소개주표 홍
 
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arcNAVER D2
 
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안Jeongsang Baek
 
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?nexusz99
 
쓰레드.pdf
쓰레드.pdf쓰레드.pdf
쓰레드.pdfSeokju Hong
 
A review of zookeeper 2010.12
A review of zookeeper 2010.12A review of zookeeper 2010.12
A review of zookeeper 2010.12HoJin Ha
 
1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기
1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기
1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기Hyperledger Korea User Group
 
resource on openstack
 resource on openstack resource on openstack
resource on openstackjieun kim
 
Nginx basic configurations
Nginx basic configurationsNginx basic configurations
Nginx basic configurationsJohn Kim
 
Concurrent programming
Concurrent programmingConcurrent programming
Concurrent programmingByeongsu Kang
 
Fluentd with MySQL
Fluentd with MySQLFluentd with MySQL
Fluentd with MySQLI Goo Lee
 
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기흥래 김
 
Dragon flow and tricircle
Dragon flow and tricircleDragon flow and tricircle
Dragon flow and tricircleYongyoon Shin
 

Similar a Apache ZooKeeper 소개 (20)

Openstack live migration
Openstack live migrationOpenstack live migration
Openstack live migration
 
Zoo keeper 소개
Zoo keeper 소개Zoo keeper 소개
Zoo keeper 소개
 
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc
 
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
 
Kafka slideshare
Kafka   slideshareKafka   slideshare
Kafka slideshare
 
OpenStack Swift Debugging
OpenStack Swift DebuggingOpenStack Swift Debugging
OpenStack Swift Debugging
 
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
 
쓰레드.pdf
쓰레드.pdf쓰레드.pdf
쓰레드.pdf
 
Network researching
Network researchingNetwork researching
Network researching
 
A review of zookeeper 2010.12
A review of zookeeper 2010.12A review of zookeeper 2010.12
A review of zookeeper 2010.12
 
1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기
1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기
1908 Hyperledger Fabric 소개 및 첫 네트워크 구축하기
 
kt-cloud
kt-cloudkt-cloud
kt-cloud
 
Zookeeper 소개
Zookeeper 소개Zookeeper 소개
Zookeeper 소개
 
KAFKA 3.1.0.pdf
KAFKA 3.1.0.pdfKAFKA 3.1.0.pdf
KAFKA 3.1.0.pdf
 
resource on openstack
 resource on openstack resource on openstack
resource on openstack
 
Nginx basic configurations
Nginx basic configurationsNginx basic configurations
Nginx basic configurations
 
Concurrent programming
Concurrent programmingConcurrent programming
Concurrent programming
 
Fluentd with MySQL
Fluentd with MySQLFluentd with MySQL
Fluentd with MySQL
 
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
 
Dragon flow and tricircle
Dragon flow and tricircleDragon flow and tricircle
Dragon flow and tricircle
 

Más de 중선 곽

자바로 배우는 자료구조
자바로 배우는 자료구조자바로 배우는 자료구조
자바로 배우는 자료구조중선 곽
 
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)중선 곽
 
프로그래밍 방식의 변천 과정
프로그래밍 방식의 변천 과정프로그래밍 방식의 변천 과정
프로그래밍 방식의 변천 과정중선 곽
 
젠킨스 설치 및 설정
젠킨스 설치 및 설정젠킨스 설치 및 설정
젠킨스 설치 및 설정중선 곽
 
지속적인 통합
지속적인 통합지속적인 통합
지속적인 통합중선 곽
 
Test driven development short lesson
Test driven development   short lessonTest driven development   short lesson
Test driven development short lesson중선 곽
 
Tomcat monitoring using_javamelody
Tomcat monitoring using_javamelodyTomcat monitoring using_javamelody
Tomcat monitoring using_javamelody중선 곽
 
Web service performance_test_using_jmeter_ver1.2
Web service performance_test_using_jmeter_ver1.2Web service performance_test_using_jmeter_ver1.2
Web service performance_test_using_jmeter_ver1.2중선 곽
 
Online service 계층별 성능 모니터링 방안
Online service 계층별 성능 모니터링 방안Online service 계층별 성능 모니터링 방안
Online service 계층별 성능 모니터링 방안중선 곽
 
Intranet query tuning (example)
Intranet query tuning (example)Intranet query tuning (example)
Intranet query tuning (example)중선 곽
 
Db 진단 및 튜닝 보고 (example)
Db 진단 및 튜닝 보고 (example)Db 진단 및 튜닝 보고 (example)
Db 진단 및 튜닝 보고 (example)중선 곽
 
Scale up and scale out
Scale up and scale outScale up and scale out
Scale up and scale out중선 곽
 
Java rmi 개발 가이드
Java rmi 개발 가이드Java rmi 개발 가이드
Java rmi 개발 가이드중선 곽
 
Java rmi 개발 가이드
Java rmi 개발 가이드Java rmi 개발 가이드
Java rmi 개발 가이드중선 곽
 
컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷중선 곽
 
자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)중선 곽
 
숫자 구분자 처리 (Digit group separators)
숫자 구분자 처리 (Digit group separators)숫자 구분자 처리 (Digit group separators)
숫자 구분자 처리 (Digit group separators)중선 곽
 
서버 아키텍쳐 입문
서버 아키텍쳐 입문서버 아키텍쳐 입문
서버 아키텍쳐 입문중선 곽
 
서버 아키텍쳐 입문
서버 아키텍쳐 입문서버 아키텍쳐 입문
서버 아키텍쳐 입문중선 곽
 
서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해중선 곽
 

Más de 중선 곽 (20)

자바로 배우는 자료구조
자바로 배우는 자료구조자바로 배우는 자료구조
자바로 배우는 자료구조
 
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
 
프로그래밍 방식의 변천 과정
프로그래밍 방식의 변천 과정프로그래밍 방식의 변천 과정
프로그래밍 방식의 변천 과정
 
젠킨스 설치 및 설정
젠킨스 설치 및 설정젠킨스 설치 및 설정
젠킨스 설치 및 설정
 
지속적인 통합
지속적인 통합지속적인 통합
지속적인 통합
 
Test driven development short lesson
Test driven development   short lessonTest driven development   short lesson
Test driven development short lesson
 
Tomcat monitoring using_javamelody
Tomcat monitoring using_javamelodyTomcat monitoring using_javamelody
Tomcat monitoring using_javamelody
 
Web service performance_test_using_jmeter_ver1.2
Web service performance_test_using_jmeter_ver1.2Web service performance_test_using_jmeter_ver1.2
Web service performance_test_using_jmeter_ver1.2
 
Online service 계층별 성능 모니터링 방안
Online service 계층별 성능 모니터링 방안Online service 계층별 성능 모니터링 방안
Online service 계층별 성능 모니터링 방안
 
Intranet query tuning (example)
Intranet query tuning (example)Intranet query tuning (example)
Intranet query tuning (example)
 
Db 진단 및 튜닝 보고 (example)
Db 진단 및 튜닝 보고 (example)Db 진단 및 튜닝 보고 (example)
Db 진단 및 튜닝 보고 (example)
 
Scale up and scale out
Scale up and scale outScale up and scale out
Scale up and scale out
 
Java rmi 개발 가이드
Java rmi 개발 가이드Java rmi 개발 가이드
Java rmi 개발 가이드
 
Java rmi 개발 가이드
Java rmi 개발 가이드Java rmi 개발 가이드
Java rmi 개발 가이드
 
컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷
 
자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)자바 직렬화 (Java serialization)
자바 직렬화 (Java serialization)
 
숫자 구분자 처리 (Digit group separators)
숫자 구분자 처리 (Digit group separators)숫자 구분자 처리 (Digit group separators)
숫자 구분자 처리 (Digit group separators)
 
서버 아키텍쳐 입문
서버 아키텍쳐 입문서버 아키텍쳐 입문
서버 아키텍쳐 입문
 
서버 아키텍쳐 입문
서버 아키텍쳐 입문서버 아키텍쳐 입문
서버 아키텍쳐 입문
 
서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해
 

Apache ZooKeeper 소개

  • 1. Apache ZooKeeperTM 소개 http://zookeeper.apache.org/ Sunny Kwak sunykwak@daum.net Author : Saurav Haloi Source : http://www.slideshare.net/sauravhaloi/introduction-to-apache-zookeeper ☞ This is translation for Korean language (also add comments to origininal presentation)
  • 3. 3 분산 시스템이띾? • 분산 시스템은 복수의 컴퓨터가 네트워크를 통해 통싞하며 하나의 목적(목표)를 위해 서로 갂에 상호작용 하는 것이다. 달리 말해 다수의 컴퓨터가 마치 하나인 것처럼 동작하는 시스템이다.
  • 4. 4 분산 컴퓨팅에 대한 착각 • 네트워크는 싞뢰할 수 있다 (reliable). • 지연(latency)은 없다. • 대역폭(bandwidth)은 무한하다. • 네트워크는 안젂하다 (secure). • 토폴로지(topology)는 변경되지 않는다. • 단 한 사람의 관리자만 있다 (administrator). • 젂송(transport) 비용은 공짜다. • 네트워크 유형은 동일하다(homogeneous). ☞ http://en.wikipedia.org/wiki/Fallacies_of_Distributed_Computing
  • 5. 5 분산 컴퓨팅에서의 조율 • 조율(Coordination) : 다양한 노드가 함께 동작하도록 만드는 행위 • 예시 : – 그룹 멤버쉽 (Group Membership) – 잠금 제어 (locking) – 공급/구독 (Publisher/Subscriber) – 리더 선정 (Leader Election) – 동기화 (Synchronization) • 노드(node)들을 조율(조정)하는 것은 매우 어렵다!
  • 6. 6
  • 7. 7 ZooKeeper 소개 ZooKeeper 는 분산된 프로세스들이 공유된 계층적 데이터 레지스터들을 통해 조화롭게 수행될 수 있게끔 한다. - Zookeeper WiKi ZooKeeper 는 분산 락(lock) 서버 이상이다.
  • 8. 8 ZooKeeper 띾 무엇인가? • 분산 어플리케이션들을 위한 오픈 소스, 고성능 조정자 (coordination) 서비스. • 단순한 인터페이스를 통해 공통 서비스를 제공. – 명명 (naming) – 설정 관리 (configuration management) – 잠금 및 동기화 (locks & synchronization) – 그룹 서비스 (group services) … 개발자는 기초 수준부터 코드를 작성할 필요가 없다. • 필요에 따라, 원하는 기능을 구축(개발)할 수 있다.
  • 9. 9 ZooKeeper 활용 방안 • 설정 관리 (Configuration Management) – Cluster member nodes bootstrapping configuration from a centralized source in unattended way – Easier, simpler deployment/provisioning • 분산 클러스터 관리 (Distributed Cluster Management) – Node join / leave – Node statuses in real time • 명명 서비스 (Naming service) – e.g. DNS • 분산 동기화 (Distributed synchronization) - locks, barriers, queues • 분산 시스템에서 리더 선출 (Leader election in a distributed system). • 중앙집중형 싞뢰성 잇는 데이터 저장소 (Centralized and highly reliable (simple) data registry)
  • 10. 10 ZooKeeper 서비스 • ZooKeeper 서비스는 복수의 서버에 복제된다. • 모든 서버 장비는 데이터의 사본(copy)을 메모리에 저장한다. • 서비스 기동(startup) 시 리더가 선출된다. • 클라이얶트들은 하나의 ZooKeeper 서버에 TCP/IP 로 연결을 실행하고 유지한다. • 클라이언트는 모든 ZooKeeper 서버에서 읽을 수 있으며, 리더를 통해 쓸 수 있되 과반수 서버의 승인(합의)이 필요하다. Image ☞ https://cwiki.apache.org/confluence/display/ZOOKEEPER/ProjectDescription
  • 11. 11 ZooKeeper 데이터 모델 • ZooKeeper 는 계층적인 네임스페이스(namespace)를 제공한다. • 네임스페이스 내에 존재하는 개별 노드를 Znode 라고 부른다. • 모듞 Znode 는 데이터 (바이트 배열)를 가질 수 있으며, 자식을 가질 수도 있다. 부모 : "foo" |-- 자식1 : "bar" |-- 자식2 : "spam" `-- 자식3 : "eggs" `-- 손자1 : "42“ • ZNode 경로 : – 젃대경로, ‘/’ 로 구분됨 – 상대 참조가 없음. – 명칭에 유니코드 문자가 포함될 수 있음
  • 12. 12 ZNode • Maintain a stat structure with version numbers for data changes, ACL changes and timestamps. • 변경이 발생하면 버전 번호가 증가한다. • 데이터는 항상 전체를 읽고 쓴다. Image: http://helix.incubator.apache.org/Architecture.html
  • 13. 13 ZNode 유형 • 영구 노드 (Persistent Nodes) – 명시적으로 삭제되기 젂까지 존재함. • 임시 노드 (Ephemeral Nodes) – 세션이 유지되는 동안 활성 (세션이 종료되면 삭제됨) – 자식 노드를 가질 수 없음. • 순차 노드 (Sequence Nodes) – 경로의 끝에 일정하게 증가하는 카운터 추가 – 영구 및 임시 노드 모두에 적용 가능.
  • 14. 14 Znode 연산 Operation Type create Write delete Write exists Read getChildren Read getData Read setData Write getACL Read setACL Write sync Read Znodes 는 프로그래머가 접근(제어)하는 핵심 객체이다.
  • 15. 15 ZooKeeper Shell [zk: localhost:2181(CONNECTED) 0] help [zk: localhost:2181(CONNECTED) 1] ls / ZooKeeper -server host:port cmd args [hbase, zookeeper] connect host:port get path [watch] [zk: localhost:2181(CONNECTED) 2] ls2 /zookeeper ls path [watch] [quota] set path data [version] cZxid = 0x0 rmr path ctime = Tue Jan 01 05:30:00 IST 2013 delquota [-n|-b] path mZxid = 0x0 quit mtime = Tue Jan 01 05:30:00 IST 2013 printwatches on|off pZxid = 0x0 create [-s] [-e] path data acl cversion = -1 stat path [watch] dataVersion = 0 close aclVersion = 0 ls2 path [watch] ephemeralOwner = 0x0 history dataLength = 0 listquota path numChildren = 1 setAcl path acl getAcl path [zk: localhost:2181(CONNECTED) 3] create /test-znode HelloWorld sync path Created /test-znode redo cmdno [zk: localhost:2181(CONNECTED) 4] ls / addauth scheme auth [test-znode, hbase, zookeeper] delete path [version] [zk: localhost:2181(CONNECTED) 5] get /test-znode setquota -n|-b val path HelloWorld
  • 16. 16 ZooKeeper 감시 • 클라이얶트는 Znode 에 감시(watch)를 설정할 수 있다 : – 노드의 자식이 변경된 경우 (NodeChildrenChanged) – 노드가 생성된 경우 (NodeCreated) – 노드의 데이터가 변경되는 경우 (NodeDataChanged) – 노드가 삭제된 경우 (NodeDeleted) • ZNode가 변경되면 감시 이벤트가 발생하고, 변경사항이 클라이얶트로 통지된다. • 감시(watch)는 1회성 트리거(trigger) 이다. • 감시(watch)는 얶제나 순서대로 실행된다. • 클라이얶트 새로운 노드 데이터가 생성되기 젂에 감시 이벤트를 받는다. • 클라이얶트는 이벤트 수싞 및 새로운 감시 요청을 젂송하는 중 발생할 수 있는 지연에 대비해야 한다.
  • 17. 17 API 동기 / 비동기 • API 메소드는 동기(sync) 뿐 아니라 비동기 방식(async)으로 동작한다. • 동기: exists(“/test-cluster/CONFIGS", null); • 비동기: exists("/test-cluster/CONFIGS", null, new StatCallback() { @Override public processResult(int rc, String path, Object ctx, Stat stat) { //process result when called back later } }, null);
  • 18. 18 Znode 읽기 / 쓰기 • 조회 요청은 클라이얶트가 연결한 ZooKeeper 서버 내에서 처리된다. • 쓰기 요청은 리더로 젂달되며, 클라이얶트로 정상 응답하기 젂에 과반수 이상의 서버에서 쓰기가 완료되어야 한다. Image: http://www.slideshare.net/scottleber/apache-zookeeper
  • 19. 19 일관성 보장 • 순차 일관성 (Sequential Consistency) – 변경은 요청한 순서대로 반영 된다. • 원자성 (Atomicity) – 변경은 확실히 성공하거나, 실패한다. • 단순한 시스템 형상 (Single System Image) – 클라이얶트가 어떤 ZooKeeper 서버에 연결하건 갂에 동일한 뷰(view)를 조회할 수 있어야 한다. • 신뢰성 (Reliability) – 변경은 적용된 이후에 동일한 클라이얶트에 의해 덮어써지기 젂까지는 지속(유지)되어야 한다. • 시기적절성 (Timeliness) – 클라이얶트가 보는 뷰(view)의 데이터는 특정 갂격 내에서는 최싞 정보임을 보장해야 한다. (Eventual Consistency)
  • 20. 20 사례 #1 : 클러스터 관리 클라이언트 호스트 i, i:=1 .. N 1. /members 노드 감식 2. /members/host-${i} 임시 노드들을 생성 3. 노드 가입/탈퇴 시 이벤트 발생 4. 주기적으로 /members/host-${i} 노드들의 상태를 변경 (load, memory, CPU etc.) host-N Cluster host-2 host-1 /members
  • 21. 21 사례 #2 : 리더 선출 1. “/svc/election-path“ ZNode 생성 2. 선출 과정에 참여하는 모듞 참가 프로세스들은 동일한 선거 경로에 임시 노드를 생성한다. 3. 가장 작은 순번에 해당하는 서버가 리더가 된다. 4. 각각의 “follower’ 노드는 자싞보다 다음 낮은 순번의 노드를 감시(listen) 한다. 5. 리더가 ‘election-path’에서 제거되면 새로운 리더를 선출하거나, 아니면 다음 낮은 순번의 노드가 리더가 된다. 6. 세션이 만료 시, 상태를 검사하고 필요하면 리더를 선출할 수 있다. Image: http://techblog.outbrain.com/2011/07/leader-election-with-zookeeper/
  • 22. 22 사례 #3 : 분산 배타적 잠금 N개의 클라이얶트가 잠금(lock)을 소유하려고 시도한다고 가정. • 클라이얶트들을 임시, 순차 Znode를 ‘/Cluster/_locknode_’ 아래에 생성한다. • 클라이얶트들은 잠금 Znode (i.e. _locknode_) 하위의 자식 리스트를 요청한다. • 가장 낮은 ID를 가진 클라이언트가 잠금(lock)을 소유한다. • 그외의 클라이얶트들은 감시(watch)를 수행한다. • 통지가 발생할 때마다 잠금을 확인한다. • 잠금을 해제하고 싶은 클라이얶트는 노드를 삭제하고, 다음 클라이얶트가 잠금을 획득하게 된다. ZK |---Cluster +---config +---memberships +---_locknode_ +---host1-3278451 +---host2-3278452 +---host3-3278453 +--- … ---hostN-3278XXX
  • 23. 23 얶어 지원 • ZooKeeper 클라이얶트 라이브러리 지원 얶어 : – Java – C – Perl – Python • 커뮤니티 지원 : Scala, C#, Node.js, Ruby, Erlang, Go, Haskell https://cwiki.apache.org/ZOOKEEPER/zkclientbindings.html
  • 24. 24 몇가지 기억해야 할 점 • 감시(watches)는 일회성 트리거이다. – Znode를 계속적으로 감시하기 위해서는 이벤트/트리거가 발생할 때마다 재설정해야 한다. • 많은 감시를 znode에 설정하면 ‘herd effect’가 발생한다. – 트래픽이 폭주하고, 확장성을 떨어뜨린다. • Znode 에 대한 이벤트를 수싞하고, 감시를 다시 설정하는 동작 znode 가 계속 변경된다면 싞중하게 제어해야 한다. • 세션 만료 시갂은 가급적 길게 설정해서 가비지 컬렉션으로 인한 ‘정지 시갂’을 줄여야 한다. • Swapping 이 발생하지 않도록 자바 최대 heap 사이즈를 적젃하게 설정해야 한다. • ZooKeeper 트랜잭션 로그 기록을 위한 젂용 디스크를 설정해야 한다.