zookeeper 11

ZooKeeper 옵저버와 CLI

ZooKeeper 옵저버와 CLI · Version : Zookeeper 주키퍼는 리더가 모든 서버에 쓰기 요청을 보내고 과반수 이상의 응답을 받은 후 처리한다. 주키퍼 서버에 연결되는 클라이언트수가 많으면, 서버를 확장하여 읽기에 대한 부하분산이 가능하다. 하지만 서버가 늘어날 경우, 쓰기 연산 발생시 전체 서버에 대해서 응답을 기다려야 하기 때문에, 그만큼 성능 저하가 발생할 수 있다. 이러한 문제를 해결하기위해 옵저버 개념이 도입되었다. 옵저버는 투표에 참여하지 않는 서버를 뜻한다. 리더는 쓰기 요청을 받고 각 서버로 쓰기에 대한 응답을 보내고 받을때, 옵저버 서버에는 보내지 않는다. 그리고 일반 서버의 투표에 의한 정상 처리인 경우, 쓰기 요청을 옵저버로 보내 옵저버의 로컬 메모리에 데이터를 기록..

ZooKeeper 클라이언트 요청 처리

ZooKeeper 클라이언트 요청 처리 · Version : Zookeeper 주키퍼의 모든 서버는 클라이언트로 부터 읽기, 쓰기 요청을 받을 수 있다. 읽기 요청은 클라이언트가 접속한 서버의 로컬 데이터를 이용한다. 쓰기 요청을 받은 서버는 리더 서버로 리다이렉트 한다. 리더는 새로운 트랜잭션아디이(zxid)를 생성한 후 모든 팔로워에게 쓰기 요청을 보낸다. 쓰기 요청을 받은 서버는 자기의 로컬 트랜잭션 로그 파일에 처리 내역을 저장하지만 실제 메모리에는 반영하지 않고, 리더로 ACK 신호를 보낸다. 리더는 과반수 이상의 팔로워로부터 ACK 신호를 받으면 메모리에 반영하라고 하는 커밋 신호를 보낸다. 커밋 신호를 받은 팔로워는 자신의 메모리에 쓰기 요청된 정보를 반영한다. 팔로워 중 클라이언트로 부터 ..

ZooKeeper 멀티 서버 구성

ZooKeeper 멀티 서버 구성 · Version : Zookeeper 주키퍼를 멀티서버로 구성하려면 각 서버에 멀티서버에 대한 정보를 추가해야 한다. 주피커 설치 디렉터리에서 conf/zoo.cfg 파일에 아래와 같이 정보를 입력 한다. tickTime=2000 initLimit=10 syncLimit=5 dataDir=/data/zookeeper clientPort=2181 server.1=192.168.1.1:2888:3888 server.2=192.168.1.2:2888:3888 server.3=192.168.1.3:2888:3888 zoo.cfg 파일에서 서버 수 만큼 server.x=IP:Port:Port 를 입력한다. server는 예약어이며, x는 서버를 식별하는 ID로 숫자를 입력한다...

ZooKeeper 리더선출과 데이터 ACID 정책

ZooKeeper 리더선출과 데이터 ACID 정책 · Version : Zookeeper 주키퍼를 사용하여 분산 시스템을 관리할 경우 주키퍼는 반드시 멀티 서버로 운영해야한다. 멀티서버로 운영할 경우 네트워크 단절, 트랜잭션 타임아웃등의 상황에 대비해야한다. 특히 일부 주키퍼 서버 장애발생시 해당 서버에 접속된 클라이언트의 세션에 대한 처리, 장애복구 후 서버간 데이터 동기화 등이 고려되어야 한다. 주키퍼는 이러한 문제를 자체적으로 해결하기 때문에 마스터 서버 구성시 주키퍼를 사용함으로써 상대적으로 쉽게 해결할 수 있다. 주키퍼를 멀티서버로 설치하면 모든 서버는 동일한 데이터를 가지고 있다. 클라이언트는 모든 서버에 접속해서 읽기, 쓰기 요청을 보낼수 있다. 읽기 연산은 모든 데이터가 동기화 되어 있기 ..

Zookeeper 세션(Session)

Zookeeper 세션(Session) · Version : Zookeeper 주키퍼에서 세션(session)은 주키퍼 서버와 클라이언트의 연결을 의미한다. 세션 상태는 5가지가 있다. · Connecting : 클라이언트가 주키퍼 서버와 연결을 시도하고 있는 상태이다. · Connected : 서버와 연결된 상태로, z노드에 연산을 수행할 수 있는 상태이다. · Closed : close() 메소드에 의해 명시적으로 연결을 종료했거나, 세션 타임아웃, 인증 실패 등으로 서버와 연결이 종료된 상태 · Disconnected : 시스템 장애, 네트워크 장애등으로 서버와의 접속이 끊긴 상태이다. Disconnected 상태에서는 클라이언트가 자동으로 파라메터로 받은 서버 중 한 대에 다시 접속을 시도하며, ..

Zookeeper 접근제한(Access Control List)

Zookeeper 접근제한(Access Control List) · Version : Zookeeper 주키퍼의 패스와 노드에 대한 권한 관리는 상속되지 않는다. 이 뜻은 부모 노드와 자식 노드가 있을때, 부모의 노드의 권한 속성이 자식 노드로 권한 상속이 발생하지 않다는 것이다. 그리고 아무런 설정을 하지 않으면 누구나 접근이 가능하다. 접근권한은 [schema:id, permission] 같은 형태로 설정한다. Schema는 인증방법을 정의하고, id는 인증을 허용할 값을 정의, permission에는 처리할 수 있는 기능을 정의한다. ex) 특정IP를 가진 클라이언트에 읽기(read) 권한 부여 : ip:192.168.0.1, READ · CREATE : 자식 노드를 생성할 수 있는 권한 · REA..

ZooKeeper Stat Structure

ZooKeeper Stat Structure · Version : Zookeeper 주키퍼(Zookeeper)의 z노드에는 몇 가지 속성이 있다. · Stat : z노드의 상태 정보를 저장 · Watcher : 세션의 상태가 변경 되었거나 관심 있는 노드의 상태변경(생성, 수정, 추가, 삭제)이 발생했을때 클라이언트가 이벤트를 받아 처리할 수 있게 하는 기능을 제공 · Atomic : z노드에 대한 데이터의 조회와 저장은 원자성을 가진다. · Persistent Node : “Persistent” 옵션으로 생성된 z노드는 주키퍼 서버의 로컬 디스크에 영구히 저장되고 클라이언트의 삭제 요청에 의해서만 삭제된다. 따라서 주키퍼 서버가 재시작 되어도 데이터는 보존된다. · Ephemeral Node : 임시노..

ZooKeeper 시간 동기화와 네임스페이스 z노드

ZooKeeper 시간 동기화와 네임스페이스 z노드 · Version : Zookeeper 주키퍼(Zookeeper)는 하나 이상의 서버에서 수행되기 때문에 클라이언트의 처리 요청에 따라 버전 정보나, 시간정보등에 대해서 모든 주키퍼 서버가 공유해야한다. 주피커는 아래와 같은 방법으로 시간이나 버전 정보를 관리한다. · Zxid (Zookeeper Transaction Id) : 주키퍼 노드의 상태를 변경하는 요청에 대해 부여되는 트랜잭션ID로, 모든 변경 요청에 대해서 순차적으로 부여된다. zxid가 낮을 수록 먼저 요청되었다는 것을 보장한다. · Version numbers : 노드의 데이터가 변경될때 마다 버전 값이 증가. 버전에는 z노드 데이터 변경, 자식 노드의 변경, AC 변경이 있으며 각각 ..

Zookeeper 소개

Zookeeper 소개 · Version : Zookeeper 주키퍼(Zookeeper)는 분산 코디네이터 서비스(Distributed Coordinator Service)를 제공하는 아파치 오픈소스이다. 분산 환경에서 락, 네이밍 서비스, 클러스터 멤버십 등을 쉽게 구현할 수 있는 기능을 제공한다. (주키퍼 자체적으로 기능을 제공하지 않으며, 기능을 쉽게 만들 수 있는 메커니즘을 제공) 주키퍼를 이용하는 대표적인 사례는 아래와 같다. · 네임 서비스, 환경설정, 그룹 멤버십 · Double Barriers · 우선순위 큐 (Priority Queues) · 공유 락 제어 · 두 단계 커밋 (Tow-phased commit) · 리더 선출 주키퍼는 n개의 서버와 클라이언트 API로 구성되어 있으며, 서버..

HDFS 고가용성 (High Availability) 개념

HDFS 고가용성 (High Availability) 개념 · Version : HDFS HDFS(Hadoop File System)에서 SPOF(Single Point of Failure) 는 네임노드이다. 네임노드가 손상되거나 중지되면 모든 작업이 중지되고 파일을 읽거나 쓸수 없게 된다. 하둡 2.0 부터는 SPOF를 보완하기 위해 네임노드 이중화를 도입하였으며, 액티브(Active) / 스탠바이(Standby)로 동작한다. 스탠바이 네임노드는 액티브네임노드로 부터 블록 리포트와 하트비트롤 모두 받아서 메타데이터를 유지하고 공유 스토리지를 이용하여 에디트 파일을 공유한다. 액티브 네임노드가 문제가 발생하면 스탠바이 네임노드가 액티브로 동작하게 되는데, 장애를 감지하기 위해 주피커를 이용하며 장애 발생..