ݺߣ

ݺߣShare a Scribd company logo
Zookeeper 소개
최범균 (2014-05-23)
클러스터에 필요한 것
● 클러스터 구성원 관리
o 살았니? 죽었니?
o 누가 마스터?
● 클러스터 구성원 간 정보 공유
● 분산 서버의 동시 접근 제어
ZooKeeper 갵Ӛ
● 분산 시스템을 위한 코디네이터
● 서버와 클라이언트로 구성
o 서버 앙상블: n개 서버로 단일 주키퍼 클러스터 구성
o 클라이언트: 앙상블에 속한 서버에 연결하여, 서비스
사용
● 서버 제공 서비스
o 데이터 스토리지 (영속 데이터/임시 데이터)
 클러스터 구성원 간 데이터 공유
o 데이터 변경 통지(Watch)
 클러스터 멤버십 관리
o 시퀀스 노드
 마스터, 분산 락 등에 활용
ZooKeeper 데이터 모델과 주요 기능
ZNode
● ZNode
o ZooKeeper는 계층형 네임스페이스를 가짐
o 계층의 각 노드를 ZNode라고 부름
 계층의 각 경로는 ‘/’로 구분
o znode는 데이터를 가질 수 있음 (byte[])
o znode는 자식 노드를 가질 수 있음
 예, /svc 노드는 /svc/nodes 노드를 가질 수 있음
● 영속 종류
o PERSISTENT: 클라이언트가 종료되도 유지
o EPHEMERAL: znode를 생성한 클라이언트의 연결이
끊기면 삭제
 자식 znode를 가질 수 없음
주요 오퍼레이션
● 주요 오퍼레이션
o create
o delete
o exists
o getChildren
o getData
o setData
● 언어 별 바인딩 제공
o Java, C, Python, Ruby, Scala 등
 https://cwiki.apache.org/confluence/display/ZOOKEEPER/ZKClientBindings
ZNode Watch
● znode의 변화를 통지 받음
● 오퍼레이션 실행시 Wacher 등록
o zk.getChildren(“/mysvc/nodes”, watcher)
ZK 서버클라이언트 클라이언트
Watcher 등록
변경 통지
znode 변경
ZNode Watch 이벤트 종류
Watch 생성
오퍼레이션
znode 생성 znode 삭제 자식 생성 자식 삭제 znode 값 변경
exists NodeCreated NodeDeleted NodeDataCha
nged
getData NodeDeleted NodeDataCha
nged
getChildren NodeDeleted NodeChildren
Changed
NodeChildren
Changed
Watch 특징
● 일회성 이벤트 수신
o 다시 Watch하고 싶으면 재등록해야 함
o 재등록 전에 발생한 변경은 수신하지 못함
● 상태 변경 요청한 클라이언트가 성공 코드를
받은 이후에, Watcher를 등록한 클라이언트
에 통지 됨
● ZooKeeper의 변경 순서대로 Watch 이벤트를
수신 함
시퀀스 노드
● 자식 노드가 생성한 순서에 따라 일렬 번호를
가짐
o 예, /svc 노드의 자식 노드로 /nodes를 시퀀스 노드로
생성하면 다음과 같은 순서로 노드 생성
 /svc/nodes0000000001
 /svc/nodes0000000002
o PERSISTENT와 EPHEMERAL에 모두 적용 가능
o 시퀀스 범위 (4 byte 정수)
 -2,147,483,647 ~ 2,147,483,647 (-21억~21억)
ZooKeeper 몇 가지 용도
그룹 관리: 자식 ZNODE, Watch
● 그룹 멤버십 목록을 가질 부모 znode 생성
○ 예: /members
멤버십 참여
● 부모 znode에 자신을 위한 자식 znode를
ephemeral로 생성
○ 예, /members/m-hostip
● 자식 znode 데이터는 다른 구성원이 자신과 통신
하는데 필요한 정보 저장 (예, ip/port 등)
멤버십 탈퇴
● 자신에 해당하는 자식 znode를 삭제
멤버십 목록, 주기적 갱신 (각 클라이언트)
● 주기적으로 getChildlen 실행해서 목록
갱신
멤버십 목록, Watch 이용 (각 클라이언트)
● 부모 znode에 getChildlen로 WATCH
등록하고, getChildlen 결과로 목록 갱
신
● NodeChildrenChanged 이벤트 수신 시,
위 과정 재실행
마스터 선출: 시퀀스 노드, WATCH
● 마스터 후보를 보관할 znode 생성
○ 예: /masters
마스터 후보 등록
● 부모 znode에 자신을 위한 자식 znode를 시퀀
스 & ephemeral로 생성
○ 예, /masters/m-0000000010
마스터 선출 (각 후보 클라이언트에서 진행)
● 부모 znode에 getChild로 WATCH 등록
● NodeChildrenChanged 이벤트 수신시,
현재 마스터가 없는 지 확인
● 마스터에 해당하는 자식 znode가 없으
면
○ 부모 znode에 자식 znode 를 구한
뒤 시퀀스 번호가 가장 작은
znode를 마스터로 선택
● 부모 znode에 getChild로 WATCH 등록
기타 용도
● 분산 락
o EPHEMERAL 사용
● 이벤트 통지
o WATCH 사용
● pub/sub
o SEQUENCE 사용
● 분산 카운터
o SEQUENCE 또는 znode의 version 사용
● 디렉토리 서비스
o 활성화된 서비스 목록 등 제공
ZooKeeper 동작 방식 갵Ӛ
버전
● zxid: ZooKeeper Transaction ID
o 모든 변경은 고유 트랜잭션 ID를 가짐
o 순서를 가짐
● version
o znode가 변경될 때 마다 버전 값 증가
● cversion
o 자식 znode가 변경될 때 마다 버전 값 증가
서버와 클라이언트 연결
ZK클라이언트 ZK서버
ZK서버
ZK서버(리더)
ZK서버
ZK서버
ZK클라이언트
연결 유지를 위해
주기적으로 PING
전송
연결된 서버에서
읽기 실행
일정 시간 동안 클라이언트로
부터 PING이 없으면 세션 종료
처리
ZK클라이언트
연결된 서버에 변
경 요청
리더에 변경 요청을 전달
하면,
리더가 트랜잭션 생성 후,
전 노드에 전파
PING 전송 실패시,
다른 서버에 연결
Quorum: 가용성, 데이터 변경
● 과반 정족수 이상 서버 다운시, 서비스 중지
o 예, 2대 중 1대 다운되면 서비스 중지
o 이런 이유로 서버 개수는 홀수로 맞춤 (3, 5 등)
● 데이터 변경시 성공 기준
o 리더 서버가 트랜잭션 생성 후 다른 서버에 전파할 때,
과반 정족수 이상 트랜잭션 성공하면 클라이언트에
변경 성공 결과 리턴
일관성 보장
● Sequential Consistency: 변경 요청은 순서대
로 적용
● Atomicity: 변경은 성공 또는 실패
● Single System Image: 클라이언트는 연결한
서버에 상관없이 동일 서비스 사용
● Reliability: 클라이언트가 성공 코드를 받으면,
서버에 반영됨을 보장
● Timeliness: 클라이언트는 일정 시간내에 최
신 상태를 사용 (Eventual Consistency)
맺음말
믿고 쓸 만한 분산 코디네이터
● 다양한 오픈소스에서 채택
o Hadoop: 마스터(Name Node) 이중화
o HBase: 마스터 선출, 리전 데이터 공유 등에 사용
o Storm: 서버 간 데이터 공유 등에 사용
o Kafka: 클러스터 관리
o Neo4j: 마스터 선출에 사용

More Related Content

What's hot (20)

Getting Started with Kubernetes
Getting Started with Kubernetes Getting Started with Kubernetes
Getting Started with Kubernetes
VMware Tanzu
Openstack 101
Openstack 101Openstack 101
Openstack 101
Kamesh Pemmaraju
Kubernetes Intro
Kubernetes IntroKubernetes Intro
Kubernetes Intro
Antonio Ojea Garcia
The Zen of High Performance Messaging with NATS
The Zen of High Performance Messaging with NATS The Zen of High Performance Messaging with NATS
The Zen of High Performance Messaging with NATS
NATS
Azure vm introduction
Azure  vm introductionAzure  vm introduction
Azure vm introduction
Lalit Rawat
Kubernetes Networking 101
Kubernetes Networking 101Kubernetes Networking 101
Kubernetes Networking 101
Weaveworks
Cloud for Kubernetes : Session4
Cloud for Kubernetes : Session4Cloud for Kubernetes : Session4
Cloud for Kubernetes : Session4
WhaTap Labs
Introduction to kubernetes
Introduction to kubernetesIntroduction to kubernetes
Introduction to kubernetes
Michal Cwienczek
OpenStack networking (Neutron)
OpenStack networking (Neutron) OpenStack networking (Neutron)
OpenStack networking (Neutron)
CREATE-NET
Google Kubernetes Engine (GKE) deep dive
Google Kubernetes Engine (GKE) deep diveGoogle Kubernetes Engine (GKE) deep dive
Google Kubernetes Engine (GKE) deep dive
Akash Agrawal
CQRS and Event Sourcing in Action
CQRS and Event  Sourcing in ActionCQRS and Event  Sourcing in Action
CQRS and Event Sourcing in Action
Knoldus Inc.
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
if kakao
Kafka Quotas Talk at LinkedIn
Kafka Quotas Talk at LinkedInKafka Quotas Talk at LinkedIn
Kafka Quotas Talk at LinkedIn
Aditya Auradkar
Packer by HashiCorp
Packer by HashiCorpPacker by HashiCorp
Packer by HashiCorp
Łukasz Cieśluk
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
Ji-Woong Choi
Autoscaling Kubernetes
Autoscaling KubernetesAutoscaling Kubernetes
Autoscaling Kubernetes
craigbox
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
SeungYong Oh
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
Heungsub Lee
Introduction to Kubernetes RBAC
Introduction to Kubernetes RBACIntroduction to Kubernetes RBAC
Introduction to Kubernetes RBAC
Kublr
Introduction to kubernetes
Introduction to kubernetesIntroduction to kubernetes
Introduction to kubernetes
Rishabh Indoria
Getting Started with Kubernetes
Getting Started with Kubernetes Getting Started with Kubernetes
Getting Started with Kubernetes
VMware Tanzu
The Zen of High Performance Messaging with NATS
The Zen of High Performance Messaging with NATS The Zen of High Performance Messaging with NATS
The Zen of High Performance Messaging with NATS
NATS
Kubernetes Networking 101
Kubernetes Networking 101Kubernetes Networking 101
Kubernetes Networking 101
Weaveworks
Cloud for Kubernetes : Session4
Cloud for Kubernetes : Session4Cloud for Kubernetes : Session4
Cloud for Kubernetes : Session4
WhaTap Labs
OpenStack networking (Neutron)
OpenStack networking (Neutron) OpenStack networking (Neutron)
OpenStack networking (Neutron)
CREATE-NET
Google Kubernetes Engine (GKE) deep dive
Google Kubernetes Engine (GKE) deep diveGoogle Kubernetes Engine (GKE) deep dive
Google Kubernetes Engine (GKE) deep dive
Akash Agrawal
CQRS and Event Sourcing in Action
CQRS and Event  Sourcing in ActionCQRS and Event  Sourcing in Action
CQRS and Event Sourcing in Action
Knoldus Inc.
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
카카오 광고 플랫폼 MSA 적용 사례 및 API Gateway와 인증 구현에 대한 소개
if kakao
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
Ji-Woong Choi
Autoscaling Kubernetes
Autoscaling KubernetesAutoscaling Kubernetes
Autoscaling Kubernetes
craigbox
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기[NDC17] Kubernetes로 개발서버 간단히 찍어내기
[NDC17] Kubernetes로 개발서버 간단히 찍어내기
SeungYong Oh
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
Heungsub Lee
Introduction to Kubernetes RBAC
Introduction to Kubernetes RBACIntroduction to Kubernetes RBAC
Introduction to Kubernetes RBAC
Kublr

Viewers also liked (13)

Apache kafka intro_20150313_springloops
Apache kafka intro_20150313_springloopsApache kafka intro_20150313_springloops
Apache kafka intro_20150313_springloops
SungMin OH
하둡2 YARN 짧게 보기
하둡2 YARN 짧게 보기하둡2 YARN 짧게 보기
하둡2 YARN 짧게 보기
beom kyun choi
Kelompok 1 struktur aljabar
Kelompok 1 struktur aljabarKelompok 1 struktur aljabar
Kelompok 1 struktur aljabar
Yuli Sinaga
Mhug apache storm
Mhug apache stormMhug apache storm
Mhug apache storm
Joseph Niemiec
AWS Webcast - Amazon Kinesis and Apache Storm
AWS Webcast - Amazon Kinesis and Apache StormAWS Webcast - Amazon Kinesis and Apache Storm
AWS Webcast - Amazon Kinesis and Apache Storm
Amazon Web Services
빅데이터실습교육 소비분야 영남대_언론정보_20141117
빅데이터실습교육 소비분야 영남대_언론정보_20141117빅데이터실습교육 소비분야 영남대_언론정보_20141117
빅데이터실습교육 소비분야 영남대_언론정보_20141117
Han Woo PARK
빅데이터분석실습 농산물중급분야 V0.9
빅데이터분석실습 농산물중급분야 V0.9빅데이터분석실습 농산물중급분야 V0.9
빅데이터분석실습 농산물중급분야 V0.9
Han Woo PARK
하둡 좋은약이지만 만병통치약은 아니다
하둡 좋은약이지만 만병통치약은 아니다하둡 좋은약이지만 만병통치약은 아니다
하둡 좋은약이지만 만병통치약은 아니다
민철 정민철
[2A7]Linkedin'sDataScienceWhyIsItScience
[2A7]Linkedin'sDataScienceWhyIsItScience[2A7]Linkedin'sDataScienceWhyIsItScience
[2A7]Linkedin'sDataScienceWhyIsItScience
NAVER D2
하둡 HDFS 훑어보기
하둡 HDFS 훑어보기하둡 HDFS 훑어보기
하둡 HDFS 훑어보기
beom kyun choi
하둡 알아보기(Learn about Hadoop basic), NetApp FAS NFS Connector for Hadoop
하둡 알아보기(Learn about Hadoop basic), NetApp FAS NFS Connector for Hadoop하둡 알아보기(Learn about Hadoop basic), NetApp FAS NFS Connector for Hadoop
하둡 알아보기(Learn about Hadoop basic), NetApp FAS NFS Connector for Hadoop
SeungYong Baek
Zeppelin(Spark)으로 데이터 분석하기
Zeppelin(Spark)으로 데이터 분석하기Zeppelin(Spark)으로 데이터 분석하기
Zeppelin(Spark)으로 데이터 분석하기
SangWoo Kim
Apache spark 소개 및 실습
Apache spark 소개 및 실습Apache spark 소개 및 실습
Apache spark 소개 및 실습
동현 강
Apache kafka intro_20150313_springloops
Apache kafka intro_20150313_springloopsApache kafka intro_20150313_springloops
Apache kafka intro_20150313_springloops
SungMin OH
Kelompok 1 struktur aljabar
Kelompok 1 struktur aljabarKelompok 1 struktur aljabar
Kelompok 1 struktur aljabar
Yuli Sinaga
AWS Webcast - Amazon Kinesis and Apache Storm
AWS Webcast - Amazon Kinesis and Apache StormAWS Webcast - Amazon Kinesis and Apache Storm
AWS Webcast - Amazon Kinesis and Apache Storm
Amazon Web Services
빅데이터실습교육 소비분야 영남대_언론정보_20141117
빅데이터실습교육 소비분야 영남대_언론정보_20141117빅데이터실습교육 소비분야 영남대_언론정보_20141117
빅데이터실습교육 소비분야 영남대_언론정보_20141117
Han Woo PARK
빅데이터분석실습 농산물중급분야 V0.9
빅데이터분석실습 농산물중급분야 V0.9빅데이터분석실습 농산물중급분야 V0.9
빅데이터분석실습 농산물중급분야 V0.9
Han Woo PARK
하둡 좋은약이지만 만병통치약은 아니다
하둡 좋은약이지만 만병통치약은 아니다하둡 좋은약이지만 만병통치약은 아니다
하둡 좋은약이지만 만병통치약은 아니다
민철 정민철
[2A7]Linkedin'sDataScienceWhyIsItScience
[2A7]Linkedin'sDataScienceWhyIsItScience[2A7]Linkedin'sDataScienceWhyIsItScience
[2A7]Linkedin'sDataScienceWhyIsItScience
NAVER D2
하둡 알아보기(Learn about Hadoop basic), NetApp FAS NFS Connector for Hadoop
하둡 알아보기(Learn about Hadoop basic), NetApp FAS NFS Connector for Hadoop하둡 알아보기(Learn about Hadoop basic), NetApp FAS NFS Connector for Hadoop
하둡 알아보기(Learn about Hadoop basic), NetApp FAS NFS Connector for Hadoop
SeungYong Baek
Zeppelin(Spark)으로 데이터 분석하기
Zeppelin(Spark)으로 데이터 분석하기Zeppelin(Spark)으로 데이터 분석하기
Zeppelin(Spark)으로 데이터 분석하기
SangWoo Kim
Apache spark 소개 및 실습
Apache spark 소개 및 실습Apache spark 소개 및 실습
Apache spark 소개 및 실습
동현 강

Similar to Zookeeper 소개 (20)

Apache ZooKeeper 소개
Apache ZooKeeper 소개Apache ZooKeeper 소개
Apache ZooKeeper 소개
중선 곽
A review of zookeeper 2010.12
A review of zookeeper 2010.12A review of zookeeper 2010.12
A review of zookeeper 2010.12
HoJin Ha
OpenStack Swift Debugging
OpenStack Swift DebuggingOpenStack Swift Debugging
OpenStack Swift Debugging
OpenStack Korea Community
Zoo keeper 소개
Zoo keeper 소개Zoo keeper 소개
Zoo keeper 소개
주표 홍
Concurrent servers
Concurrent serversConcurrent servers
Concurrent servers
TonyYoon12
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
nexusz99
1st-BE-sideproject-GDGonCampus_KyungHee_Univ.pdf
1st-BE-sideproject-GDGonCampus_KyungHee_Univ.pdf1st-BE-sideproject-GDGonCampus_KyungHee_Univ.pdf
1st-BE-sideproject-GDGonCampus_KyungHee_Univ.pdf
dpfls5645
Npac(엔팩) 가이드
Npac(엔팩) 가이드Npac(엔팩) 가이드
Npac(엔팩) 가이드
VentureSquare
Implementing remote procedure calls rev2
Implementing remote procedure calls rev2Implementing remote procedure calls rev2
Implementing remote procedure calls rev2
Sung-jae Park
파워서포트 가이드
파워서포트 가이드파워서포트 가이드
파워서포트 가이드
StartupAlliance
Hadoop distributed file system rev3
Hadoop distributed file system rev3Hadoop distributed file system rev3
Hadoop distributed file system rev3
Sung-jae Park
클라우드 환경을 위한 네트워크 가상화와 NSX(기초편)
클라우드 환경을 위한 네트워크 가상화와 NSX(기초편)클라우드 환경을 위한 네트워크 가상화와 NSX(기초편)
클라우드 환경을 위한 네트워크 가상화와 NSX(기초편)
Laehyoung Kim
Golang Project Guide from A to Z: From Feature Development to Enterprise Appl...
Golang Project Guide from A to Z: From Feature Development to Enterprise Appl...Golang Project Guide from A to Z: From Feature Development to Enterprise Appl...
Golang Project Guide from A to Z: From Feature Development to Enterprise Appl...
Kyuhyun Byun
[E6]2012. netty internals
[E6]2012. netty internals[E6]2012. netty internals
[E6]2012. netty internals
NAVER D2
Network researching
Network researchingNetwork researching
Network researching
hyeok gyu Kwon
Mcollective orchestration tool 소개
Mcollective orchestration tool 소개Mcollective orchestration tool 소개
Mcollective orchestration tool 소개
태준 문
Cloud-Barista 제5차 오픈 컨퍼런스 : 멀티클라우드 가상 네트워크 (CB-Larva)
Cloud-Barista 제5차 오픈 컨퍼런스 : 멀티클라우드 가상 네트워크 (CB-Larva)Cloud-Barista 제5차 오픈 컨퍼런스 : 멀티클라우드 가상 네트워크 (CB-Larva)
Cloud-Barista 제5차 오픈 컨퍼런스 : 멀티클라우드 가상 네트워크 (CB-Larva)
Cloud-Barista Community
resource on openstack
 resource on openstack resource on openstack
resource on openstack
jieun kim
Private cloud network architecture (2018)
Private cloud network architecture (2018)Private cloud network architecture (2018)
Private cloud network architecture (2018)
Gasida Seo
Apache ZooKeeper 소개
Apache ZooKeeper 소개Apache ZooKeeper 소개
Apache ZooKeeper 소개
중선 곽
A review of zookeeper 2010.12
A review of zookeeper 2010.12A review of zookeeper 2010.12
A review of zookeeper 2010.12
HoJin Ha
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
Dropbox와 같은 시스템은 파일을 어떻게 저장할까?
nexusz99
1st-BE-sideproject-GDGonCampus_KyungHee_Univ.pdf
1st-BE-sideproject-GDGonCampus_KyungHee_Univ.pdf1st-BE-sideproject-GDGonCampus_KyungHee_Univ.pdf
1st-BE-sideproject-GDGonCampus_KyungHee_Univ.pdf
dpfls5645
Implementing remote procedure calls rev2
Implementing remote procedure calls rev2Implementing remote procedure calls rev2
Implementing remote procedure calls rev2
Sung-jae Park
Hadoop distributed file system rev3
Hadoop distributed file system rev3Hadoop distributed file system rev3
Hadoop distributed file system rev3
Sung-jae Park
클라우드 환경을 위한 네트워크 가상화와 NSX(기초편)
클라우드 환경을 위한 네트워크 가상화와 NSX(기초편)클라우드 환경을 위한 네트워크 가상화와 NSX(기초편)
클라우드 환경을 위한 네트워크 가상화와 NSX(기초편)
Laehyoung Kim
Golang Project Guide from A to Z: From Feature Development to Enterprise Appl...
Golang Project Guide from A to Z: From Feature Development to Enterprise Appl...Golang Project Guide from A to Z: From Feature Development to Enterprise Appl...
Golang Project Guide from A to Z: From Feature Development to Enterprise Appl...
Kyuhyun Byun
[E6]2012. netty internals
[E6]2012. netty internals[E6]2012. netty internals
[E6]2012. netty internals
NAVER D2
Mcollective orchestration tool 소개
Mcollective orchestration tool 소개Mcollective orchestration tool 소개
Mcollective orchestration tool 소개
태준 문
Cloud-Barista 제5차 오픈 컨퍼런스 : 멀티클라우드 가상 네트워크 (CB-Larva)
Cloud-Barista 제5차 오픈 컨퍼런스 : 멀티클라우드 가상 네트워크 (CB-Larva)Cloud-Barista 제5차 오픈 컨퍼런스 : 멀티클라우드 가상 네트워크 (CB-Larva)
Cloud-Barista 제5차 오픈 컨퍼런스 : 멀티클라우드 가상 네트워크 (CB-Larva)
Cloud-Barista Community
resource on openstack
 resource on openstack resource on openstack
resource on openstack
jieun kim
Private cloud network architecture (2018)
Private cloud network architecture (2018)Private cloud network architecture (2018)
Private cloud network architecture (2018)
Gasida Seo

More from beom kyun choi (20)

옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
beom kyun choi
DDD로 복잡함 다루기
DDD로 복잡함 다루기DDD로 복잡함 다루기
DDD로 복잡함 다루기
beom kyun choi
TDD 발담그기 @ 공감세미나
TDD 발담그기 @ 공감세미나TDD 발담그기 @ 공감세미나
TDD 발담그기 @ 공감세미나
beom kyun choi
keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)
beom kyun choi
DDD 준비 서문래
DDD 준비 서문래DDD 준비 서문래
DDD 준비 서문래
beom kyun choi
Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀
beom kyun choi
Ddd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksugDdd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksug
beom kyun choi
MVP 패턴 소개
MVP 패턴 소개MVP 패턴 소개
MVP 패턴 소개
beom kyun choi
파이썬 언어 기초
파이썬 언어 기초파이썬 언어 기초
파이썬 언어 기초
beom kyun choi
도메인구현 KSUG 20151128
도메인구현 KSUG 20151128도메인구현 KSUG 20151128
도메인구현 KSUG 20151128
beom kyun choi
Event source 학습 내용 공유
Event source 학습 내용 공유Event source 학습 내용 공유
Event source 학습 내용 공유
beom kyun choi
Spring Boot 소개
Spring Boot 소개Spring Boot 소개
Spring Boot 소개
beom kyun choi
모델링 연습 리뷰
모델링 연습 리뷰모델링 연습 리뷰
모델링 연습 리뷰
beom kyun choi
ALS WS에 대한 이해 자료
ALS WS에 대한 이해 자료ALS WS에 대한 이해 자료
ALS WS에 대한 이해 자료
beom kyun choi
Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)
beom kyun choi
리뷰의 기술 소개
리뷰의 기술 소개리뷰의 기술 소개
리뷰의 기술 소개
beom kyun choi
스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해
beom kyun choi
자바8 스트림 API 소개
자바8 스트림 API 소개자바8 스트림 API 소개
자바8 스트림 API 소개
beom kyun choi
자바8 람다식 소개
자바8 람다식 소개자바8 람다식 소개
자바8 람다식 소개
beom kyun choi
차원축소 훑어보기 (PCA, SVD, NMF)
차원축소 훑어보기 (PCA, SVD, NMF)차원축소 훑어보기 (PCA, SVD, NMF)
차원축소 훑어보기 (PCA, SVD, NMF)
beom kyun choi
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
옛날 웹 개발자가 잠깐 맛본 Vue.js 소개
beom kyun choi
TDD 발담그기 @ 공감세미나
TDD 발담그기 @ 공감세미나TDD 발담그기 @ 공감세미나
TDD 발담그기 @ 공감세미나
beom kyun choi
keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)keras 빨리 훑어보기(intro)
keras 빨리 훑어보기(intro)
beom kyun choi
Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀Tensorflow regression 텐서플로우 회귀
Tensorflow regression 텐서플로우 회귀
beom kyun choi
Ddd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksugDdd start 부록 지앤선&ksug
Ddd start 부록 지앤선&ksug
beom kyun choi
도메인구현 KSUG 20151128
도메인구현 KSUG 20151128도메인구현 KSUG 20151128
도메인구현 KSUG 20151128
beom kyun choi
Event source 학습 내용 공유
Event source 학습 내용 공유Event source 학습 내용 공유
Event source 학습 내용 공유
beom kyun choi
모델링 연습 리뷰
모델링 연습 리뷰모델링 연습 리뷰
모델링 연습 리뷰
beom kyun choi
ALS WS에 대한 이해 자료
ALS WS에 대한 이해 자료ALS WS에 대한 이해 자료
ALS WS에 대한 이해 자료
beom kyun choi
Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)Ji 개발 리뷰 (신림프로그래머)
Ji 개발 리뷰 (신림프로그래머)
beom kyun choi
리뷰의 기술 소개
리뷰의 기술 소개리뷰의 기술 소개
리뷰의 기술 소개
beom kyun choi
스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해스프링 시큐리티 구조 이해
스프링 시큐리티 구조 이해
beom kyun choi
자바8 스트림 API 소개
자바8 스트림 API 소개자바8 스트림 API 소개
자바8 스트림 API 소개
beom kyun choi
자바8 람다식 소개
자바8 람다식 소개자바8 람다식 소개
자바8 람다식 소개
beom kyun choi
차원축소 훑어보기 (PCA, SVD, NMF)
차원축소 훑어보기 (PCA, SVD, NMF)차원축소 훑어보기 (PCA, SVD, NMF)
차원축소 훑어보기 (PCA, SVD, NMF)
beom kyun choi

Zookeeper 소개

  • 2. 클러스터에 필요한 것 ● 클러스터 구성원 관리 o 살았니? 죽었니? o 누가 마스터? ● 클러스터 구성원 간 정보 공유 ● 분산 서버의 동시 접근 제어
  • 3. ZooKeeper 갵Ӛ ● 분산 시스템을 위한 코디네이터 ● 서버와 클라이언트로 구성 o 서버 앙상블: n개 서버로 단일 주키퍼 클러스터 구성 o 클라이언트: 앙상블에 속한 서버에 연결하여, 서비스 사용 ● 서버 제공 서비스 o 데이터 스토리지 (영속 데이터/임시 데이터)  클러스터 구성원 간 데이터 공유 o 데이터 변경 통지(Watch)  클러스터 멤버십 관리 o 시퀀스 노드  마스터, 분산 락 등에 활용
  • 5. ZNode ● ZNode o ZooKeeper는 계층형 네임스페이스를 가짐 o 계층의 각 노드를 ZNode라고 부름  계층의 각 경로는 ‘/’로 구분 o znode는 데이터를 가질 수 있음 (byte[]) o znode는 자식 노드를 가질 수 있음  예, /svc 노드는 /svc/nodes 노드를 가질 수 있음 ● 영속 종류 o PERSISTENT: 클라이언트가 종료되도 유지 o EPHEMERAL: znode를 생성한 클라이언트의 연결이 끊기면 삭제  자식 znode를 가질 수 없음
  • 6. 주요 오퍼레이션 ● 주요 오퍼레이션 o create o delete o exists o getChildren o getData o setData ● 언어 별 바인딩 제공 o Java, C, Python, Ruby, Scala 등  https://cwiki.apache.org/confluence/display/ZOOKEEPER/ZKClientBindings
  • 7. ZNode Watch ● znode의 변화를 통지 받음 ● 오퍼레이션 실행시 Wacher 등록 o zk.getChildren(“/mysvc/nodes”, watcher) ZK 서버클라이언트 클라이언트 Watcher 등록 변경 통지 znode 변경
  • 8. ZNode Watch 이벤트 종류 Watch 생성 오퍼레이션 znode 생성 znode 삭제 자식 생성 자식 삭제 znode 값 변경 exists NodeCreated NodeDeleted NodeDataCha nged getData NodeDeleted NodeDataCha nged getChildren NodeDeleted NodeChildren Changed NodeChildren Changed
  • 9. Watch 특징 ● 일회성 이벤트 수신 o 다시 Watch하고 싶으면 재등록해야 함 o 재등록 전에 발생한 변경은 수신하지 못함 ● 상태 변경 요청한 클라이언트가 성공 코드를 받은 이후에, Watcher를 등록한 클라이언트 에 통지 됨 ● ZooKeeper의 변경 순서대로 Watch 이벤트를 수신 함
  • 10. 시퀀스 노드 ● 자식 노드가 생성한 순서에 따라 일렬 번호를 가짐 o 예, /svc 노드의 자식 노드로 /nodes를 시퀀스 노드로 생성하면 다음과 같은 순서로 노드 생성  /svc/nodes0000000001  /svc/nodes0000000002 o PERSISTENT와 EPHEMERAL에 모두 적용 가능 o 시퀀스 범위 (4 byte 정수)  -2,147,483,647 ~ 2,147,483,647 (-21억~21억)
  • 12. 그룹 관리: 자식 ZNODE, Watch ● 그룹 멤버십 목록을 가질 부모 znode 생성 ○ 예: /members 멤버십 참여 ● 부모 znode에 자신을 위한 자식 znode를 ephemeral로 생성 ○ 예, /members/m-hostip ● 자식 znode 데이터는 다른 구성원이 자신과 통신 하는데 필요한 정보 저장 (예, ip/port 등) 멤버십 탈퇴 ● 자신에 해당하는 자식 znode를 삭제 멤버십 목록, 주기적 갱신 (각 클라이언트) ● 주기적으로 getChildlen 실행해서 목록 갱신 멤버십 목록, Watch 이용 (각 클라이언트) ● 부모 znode에 getChildlen로 WATCH 등록하고, getChildlen 결과로 목록 갱 신 ● NodeChildrenChanged 이벤트 수신 시, 위 과정 재실행
  • 13. 마스터 선출: 시퀀스 노드, WATCH ● 마스터 후보를 보관할 znode 생성 ○ 예: /masters 마스터 후보 등록 ● 부모 znode에 자신을 위한 자식 znode를 시퀀 스 & ephemeral로 생성 ○ 예, /masters/m-0000000010 마스터 선출 (각 후보 클라이언트에서 진행) ● 부모 znode에 getChild로 WATCH 등록 ● NodeChildrenChanged 이벤트 수신시, 현재 마스터가 없는 지 확인 ● 마스터에 해당하는 자식 znode가 없으 면 ○ 부모 znode에 자식 znode 를 구한 뒤 시퀀스 번호가 가장 작은 znode를 마스터로 선택 ● 부모 znode에 getChild로 WATCH 등록
  • 14. 기타 용도 ● 분산 락 o EPHEMERAL 사용 ● 이벤트 통지 o WATCH 사용 ● pub/sub o SEQUENCE 사용 ● 분산 카운터 o SEQUENCE 또는 znode의 version 사용 ● 디렉토리 서비스 o 활성화된 서비스 목록 등 제공
  • 16. 버전 ● zxid: ZooKeeper Transaction ID o 모든 변경은 고유 트랜잭션 ID를 가짐 o 순서를 가짐 ● version o znode가 변경될 때 마다 버전 값 증가 ● cversion o 자식 znode가 변경될 때 마다 버전 값 증가
  • 17. 서버와 클라이언트 연결 ZK클라이언트 ZK서버 ZK서버 ZK서버(리더) ZK서버 ZK서버 ZK클라이언트 연결 유지를 위해 주기적으로 PING 전송 연결된 서버에서 읽기 실행 일정 시간 동안 클라이언트로 부터 PING이 없으면 세션 종료 처리 ZK클라이언트 연결된 서버에 변 경 요청 리더에 변경 요청을 전달 하면, 리더가 트랜잭션 생성 후, 전 노드에 전파 PING 전송 실패시, 다른 서버에 연결
  • 18. Quorum: 가용성, 데이터 변경 ● 과반 정족수 이상 서버 다운시, 서비스 중지 o 예, 2대 중 1대 다운되면 서비스 중지 o 이런 이유로 서버 개수는 홀수로 맞춤 (3, 5 등) ● 데이터 변경시 성공 기준 o 리더 서버가 트랜잭션 생성 후 다른 서버에 전파할 때, 과반 정족수 이상 트랜잭션 성공하면 클라이언트에 변경 성공 결과 리턴
  • 19. 일관성 보장 ● Sequential Consistency: 변경 요청은 순서대 로 적용 ● Atomicity: 변경은 성공 또는 실패 ● Single System Image: 클라이언트는 연결한 서버에 상관없이 동일 서비스 사용 ● Reliability: 클라이언트가 성공 코드를 받으면, 서버에 반영됨을 보장 ● Timeliness: 클라이언트는 일정 시간내에 최 신 상태를 사용 (Eventual Consistency)
  • 21. 믿고 쓸 만한 분산 코디네이터 ● 다양한 오픈소스에서 채택 o Hadoop: 마스터(Name Node) 이중화 o HBase: 마스터 선출, 리전 데이터 공유 등에 사용 o Storm: 서버 간 데이터 공유 등에 사용 o Kafka: 클러스터 관리 o Neo4j: 마스터 선출에 사용