레이블이 ZooKeeper인 게시물을 표시합니다. 모든 게시물 표시
레이블이 ZooKeeper인 게시물을 표시합니다. 모든 게시물 표시

Zookeeper 사용하기

# Zookeeper 에 대해서... by ysoftman
# 분산환경의 정점에서 환경 전체를 관리하는 역활, Hadoop 의 서브 프로젝트로 시작, 야후의 분산 코디네이터로 사용
# 참고로 Apache 분산처리 프로젝트는 동물이름이 많음, Hadoop(코끼리), Pig(돼지), Chukwa(거북이)...Zookeeper(동물사육사)라는 이름에서도 알듯이 여러 분산처리 시스템을 관리해주는 것을 뜻함
# 부하 분산 : 하나의 서버만 처리하지 않고, 여러 서버에 분산하여 동시에 작업하도록 지원
# 분산락 해결 : 하나의 서버에서 처리된 결과가 또다른 서버들과 동기화하여 데이터 안정성 보장
# 장애 판단 및 복구 : 실서버(액티브 서버)에 장애가 발생하면 대기중인 서버(스탠바이 서버)가 실서버로 바뀌어서 일 처리
# 환경설정 관리 : 각각의 다른 서버들의 환경 설정을 주키퍼 하나로 관리
# 일반적으로 주키퍼에 저장하는 데이터는 일반 파일이 아닌 시스템 관리, 모니터링, 락등의 필요한 메타 정보만 저장
# 다중의 서버 집합을 묶어서 관리하는 시스템으로, 여러 서버중 리더가 되는 서버 하나가 존재하며, 모든 서버의 중심이 됨
# 하나의 서버에서 데이터가 변경되면 모든 서버에 전달되어 동기화 됨
# SPOF(Single Point Of Failure) 처리 : 한개의 서버에서 장애가 발생되면 처리한다는 뜻
# 예) 서비스 중인 액티브 서버에 장애가 발생되면 장동으로 스탠바이 서버를 액티브 서버로 전환하여 서비스 처리
# 데이터 모델
# 파일 시스템의 폴더와 파일 구조르와 비슷한 트리 구조로 데이터 저장
# 예) /app1 : 폴더 , /app1/p1 : 데이터가 저장되는 노드로 znode 라고 함
# znode 의 데이터는 메모리에 저장되며, 주키퍼의 힙 메모리 크기 만틈 저장 가능
# 메모리에 저장해서 속도가 빠르지만 데이터 영속성을 위해 트랜젝션 로그와 스냅샷 파일은 로컬 디스크에 저장하여 주키퍼가 재시작하더라도 데이터 유지

# 성능
# 주키퍼는 매우 빠른 속도로 동작
# 하지만 서버 수가 늘어나면 성능 저하

# 설치
# jdk 설치 후 java path 등의 기본적인 설정
# 주키퍼 다운로드 http://apache.tt.co.kr/hadoop/zookeeper/zookeeper-3.3.2/zookeeper-3.3.2.tar.gz

# 예제
# 다운 후 압축 풀고 주키퍼의 설정 폴더(./Zookeeper-3.3.2/conf 로 이동하여 zoo_sample.cfg 을 복사해서 zoo.cfg 파일 생성
zookeeper-3.3.2/conf/cp zoo_sample.cfg zoo.cfg

# zoo.cfg 아래와 같이 되어있음
zookeeper-3.3.2/conf/vi zoo.cfg

# 주키퍼가 사용하는 세션 타임 아웃
tickTime=2000
initLimit=10

# 스냅샷, 로그가 저장될 로컬 디스크 경로
dataDir=/home/ysoftman/data

# 주키퍼가 사용할 포트
clientPort=2181

# 머신이 3대가 있다면 각 머신에 주키퍼를 설치하고 다음과 같이 zoo.cfg 에 다음과 같이 추가
# server.서버아이디=서버IP:일반통신포트:리더선출용포트
# 과반수 선택을 위해 최소 3개 이상의 서버를 설정해야 한다.
server.1=10.10.10.123:2222:3333
server.2=10.10.10.124:2222:3333
server.3=10.10.10.125:2222:3333

# 각 머신마다 dataDIr 에 myid 파일을 작성하고 서버아디를 기록해둔다
# 머신1
cat > /home/ysoftman/data/myid
1

# 머신2
cat > /home/ysoftman/data/myid
2

# 머신3
cat > /home/ysoftman/data/myid
3

# 참고로 머신이 1대 밖에 없다면 주키퍼 서버(인스턴스)를 3개를 띄우자.
# zookeeper1 ~ 3 개의 디렉토리로 압축풀고 각각 zook.cfg 생성한다.
# 각각의 zook.cfg 의 clientPort, dataDir 를 별개로 정하고 각 dataDir 에 myid 를 설정한다.

# 주키퍼 시작
zookeeper-3.3.2/bin/zkServer.sh start (루트권한으로)

# 클라이언트로 접속
zookeeper-3.3.2/bin/zkCli.sh

# help 명령으로 다양한 설명을 볼 수 있다.
[zk: localhost:2181(CONNECTED) 0]help

# 주키퍼 서버 정보 파악해 보기
[zk: localhost:2181(CONNECTED) 1]get /zookeeper

# 주키퍼 루트 디렉토리 확인
[zk: localhost:2181(CONNECTED) 2]ls /

# 주키퍼 ysoftman_data 노드를 생성하고 ysoftman_data 데이터 주기
# 생성하면 나머지 서버들로 싱크된다.
[zk: localhost:2181(CONNECTED) 3]create /zk_ysoftman_node ysoftman_data

# 생성된 노드안의 데이터와 데이터 및 세부 정보 확인하기
[zk: localhost:2181(CONNECTED) 4]get /zk_ysoftman_node

# 생성한 노드 삭제하기
# 삭제하면 나머지 서버들로 싱크된다.
[zk: localhost:2181(CONNECTED) 5]delete /zk_ysoftman_node

# 주키퍼 끝내기
[zk: localhost:2181(CONNECTED) 6]quit

# 위 예제에서 설명한 기능(서버를 등록하고 znode 활용하여 등록/삭게)이 전부
# 락, 서버분산 기능 직접적으로 지원 안함, 그런 기능을 구현하도록 일부 기능 제공받아 개발자가 락, 서버 구현