주키퍼 (ZooKeeper)란?

 

ZooKeeper  Coordination

분산환경에서 서버들간에 상호 조정이 필요한 다양한 서비스를 제공하는 시스템

 

분산 프로그램 작성의 어려움: 부분적 실패(partial failure)

주키퍼가 부분적 실패를 완전히 사라지게 할 수는 없지만, 부분적 실패를 안전하게 다루면서 분산 응용 프로그램을 구출할 수 있도록 도와주는 도구 제공한다.

 

  •   주키퍼는 단순하다.

단순한 몇 개의 핵심적인 연산을 제공하는 간소화(stripped-down)된 하나의 파일시스템

이벤트와 관련된 순서화(ordering)와 통지(notification) \같은 추상화도 제공한다.

 

  •   주키퍼는 다양하게 활용된다

상호조정에 필요한 다양한 데이터 구조체와 프로토콜 구축을 위한 풍부한 프리미티브 제공

 

  •   주키퍼는 고가용성을 지원한다

클러스터상에서 동작하고, 고가용성을 보장하도록 설계됨.

 

  •   주키퍼는 느슨하게 연결된 상호작용을 제공한다

상호작용 참여자의 익명성을 보장한다. 서로의 존재나 네트워크 세부사항을 모르더라도 프로세스가 상호 발견하고 상호 소통할 수 있도록 해준다.

 

  •   주키퍼는 라이브러리다

상호조정 패턴에 대한 구현물과 구현 방법을 오픈소스로 제공

 

 

구조

 

 

 

 

 

 

 

 

 

 

Zookeeper Service

 

 

  •        All servers store a copy of the data (in memory)‏
  •        A leader is elected at startup
  •        Followers service clients, all updates go through leader
  •        Update responses are sent when a majority of servers have persisted the change

 

  1.      하나의 서버에만 서비스가 집중되지 않도록, 서비스를 알맞게 분산하여 동시에 처리하게 함
  2.      하나의 서버에서 처리한 결과를 다른 서버들과도 동기화하여 데이터의 안정성을 보장
  3.      운영(active)서버가 문제가 발생해서 서비스를 제공할 수 없을 경우, 다른 대기 중인 서버를 운영서버로 바꿔서 서비스가 중지되지 않도록 함
  4.      분산 환경을 구성하는 서버들의 환경설정을 통합관리

 

Zookeeper 서버는 일반적으로 3대 이상을 사용하며 서버 수는 주로 홀수로 구성.

 

 

-> 서버 간의 데이터가 불일치가 일어나면 데이터 보정이 필요한데 이때 과반수의 룰을 적용하기 때문에 서버를 홀수로 구성하는 것이 데이터 정합성 측면에서 유리하다.

※ 과반수의 룰?

모든 ZooKeeper 서버 주소를 클라이언트로 지정해 놓았다면 현재 연결한 ZooKeeper 서버가 중단되더라도 자동으로 다른 ZooKeeper 서버에 세션을 유지한 채로 다시 연결한다. 이와 같은 특성으로 인해 앙상블을 구성하는 ZooKeeper 서버 중 과반수의 서버가 현재 동작한다면 데이터 읽기 쓰기를 정상적으로 처리한다.

데이터의 변경이 자주 발생하는 서비스에서 ZooKeeper를 데이터 저장소로 사용하는 것은 추천하지 않는다.

ZooKeeper에서 추천하는 Read : Write 비율은 10 : 1 이상이다.(약 23,000번의 트랜잭션을 수행)

 

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

  •        Znode <노드 계층적 트리>
    •       In-memory data node in the Zookeeper data
    •       Have a hierarchical namespace
    •       UNIX의 파일시스템 경로와 같다. (/)슬래시로 구분
  •        Types of Znode
    •       Regular: 클라이언트에 의해 명시적으로 삭제될 때만 삭제됨.
    •       Ephemeral: 클라이언트의 세션이 종료될 때 주키퍼에 의해 삭제된다.
    •       Sequence: 순차노드. 저장하는 순서에 따라 자동으로 일련번호가 붙는 노드
  •        Flags of Znode

Sequential flag. 순차노드의 실제 경로는 create() 호출의 반환값으로서 클라이언트에게 전달될 것이다. 이 기능을 활용해 분산 락을 구현할 수 있다.

 

 

  •         감시(Watch)

 

Zookeeper 연산

연산

설명

Create

Znode 생성(부모 znode가 이미 존재해야함)

Delete

Znode 삭제(어떤 znode도 존재하지않아야함)

Exists

Znode가 존재하는지 확인하고, 메타데이터를 구함

getACL, setACL

Znode에 대한 ACL설정을 얻거나 설정

getChildren

Znode 자식의 목록을 얻음

getData, setData

Znode와 관계된 데이터를 얻거나 저장

sync

Znode의 클라이언트 뷰와 주키퍼 동기화

Multi (다중갱신)

여러 개의 프리미티브 연산을 하나의 갱신단위로 묶어 연산의 성공과 실패를 반환. 분산환경에서 전역적으로 불변성을 유지해야 하는 구조체를 구축하는 데 유용.

 

  •   주키퍼의 데이터 접근은 원자적이다. Znode에 저장된 데이터를 읽는 클라이언트는 결코 데이터의 일부만 받을 수 없으며 데이터 전체가 전달된다. 마찬가지로 쓰기연산은 znode에 해당하는 모든 데이터를 교체할 것이다. 주키퍼는 쓰기연산을 성공과 실패로만 결정한다. 부분적 쓰기는 불가능하다.

 

 

Client API

  •        Create(path, data, flags)
  •        Delete(path, version)
  •        Exist(path, watch)
  •        getData(path, watch)
  •        setData(path, data, version)
  •        getChildren(path, watch)
  •        Sync(path)
  •        Two version synchronous and asynchronous

 

Guarantees

  •        Linearizable writes
    •       All requests that update the state of ZooKeeper are serializable and respect precedence
  •        FIFO client order
    •       All requests are in order that they were sent by client.

 

일관성

  •        순서의 일관성: 클라이언트로부터의 업데이트 연산은 보내진 순서대로 적용
  •        원자성: 업데이트 연산은 성공 또는 실패 둘중 하나
  •        단일 시스템 이미지: 클라이언트는 연결된 서버에 관계없이 같은 시스템을 바라보는 것처럼 동작할 것이다.
  •        지속성: 업데이트 연산이 성공하면 내역은 유지되고 취소되지 않을 것이다
  •        적시성: 뒤쳐진 정보를 클라이언트에게 주지 않는다. (그럴 바엔 서버를 강제 중단)

 

 

상태

Connecting : 연결시도

Connected : 연결중

Closed    :  종료 상태

 

Zookeeper를 이용하는 예

  •        Hbase
  •        Solr
  •        Digg
  •        LinkedIn
  •        Unnamed financial institutions

 


[출처] http://over153cm.tistory.com/entry/what-is-ZooKeeper

 

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
공지 오라클 기본 샘플 데이터베이스 졸리운_곰 2014.01.02 86352
공지 [SQL컨셉] 서적 "SQL컨셉"의 샘플 데이타 베이스 SAMPLE DATABASE of ORACLE 가을의 곰을... 2013.02.10 78809
공지 [G_SQL] Sample Database 가을의 곰을... 2012.05.20 95559
164 6. 주키퍼(zookeeper) 활용 - 분산서버 구현 1편 file 졸리운_곰 2016.05.30 1414
» 주키퍼 (ZooKeeper)란? file 졸리운_곰 2016.05.30 1342
162 ZooKeeper란 무엇인가? file 졸리운_곰 2016.05.30 1878
161 Parse Redis dump.rdb files, Analyze Memory, and Export Data to JSON 졸리운_곰 2016.05.29 1979
160 Flume or Kafka? Try both! 졸리운_곰 2016.05.29 1002
159 Flafka: Apache Flume Meets Apache Kafka for Event Processing file 졸리운_곰 2016.05.29 1535
158 빅데이터 플랫폼 아키텍처의 두 가지 file 졸리운_곰 2016.05.29 1685
157 Hadoop 적용 사례 기사 정리 졸리운_곰 2016.05.29 2001
156 빅데이터 잡설 , 하둡은 어디로 갈꺼나 … file 졸리운_곰 2016.05.29 1741
155 Hadoop과 MongoDB를 이용한 로그분석시스템 file 졸리운_곰 2016.05.29 1431
154 네이버 라인은 왜 카카오톡보다 병목현상이 적을까? file 졸리운_곰 2016.05.29 2538
153 최악의 빅데이터 프랙티스 10가지 졸리운_곰 2016.05.29 1432
152 하둡, 데이터 분석에 활용하기까지 file 졸리운_곰 2016.05.29 2139
151 Redis(레디스)를 어떻게 활용할 수 있을까? 졸리운_곰 2016.05.29 2059
150 [NoSQL & Cache] Redis vs Memcached ( 왜 Redis 를 사용해야 하는가? ) 졸리운_곰 2016.05.29 1169
149 REDIS 소개, 설치, 데이터 타입 테스트 file 졸리운_곰 2016.05.29 1438
148 FlumeNG + Kafka Plugin (플럼+카프카 플러그인) file 졸리운_곰 2016.05.29 1441
147 flume 설치 해보고 로그 수집하기 file 졸리운_곰 2016.05.29 1423
146 Flume NG version 설치 및 로그 수집 file 졸리운_곰 2016.05.29 1679
145 Flume(플럼) 참고 사이트 정리 졸리운_곰 2016.05.29 1833
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED