SlideShare a Scribd company logo
1 of 24
Download to read offline
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 트랜잭션 로그 기록을 위한 젂용 디스크를 설정해야 한다.

More Related Content

What's hot

ClickHouse Query Performance Tips and Tricks, by Robert Hodges, Altinity CEO
ClickHouse Query Performance Tips and Tricks, by Robert Hodges, Altinity CEOClickHouse Query Performance Tips and Tricks, by Robert Hodges, Altinity CEO
ClickHouse Query Performance Tips and Tricks, by Robert Hodges, Altinity CEOAltinity Ltd
 
Red Hat OpenStack 17 저자직강+스터디그룹_1주차
Red Hat OpenStack 17 저자직강+스터디그룹_1주차Red Hat OpenStack 17 저자직강+스터디그룹_1주차
Red Hat OpenStack 17 저자직강+스터디그룹_1주차Nalee Jang
 
Best Practices for Getting Started with NGINX Open Source
Best Practices for Getting Started with NGINX Open SourceBest Practices for Getting Started with NGINX Open Source
Best Practices for Getting Started with NGINX Open SourceNGINX, Inc.
 
Deep Dive into Keystone Tokens and Lessons Learned
Deep Dive into Keystone Tokens and Lessons LearnedDeep Dive into Keystone Tokens and Lessons Learned
Deep Dive into Keystone Tokens and Lessons LearnedPriti Desai
 
Altinity Cluster Manager: ClickHouse Management for Kubernetes and Cloud
Altinity Cluster Manager: ClickHouse Management for Kubernetes and CloudAltinity Cluster Manager: ClickHouse Management for Kubernetes and Cloud
Altinity Cluster Manager: ClickHouse Management for Kubernetes and CloudAltinity Ltd
 
BPF: Tracing and more
BPF: Tracing and moreBPF: Tracing and more
BPF: Tracing and moreBrendan Gregg
 
Enhancing Network and Runtime Security with Cilium and Tetragon by Raymond De...
Enhancing Network and Runtime Security with Cilium and Tetragon by Raymond De...Enhancing Network and Runtime Security with Cilium and Tetragon by Raymond De...
Enhancing Network and Runtime Security with Cilium and Tetragon by Raymond De...ContainerDay Security 2023
 
All about Zookeeper and ClickHouse Keeper.pdf
All about Zookeeper and ClickHouse Keeper.pdfAll about Zookeeper and ClickHouse Keeper.pdf
All about Zookeeper and ClickHouse Keeper.pdfAltinity Ltd
 
Linux Networking Explained
Linux Networking ExplainedLinux Networking Explained
Linux Networking ExplainedThomas Graf
 
Ansible presentation
Ansible presentationAnsible presentation
Ansible presentationJohn Lynch
 
[FR] Présentatation d'Ansible
[FR] Présentatation d'Ansible [FR] Présentatation d'Ansible
[FR] Présentatation d'Ansible Armand Guio
 
Formation autour de git et git lab
Formation autour de git et git labFormation autour de git et git lab
Formation autour de git et git labAbdelghani Azri
 
Red Hat OpenStack 17 저자직강+스터디그룹_3주차
Red Hat OpenStack 17 저자직강+스터디그룹_3주차Red Hat OpenStack 17 저자직강+스터디그룹_3주차
Red Hat OpenStack 17 저자직강+스터디그룹_3주차Nalee Jang
 
Ansible tips & tricks
Ansible tips & tricksAnsible tips & tricks
Ansible tips & tricksbcoca
 
Ansible Introduction
Ansible Introduction Ansible Introduction
Ansible Introduction Robert Reiz
 
Better than you think: Handling JSON data in ClickHouse
Better than you think: Handling JSON data in ClickHouseBetter than you think: Handling JSON data in ClickHouse
Better than you think: Handling JSON data in ClickHouseAltinity Ltd
 
오픈스택 멀티노드 설치 후기
오픈스택 멀티노드 설치 후기오픈스택 멀티노드 설치 후기
오픈스택 멀티노드 설치 후기영우 김
 

What's hot (20)

ClickHouse Query Performance Tips and Tricks, by Robert Hodges, Altinity CEO
ClickHouse Query Performance Tips and Tricks, by Robert Hodges, Altinity CEOClickHouse Query Performance Tips and Tricks, by Robert Hodges, Altinity CEO
ClickHouse Query Performance Tips and Tricks, by Robert Hodges, Altinity CEO
 
Red Hat Insights
Red Hat InsightsRed Hat Insights
Red Hat Insights
 
Red Hat OpenStack 17 저자직강+스터디그룹_1주차
Red Hat OpenStack 17 저자직강+스터디그룹_1주차Red Hat OpenStack 17 저자직강+스터디그룹_1주차
Red Hat OpenStack 17 저자직강+스터디그룹_1주차
 
Best Practices for Getting Started with NGINX Open Source
Best Practices for Getting Started with NGINX Open SourceBest Practices for Getting Started with NGINX Open Source
Best Practices for Getting Started with NGINX Open Source
 
Deep Dive into Keystone Tokens and Lessons Learned
Deep Dive into Keystone Tokens and Lessons LearnedDeep Dive into Keystone Tokens and Lessons Learned
Deep Dive into Keystone Tokens and Lessons Learned
 
Altinity Cluster Manager: ClickHouse Management for Kubernetes and Cloud
Altinity Cluster Manager: ClickHouse Management for Kubernetes and CloudAltinity Cluster Manager: ClickHouse Management for Kubernetes and Cloud
Altinity Cluster Manager: ClickHouse Management for Kubernetes and Cloud
 
BPF: Tracing and more
BPF: Tracing and moreBPF: Tracing and more
BPF: Tracing and more
 
Enhancing Network and Runtime Security with Cilium and Tetragon by Raymond De...
Enhancing Network and Runtime Security with Cilium and Tetragon by Raymond De...Enhancing Network and Runtime Security with Cilium and Tetragon by Raymond De...
Enhancing Network and Runtime Security with Cilium and Tetragon by Raymond De...
 
All about Zookeeper and ClickHouse Keeper.pdf
All about Zookeeper and ClickHouse Keeper.pdfAll about Zookeeper and ClickHouse Keeper.pdf
All about Zookeeper and ClickHouse Keeper.pdf
 
Linux Networking Explained
Linux Networking ExplainedLinux Networking Explained
Linux Networking Explained
 
Ansible presentation
Ansible presentationAnsible presentation
Ansible presentation
 
[FR] Présentatation d'Ansible
[FR] Présentatation d'Ansible [FR] Présentatation d'Ansible
[FR] Présentatation d'Ansible
 
Formation autour de git et git lab
Formation autour de git et git labFormation autour de git et git lab
Formation autour de git et git lab
 
Red Hat OpenStack 17 저자직강+스터디그룹_3주차
Red Hat OpenStack 17 저자직강+스터디그룹_3주차Red Hat OpenStack 17 저자직강+스터디그룹_3주차
Red Hat OpenStack 17 저자직강+스터디그룹_3주차
 
Nginx Essential
Nginx EssentialNginx Essential
Nginx Essential
 
Git undo
Git undoGit undo
Git undo
 
Ansible tips & tricks
Ansible tips & tricksAnsible tips & tricks
Ansible tips & tricks
 
Ansible Introduction
Ansible Introduction Ansible Introduction
Ansible Introduction
 
Better than you think: Handling JSON data in ClickHouse
Better than you think: Handling JSON data in ClickHouseBetter than you think: Handling JSON data in ClickHouse
Better than you think: Handling JSON data in ClickHouse
 
오픈스택 멀티노드 설치 후기
오픈스택 멀티노드 설치 후기오픈스택 멀티노드 설치 후기
오픈스택 멀티노드 설치 후기
 

Similar to 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 to 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
 

More from 중선 곽

자바로 배우는 자료구조
자바로 배우는 자료구조자바로 배우는 자료구조
자바로 배우는 자료구조중선 곽
 
오픈소스 프레임워크 기반 웹 서비스 설계 (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)중선 곽
 
서버 아키텍쳐 입문
서버 아키텍쳐 입문서버 아키텍쳐 입문
서버 아키텍쳐 입문중선 곽
 
서버 아키텍쳐 입문
서버 아키텍쳐 입문서버 아키텍쳐 입문
서버 아키텍쳐 입문중선 곽
 
서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해중선 곽
 

More from 중선 곽 (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 트랜잭션 로그 기록을 위한 젂용 디스크를 설정해야 한다.