SlideShare une entreprise Scribd logo
1  sur  14
Télécharger pour lire hors ligne
ZOOKEEPER
발표자 : 이준광
목차
1. 주키퍼란?
2. 주키퍼의 기본구조
3. 주키퍼 설치
4. 주키퍼 znode에 데이터 넣기
5. 주키퍼 활용법 및 분산 락 구현
1. 주키퍼란?
1.1 주키퍼의 역할
-최근 나온 오픈소스들 무리의 네이밍이 동물이름을 채택하고 있는 아파치.. 대표적인 하둡,콤캣,카
멜,하이브,피그등 동물이름을 붙여진 동물들의 분산처리를 관리하는 역할을 하기위해 고안했다.(주키
퍼는 별도의 장비로 설치해도 되지만 Hadoop의 Datanode/Namenode에 설치해도 무방하다)
1.2 주키퍼의 사용 이유
- 분산처리 환경에서는 기본적으로 서버가 몇 대에서 수십대, 수백 대까지도 갈 수 있다.
분산 처리 환경에서는 예상치 못하는 예외적인 부분이 많이 발생하게 되는데 주로 네트워크
장애, 일부 서비스/기능 예상치 못한 처리로 중지나 장애, 서비스 업그레이드, 서
버 확장 등에 문제가 발생 할 수 있다.
쉽게 이해가 안되는경우 프로그램적으로 생각 해도 된다. 예로 싱글 쓰레드만 존재하는 프로그램에
서 멀티 쓰레드 프로그램을 하게 될 경우 싱글 쓰레드에서 이상없던 동기성 문제등이 나타나기 시작
합니다. 분산처리도 마찬가지이다. 하나만 처리하던 싱글 서버에서는 문제가 되지 않으나 멀티서버를
관리르 해야 한다면 여러 문제점들이 발생 할 수 있다.
따라서 이러한 점들을 쉽게 해결 할 수 있는 시스템이 바로 주키퍼 이다.
1.주키퍼란?(특징)
1.3 주키퍼의 특징
- 네임서비스를 통한 부하분산
하나의 클라이언트(하나의 서버)만 서비스를 수행하지 않고 알맞게 분산하여 각각의 클라이언트들
이 동시 작업할 수 있도록 지원
- 분산락이나 동화 문제 해결
하나의 서버에서 처리된 결과가 또 다른 서버들과 동기화하여 데이터 안정성 보장
- 장애상황 판단 및 복구
액티브(일반서버)서버가 예기치 못한 상황으로 문제가 발생하여 서비스를 지속적으로 처리를 못 할
경우 스텐바이(일반서버)서버가 액티브 서버로 바뀌어서 기존에 액티브 서버가 바뀌어서 기존에 액티
브 서버가 서비스를 하던 일을 처리하게 된다.
- 환경설정 관리
각각의 다른 서버들을 통합적으로 관리하여 환경설정을 따로 분산하지 않고 주키퍼 자체적으로 관
리하게 된다.
2. 주키퍼 기본 구조
주키퍼는 다중의 서버의 집합을 묶어서 관리해 주는 시스템입니다. 그 중에서 리더가 되는 서버 하나
가 존재 합니다.
리더라고 불리는 서버는 모든 서버에 중심이 되는 곳입니다.
또한 하나의 서버에서 처리가 되어 데이터가 변경되면 모든 서버에 동기화를 하게 됩니다.
주키퍼는 하나의 분산처리 서버 입니다.
2.2 주키퍼 기본 구조
액티브 서버 : 현재 서비스를 하고있는 서버
스탠바이 서버 : 장애 발생시 대처하기 위한 대기 서버
동작중이던 액티브 서버가 장애가 발생 할 경우 관리시스템이 판단하여 기존의 스탠바이 서버를 액티
브 서버로 전환하여 서비스를 처리하는 모습입니다.
2.3 주키퍼 기본 구조
/app1 : 하나의 폴더로 생각
/app1/p_1 : 하나의 노드로 데이터가 저장되는 znode
계층적인 네임스페이스이며 각각의 노드들은 z노드 (znode)라고 합니다. znode는 다음과 같은 특징이
있다
- 모든 노드에 저장 할 수 있다.(부모)
- 크기가 작은 데이터로 저장된다.
- znode는 저장되는 순간부터 버전을 가지고 있다.
- 접근 권한이 있다.
2.4 주키퍼 기본 구조
- 주키퍼는 매우 빠른속도로 동작 됩니다. 하지만 서버수가 증가함에 따라서 성능은 저하되는 것을 볼
수 있다.
- 주키퍼의 서버가 이상 발생시 SPOF문제를 제대로 처리 하는지 나타내는 그래프 이다. 위의 그래프
에서 이상하게 처리 능력이 하라 하는 부분이 있는데 바로 저 부분이 문제가 발생되어 주키퍼가 복구
하여 지속적인 서비스를 하게 되는 부분이다.
3. 주키퍼 설치
1. 다운로드
- wget http://mirror.apache-kr.org/zookeeper/stable/zookeeper-3.4.5.tar.gz
tar zxvf zookeeper-3.4.5.tar.gz
2. 환경설정
- cd zookeeper-3.4.5
- cp conf/zoo_sample.cfg conf/zoo.cfg
- vi zoo.cfg
3. Standalone모드
- tickTime = 2000
- dataDir =/zookeeper
- clientPort=2181
4.Replicated모드
- standalone모드와 윗부분은 동일
- initLimit = 5
- syncLimit = 2
- server.1 = 192.168.0.1.2888:3888
- server.2 = 192.168.0.2.2888:3888 …...
4. 주키퍼 znode에 데이터 넣기
1. /zk_test node를 생성하고 test_data이름
을 가지게 된다.
- create /zk_test test_data
2. ls로 zk_test목록에 추가된 것을 확인
합니다.
3. get 으로 zk_test를 확인 한다.
- get /zk_test
4. 테스트로 만든 /zk_test를 삭제한다.
- delete /zk_test
5. 주키퍼 활용 및 분산락 구현
* 주키퍼는 서버를 등록하고 znode를 활용하여 등록 삭제 등 하게 되는데 그게 전부 이다.
* 주키퍼를 사용하는 이유는 락 기능, 서버 분산 기능을 직접적으로 지원을 안 한다. 그냥 그런 기능을
구현 할 수 있도록 일부 기능들을 제공 해주고 그 기능을 사용하여 우리가 직접 분산 락, 서버 구현을
해야 한다.
5.1 분산락 구현 법
- 분산 락을 구현하는 순서를 lock이라는 부모 노드에서 하나씩 만들어가면서 추가되는 방식을 예로
보겠다.
5. 주키퍼 활용 및 분산락 구현
5.2 분산락 작동 순서
5. 주키퍼 활용 및 분산락 구현
5.3 결과
- 주키퍼는 락을 직접적으로 지원을 해주지 않는다. 바로 node와 watcher기능 이용 하여 분산락을
직접 구현을 해야한다.
감사합니당~

Contenu connexe

Tendances

3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arcNAVER D2
 
Zinst 패키지 기반의-리눅스_중앙관리시스템_20140415
Zinst 패키지 기반의-리눅스_중앙관리시스템_20140415Zinst 패키지 기반의-리눅스_중앙관리시스템_20140415
Zinst 패키지 기반의-리눅스_중앙관리시스템_20140415sprdd
 
[234]멀티테넌트 하둡 클러스터 운영 경험기
[234]멀티테넌트 하둡 클러스터 운영 경험기[234]멀티테넌트 하둡 클러스터 운영 경험기
[234]멀티테넌트 하둡 클러스터 운영 경험기NAVER D2
 
AWS 환경에서 MySQL Infra 설계하기-2부.본론
AWS 환경에서 MySQL Infra 설계하기-2부.본론AWS 환경에서 MySQL Infra 설계하기-2부.본론
AWS 환경에서 MySQL Infra 설계하기-2부.본론I Goo Lee
 
MySQL_Fabric_운영시유의사항
MySQL_Fabric_운영시유의사항MySQL_Fabric_운영시유의사항
MySQL_Fabric_운영시유의사항I Goo Lee
 
[135] 오픈소스 데이터베이스, 은행 서비스에 첫발을 내밀다.
[135] 오픈소스 데이터베이스, 은행 서비스에 첫발을 내밀다.[135] 오픈소스 데이터베이스, 은행 서비스에 첫발을 내밀다.
[135] 오픈소스 데이터베이스, 은행 서비스에 첫발을 내밀다.NAVER D2
 
MySQL Deep dive with FusionIO
MySQL Deep dive with FusionIOMySQL Deep dive with FusionIO
MySQL Deep dive with FusionIOI Goo Lee
 
150625 마이크로커널 운영체제 김지은
150625 마이크로커널 운영체제 김지은150625 마이크로커널 운영체제 김지은
150625 마이크로커널 운영체제 김지은jieun kim
 
Tungsten 을활용한 MySQL / Hadoop 동기화
Tungsten 을활용한 MySQL / Hadoop 동기화Tungsten 을활용한 MySQL / Hadoop 동기화
Tungsten 을활용한 MySQL / Hadoop 동기화I Goo Lee
 
실무로 배우는 시스템 성능 최적화 Ch8
실무로 배우는 시스템 성능 최적화 Ch8실무로 배우는 시스템 성능 최적화 Ch8
실무로 배우는 시스템 성능 최적화 Ch8HyeonSeok Choi
 
검색로그시스템 with Python
검색로그시스템 with Python검색로그시스템 with Python
검색로그시스템 with Pythonitproman35
 
[오픈소스컨설팅]MySQL Monitoring
[오픈소스컨설팅]MySQL Monitoring[오픈소스컨설팅]MySQL Monitoring
[오픈소스컨설팅]MySQL MonitoringJi-Woong Choi
 
[112]clova platform 인공지능을 엮는 기술
[112]clova platform 인공지능을 엮는 기술[112]clova platform 인공지능을 엮는 기술
[112]clova platform 인공지능을 엮는 기술NAVER D2
 
서버인프라 구축 입문 basis of composing server and infra
서버인프라 구축 입문 basis of composing server and infra서버인프라 구축 입문 basis of composing server and infra
서버인프라 구축 입문 basis of composing server and infraHwanseok Park
 
Intro KaKao ADT (Almighty Data Transmitter)
Intro KaKao ADT (Almighty Data Transmitter)Intro KaKao ADT (Almighty Data Transmitter)
Intro KaKao ADT (Almighty Data Transmitter)I Goo Lee
 
[오픈소스컨설팅] SELinux : Stop Disabling SELinux
[오픈소스컨설팅] SELinux : Stop Disabling SELinux[오픈소스컨설팅] SELinux : Stop Disabling SELinux
[오픈소스컨설팅] SELinux : Stop Disabling SELinuxOpen Source Consulting
 
MySQL/MariaDB Proxy Software Test
MySQL/MariaDB Proxy Software TestMySQL/MariaDB Proxy Software Test
MySQL/MariaDB Proxy Software TestI Goo Lee
 
Apache kafka intro_20150313_springloops
Apache kafka intro_20150313_springloopsApache kafka intro_20150313_springloops
Apache kafka intro_20150313_springloopsSungMin OH
 
[오픈소스컨설팅]Day #1 MySQL 엔진소개, 튜닝, 백업 및 복구, 업그레이드방법
[오픈소스컨설팅]Day #1 MySQL 엔진소개, 튜닝, 백업 및 복구, 업그레이드방법[오픈소스컨설팅]Day #1 MySQL 엔진소개, 튜닝, 백업 및 복구, 업그레이드방법
[오픈소스컨설팅]Day #1 MySQL 엔진소개, 튜닝, 백업 및 복구, 업그레이드방법Ji-Woong Choi
 
[244]네트워크 모니터링 시스템(nms)을 지탱하는 기술
[244]네트워크 모니터링 시스템(nms)을 지탱하는 기술[244]네트워크 모니터링 시스템(nms)을 지탱하는 기술
[244]네트워크 모니터링 시스템(nms)을 지탱하는 기술NAVER D2
 

Tendances (20)

3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc
3.[d2 오픈세미나]분산시스템 개발 및 교훈 n base arc
 
Zinst 패키지 기반의-리눅스_중앙관리시스템_20140415
Zinst 패키지 기반의-리눅스_중앙관리시스템_20140415Zinst 패키지 기반의-리눅스_중앙관리시스템_20140415
Zinst 패키지 기반의-리눅스_중앙관리시스템_20140415
 
[234]멀티테넌트 하둡 클러스터 운영 경험기
[234]멀티테넌트 하둡 클러스터 운영 경험기[234]멀티테넌트 하둡 클러스터 운영 경험기
[234]멀티테넌트 하둡 클러스터 운영 경험기
 
AWS 환경에서 MySQL Infra 설계하기-2부.본론
AWS 환경에서 MySQL Infra 설계하기-2부.본론AWS 환경에서 MySQL Infra 설계하기-2부.본론
AWS 환경에서 MySQL Infra 설계하기-2부.본론
 
MySQL_Fabric_운영시유의사항
MySQL_Fabric_운영시유의사항MySQL_Fabric_운영시유의사항
MySQL_Fabric_운영시유의사항
 
[135] 오픈소스 데이터베이스, 은행 서비스에 첫발을 내밀다.
[135] 오픈소스 데이터베이스, 은행 서비스에 첫발을 내밀다.[135] 오픈소스 데이터베이스, 은행 서비스에 첫발을 내밀다.
[135] 오픈소스 데이터베이스, 은행 서비스에 첫발을 내밀다.
 
MySQL Deep dive with FusionIO
MySQL Deep dive with FusionIOMySQL Deep dive with FusionIO
MySQL Deep dive with FusionIO
 
150625 마이크로커널 운영체제 김지은
150625 마이크로커널 운영체제 김지은150625 마이크로커널 운영체제 김지은
150625 마이크로커널 운영체제 김지은
 
Tungsten 을활용한 MySQL / Hadoop 동기화
Tungsten 을활용한 MySQL / Hadoop 동기화Tungsten 을활용한 MySQL / Hadoop 동기화
Tungsten 을활용한 MySQL / Hadoop 동기화
 
실무로 배우는 시스템 성능 최적화 Ch8
실무로 배우는 시스템 성능 최적화 Ch8실무로 배우는 시스템 성능 최적화 Ch8
실무로 배우는 시스템 성능 최적화 Ch8
 
검색로그시스템 with Python
검색로그시스템 with Python검색로그시스템 with Python
검색로그시스템 with Python
 
[오픈소스컨설팅]MySQL Monitoring
[오픈소스컨설팅]MySQL Monitoring[오픈소스컨설팅]MySQL Monitoring
[오픈소스컨설팅]MySQL Monitoring
 
[112]clova platform 인공지능을 엮는 기술
[112]clova platform 인공지능을 엮는 기술[112]clova platform 인공지능을 엮는 기술
[112]clova platform 인공지능을 엮는 기술
 
서버인프라 구축 입문 basis of composing server and infra
서버인프라 구축 입문 basis of composing server and infra서버인프라 구축 입문 basis of composing server and infra
서버인프라 구축 입문 basis of composing server and infra
 
Intro KaKao ADT (Almighty Data Transmitter)
Intro KaKao ADT (Almighty Data Transmitter)Intro KaKao ADT (Almighty Data Transmitter)
Intro KaKao ADT (Almighty Data Transmitter)
 
[오픈소스컨설팅] SELinux : Stop Disabling SELinux
[오픈소스컨설팅] SELinux : Stop Disabling SELinux[오픈소스컨설팅] SELinux : Stop Disabling SELinux
[오픈소스컨설팅] SELinux : Stop Disabling SELinux
 
MySQL/MariaDB Proxy Software Test
MySQL/MariaDB Proxy Software TestMySQL/MariaDB Proxy Software Test
MySQL/MariaDB Proxy Software Test
 
Apache kafka intro_20150313_springloops
Apache kafka intro_20150313_springloopsApache kafka intro_20150313_springloops
Apache kafka intro_20150313_springloops
 
[오픈소스컨설팅]Day #1 MySQL 엔진소개, 튜닝, 백업 및 복구, 업그레이드방법
[오픈소스컨설팅]Day #1 MySQL 엔진소개, 튜닝, 백업 및 복구, 업그레이드방법[오픈소스컨설팅]Day #1 MySQL 엔진소개, 튜닝, 백업 및 복구, 업그레이드방법
[오픈소스컨설팅]Day #1 MySQL 엔진소개, 튜닝, 백업 및 복구, 업그레이드방법
 
[244]네트워크 모니터링 시스템(nms)을 지탱하는 기술
[244]네트워크 모니터링 시스템(nms)을 지탱하는 기술[244]네트워크 모니터링 시스템(nms)을 지탱하는 기술
[244]네트워크 모니터링 시스템(nms)을 지탱하는 기술
 

Similaire à 주키퍼

[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱NAVER D2
 
제2회 난공불락 오픈소스 인프라 세미나 zinst 관리툴 소개
제2회 난공불락 오픈소스 인프라 세미나 zinst 관리툴 소개제2회 난공불락 오픈소스 인프라 세미나 zinst 관리툴 소개
제2회 난공불락 오픈소스 인프라 세미나 zinst 관리툴 소개Tommy Lee
 
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기흥래 김
 
How to build a web server on Linux.
How to build a web server on Linux.How to build a web server on Linux.
How to build a web server on Linux.은석 김은석
 
하둡 고가용성(HA) 설정
하둡 고가용성(HA) 설정하둡 고가용성(HA) 설정
하둡 고가용성(HA) 설정NoahKIM36
 
로그 수집, 집약
로그 수집, 집약로그 수집, 집약
로그 수집, 집약kidoki
 
시스템 최신기술 Part1
시스템 최신기술 Part1시스템 최신기술 Part1
시스템 최신기술 Part1SeongWoo Park
 
2014.4.30 프라이머 개발자 모임 - 서버 장애 예방 및 대응 방법 공유
2014.4.30 프라이머 개발자 모임 - 서버 장애 예방 및 대응 방법 공유2014.4.30 프라이머 개발자 모임 - 서버 장애 예방 및 대응 방법 공유
2014.4.30 프라이머 개발자 모임 - 서버 장애 예방 및 대응 방법 공유Kyoungchan Lee
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드KwangSeob Jeong
 
Linux Performan tuning Part I
Linux Performan tuning Part ILinux Performan tuning Part I
Linux Performan tuning Part Isprdd
 
자동화된 인프라구축 - 2009년 자료
자동화된 인프라구축 - 2009년 자료자동화된 인프라구축 - 2009년 자료
자동화된 인프라구축 - 2009년 자료태준 문
 
Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호용호 최
 
Gpdb best practices v a01 20150313
Gpdb best practices v a01 20150313Gpdb best practices v a01 20150313
Gpdb best practices v a01 20150313Sanghee Lee
 
Keepalived, haproxy
Keepalived, haproxyKeepalived, haproxy
Keepalived, haproxy진혁 박
 
[1A7]Ansible의이해와활용
[1A7]Ansible의이해와활용[1A7]Ansible의이해와활용
[1A7]Ansible의이해와활용NAVER D2
 
Osc4.x installation v1-upload
Osc4.x installation v1-uploadOsc4.x installation v1-upload
Osc4.x installation v1-uploadDong-Hwa jung
 
리눅스서버세팅-김태호
리눅스서버세팅-김태호리눅스서버세팅-김태호
리눅스서버세팅-김태호ETRIBE_STG
 
[2010 네이트 앱스토어 개발자 세미나] 앱스 제작 사례 (2) 소셜게임 서버 구성 전략
[2010 네이트 앱스토어 개발자 세미나] 앱스 제작 사례 (2) 소셜게임 서버 구성 전략[2010 네이트 앱스토어 개발자 세미나] 앱스 제작 사례 (2) 소셜게임 서버 구성 전략
[2010 네이트 앱스토어 개발자 세미나] 앱스 제작 사례 (2) 소셜게임 서버 구성 전략Cyworld AppStore (SK Communications)
 

Similaire à 주키퍼 (20)

[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱
 
제2회 난공불락 오픈소스 인프라 세미나 zinst 관리툴 소개
제2회 난공불락 오픈소스 인프라 세미나 zinst 관리툴 소개제2회 난공불락 오픈소스 인프라 세미나 zinst 관리툴 소개
제2회 난공불락 오픈소스 인프라 세미나 zinst 관리툴 소개
 
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
엘라스틱서치 클러스터로 수십억 건의 데이터 운영하기
 
How to build a web server on Linux.
How to build a web server on Linux.How to build a web server on Linux.
How to build a web server on Linux.
 
하둡 고가용성(HA) 설정
하둡 고가용성(HA) 설정하둡 고가용성(HA) 설정
하둡 고가용성(HA) 설정
 
로그 수집, 집약
로그 수집, 집약로그 수집, 집약
로그 수집, 집약
 
시스템 최신기술 Part1
시스템 최신기술 Part1시스템 최신기술 Part1
시스템 최신기술 Part1
 
2014.4.30 프라이머 개발자 모임 - 서버 장애 예방 및 대응 방법 공유
2014.4.30 프라이머 개발자 모임 - 서버 장애 예방 및 대응 방법 공유2014.4.30 프라이머 개발자 모임 - 서버 장애 예방 및 대응 방법 공유
2014.4.30 프라이머 개발자 모임 - 서버 장애 예방 및 대응 방법 공유
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드
 
Linux Performan tuning Part I
Linux Performan tuning Part ILinux Performan tuning Part I
Linux Performan tuning Part I
 
자동화된 인프라구축 - 2009년 자료
자동화된 인프라구축 - 2009년 자료자동화된 인프라구축 - 2009년 자료
자동화된 인프라구축 - 2009년 자료
 
Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호Docker & Kubernetes 기초 - 최용호
Docker & Kubernetes 기초 - 최용호
 
Gpdb best practices v a01 20150313
Gpdb best practices v a01 20150313Gpdb best practices v a01 20150313
Gpdb best practices v a01 20150313
 
Keepalived, haproxy
Keepalived, haproxyKeepalived, haproxy
Keepalived, haproxy
 
[1A7]Ansible의이해와활용
[1A7]Ansible의이해와활용[1A7]Ansible의이해와활용
[1A7]Ansible의이해와활용
 
Osc4.x installation v1-upload
Osc4.x installation v1-uploadOsc4.x installation v1-upload
Osc4.x installation v1-upload
 
리눅스서버세팅-김태호
리눅스서버세팅-김태호리눅스서버세팅-김태호
리눅스서버세팅-김태호
 
Kafka slideshare
Kafka   slideshareKafka   slideshare
Kafka slideshare
 
Node.js 기본
Node.js 기본Node.js 기본
Node.js 기본
 
[2010 네이트 앱스토어 개발자 세미나] 앱스 제작 사례 (2) 소셜게임 서버 구성 전략
[2010 네이트 앱스토어 개발자 세미나] 앱스 제작 사례 (2) 소셜게임 서버 구성 전략[2010 네이트 앱스토어 개발자 세미나] 앱스 제작 사례 (2) 소셜게임 서버 구성 전략
[2010 네이트 앱스토어 개발자 세미나] 앱스 제작 사례 (2) 소셜게임 서버 구성 전략
 

주키퍼

  • 2. 목차 1. 주키퍼란? 2. 주키퍼의 기본구조 3. 주키퍼 설치 4. 주키퍼 znode에 데이터 넣기 5. 주키퍼 활용법 및 분산 락 구현
  • 3. 1. 주키퍼란? 1.1 주키퍼의 역할 -최근 나온 오픈소스들 무리의 네이밍이 동물이름을 채택하고 있는 아파치.. 대표적인 하둡,콤캣,카 멜,하이브,피그등 동물이름을 붙여진 동물들의 분산처리를 관리하는 역할을 하기위해 고안했다.(주키 퍼는 별도의 장비로 설치해도 되지만 Hadoop의 Datanode/Namenode에 설치해도 무방하다) 1.2 주키퍼의 사용 이유 - 분산처리 환경에서는 기본적으로 서버가 몇 대에서 수십대, 수백 대까지도 갈 수 있다. 분산 처리 환경에서는 예상치 못하는 예외적인 부분이 많이 발생하게 되는데 주로 네트워크 장애, 일부 서비스/기능 예상치 못한 처리로 중지나 장애, 서비스 업그레이드, 서 버 확장 등에 문제가 발생 할 수 있다. 쉽게 이해가 안되는경우 프로그램적으로 생각 해도 된다. 예로 싱글 쓰레드만 존재하는 프로그램에 서 멀티 쓰레드 프로그램을 하게 될 경우 싱글 쓰레드에서 이상없던 동기성 문제등이 나타나기 시작 합니다. 분산처리도 마찬가지이다. 하나만 처리하던 싱글 서버에서는 문제가 되지 않으나 멀티서버를 관리르 해야 한다면 여러 문제점들이 발생 할 수 있다. 따라서 이러한 점들을 쉽게 해결 할 수 있는 시스템이 바로 주키퍼 이다.
  • 4. 1.주키퍼란?(특징) 1.3 주키퍼의 특징 - 네임서비스를 통한 부하분산 하나의 클라이언트(하나의 서버)만 서비스를 수행하지 않고 알맞게 분산하여 각각의 클라이언트들 이 동시 작업할 수 있도록 지원 - 분산락이나 동화 문제 해결 하나의 서버에서 처리된 결과가 또 다른 서버들과 동기화하여 데이터 안정성 보장 - 장애상황 판단 및 복구 액티브(일반서버)서버가 예기치 못한 상황으로 문제가 발생하여 서비스를 지속적으로 처리를 못 할 경우 스텐바이(일반서버)서버가 액티브 서버로 바뀌어서 기존에 액티브 서버가 바뀌어서 기존에 액티 브 서버가 서비스를 하던 일을 처리하게 된다. - 환경설정 관리 각각의 다른 서버들을 통합적으로 관리하여 환경설정을 따로 분산하지 않고 주키퍼 자체적으로 관 리하게 된다.
  • 5. 2. 주키퍼 기본 구조 주키퍼는 다중의 서버의 집합을 묶어서 관리해 주는 시스템입니다. 그 중에서 리더가 되는 서버 하나 가 존재 합니다. 리더라고 불리는 서버는 모든 서버에 중심이 되는 곳입니다. 또한 하나의 서버에서 처리가 되어 데이터가 변경되면 모든 서버에 동기화를 하게 됩니다. 주키퍼는 하나의 분산처리 서버 입니다.
  • 6. 2.2 주키퍼 기본 구조 액티브 서버 : 현재 서비스를 하고있는 서버 스탠바이 서버 : 장애 발생시 대처하기 위한 대기 서버 동작중이던 액티브 서버가 장애가 발생 할 경우 관리시스템이 판단하여 기존의 스탠바이 서버를 액티 브 서버로 전환하여 서비스를 처리하는 모습입니다.
  • 7. 2.3 주키퍼 기본 구조 /app1 : 하나의 폴더로 생각 /app1/p_1 : 하나의 노드로 데이터가 저장되는 znode 계층적인 네임스페이스이며 각각의 노드들은 z노드 (znode)라고 합니다. znode는 다음과 같은 특징이 있다 - 모든 노드에 저장 할 수 있다.(부모) - 크기가 작은 데이터로 저장된다. - znode는 저장되는 순간부터 버전을 가지고 있다. - 접근 권한이 있다.
  • 8. 2.4 주키퍼 기본 구조 - 주키퍼는 매우 빠른속도로 동작 됩니다. 하지만 서버수가 증가함에 따라서 성능은 저하되는 것을 볼 수 있다. - 주키퍼의 서버가 이상 발생시 SPOF문제를 제대로 처리 하는지 나타내는 그래프 이다. 위의 그래프 에서 이상하게 처리 능력이 하라 하는 부분이 있는데 바로 저 부분이 문제가 발생되어 주키퍼가 복구 하여 지속적인 서비스를 하게 되는 부분이다.
  • 9. 3. 주키퍼 설치 1. 다운로드 - wget http://mirror.apache-kr.org/zookeeper/stable/zookeeper-3.4.5.tar.gz tar zxvf zookeeper-3.4.5.tar.gz 2. 환경설정 - cd zookeeper-3.4.5 - cp conf/zoo_sample.cfg conf/zoo.cfg - vi zoo.cfg 3. Standalone모드 - tickTime = 2000 - dataDir =/zookeeper - clientPort=2181 4.Replicated모드 - standalone모드와 윗부분은 동일 - initLimit = 5 - syncLimit = 2 - server.1 = 192.168.0.1.2888:3888 - server.2 = 192.168.0.2.2888:3888 …...
  • 10. 4. 주키퍼 znode에 데이터 넣기 1. /zk_test node를 생성하고 test_data이름 을 가지게 된다. - create /zk_test test_data 2. ls로 zk_test목록에 추가된 것을 확인 합니다. 3. get 으로 zk_test를 확인 한다. - get /zk_test 4. 테스트로 만든 /zk_test를 삭제한다. - delete /zk_test
  • 11. 5. 주키퍼 활용 및 분산락 구현 * 주키퍼는 서버를 등록하고 znode를 활용하여 등록 삭제 등 하게 되는데 그게 전부 이다. * 주키퍼를 사용하는 이유는 락 기능, 서버 분산 기능을 직접적으로 지원을 안 한다. 그냥 그런 기능을 구현 할 수 있도록 일부 기능들을 제공 해주고 그 기능을 사용하여 우리가 직접 분산 락, 서버 구현을 해야 한다. 5.1 분산락 구현 법 - 분산 락을 구현하는 순서를 lock이라는 부모 노드에서 하나씩 만들어가면서 추가되는 방식을 예로 보겠다.
  • 12. 5. 주키퍼 활용 및 분산락 구현 5.2 분산락 작동 순서
  • 13. 5. 주키퍼 활용 및 분산락 구현 5.3 결과 - 주키퍼는 락을 직접적으로 지원을 해주지 않는다. 바로 node와 watcher기능 이용 하여 분산락을 직접 구현을 해야한다.