SlideShare une entreprise Scribd logo
1  sur  27
9장 복제 MongoDB 전효성 http://cafe.naver.com/architect1 1
Single server durability Single server durability 지원이 취약한 이유 일부러 하지 않는 않았다. 이유는? 기존의 DBMS도 single server durability를 보장 못하는 경우가 많다. 물리적 파괴와 같은 상황에서 복구가 힘들다. 그래서? Multi-server durability를 사용하시라. 2
복제의 용도 데이터 일관성 읽기 분산 운영 중 백업 오프라인 일괄 작업용 데이터 소스 3
마스터-슬레이브 복제 Master 노드 생성 Slave 노드 생성 # mongod --dbpath~/dbs/master --port 10000 --master # mongod --dbpath~/dbs/slave --port 10001 --slave --source localhost:10000 Slave 0 단방향 복사 master … MAX 12대 권장 Slave N oplog 4
마스터 슬레이브 복제 옵션 5
Shell에서 사용하기 Master 노드 띄우기 Slave 노드 띄우기 Shell로 slave에 접속 6
레플리카 셋 복제를 하는 또 하나의 방법 자동 장애 넘김 클러스터의 마스터가 유동적 장애로 마스터가 죽으면 다른 슬레이브가 알아서 마스터로 변신 제약사항( ver 1.6+ ) 최대 12대의 노드 구성 최대 7대의 노드가 투표 가능 7
레플리카 셋 초기화( ver 1.8+ ) ,[object Object],$ mongod --replSetsetname--rest ,[object Object],> rs.initiate() > rs.initiate( <config-object> ) > db.runCommand( { replSetInitiate : <config-object> } ) ,[object Object],> cfg= {  ... _id : "acme_a",  ... members :  	[ ... { _id : 0, host : "sf1.acme.com" },  	  ... { _id : 1, host : "sf2.acme.com" },  	  ... { _id : 2, host : "sf3.acme.com" } ] }  > rs.initiate(cfg) > rs.status() > rs.add("sf2.acme.com");  > rs.add("sf3.acme.com");  > rs.status();  http://www.mongodb.org/display/DOCS/Replica+Set+Configuration 8
장애처리 매커니즘 Node type 표준 노드(Standard) 수동 노드(Passive) { …, “Priority” : 0, … } 절대 마스터가 될 수 없다 결정권자 노드(Arbiter) { …, “arbiterOnly” : true, … } 투표만 한다 9
장애 판단 및 복구 장애 판단 Heartbeat수 대비 voting수가 반 이하로 떨어지면 마스터를 보조 노드로 변경 투표를 통해 높은 득표의 노드가 마스터로 변신 재 동기화 수행 Voting 각 노드들이 투표하여 마스터 노드 결정 10
Vote: 가장 최근에 변경된 노드 Slave Master Vote:6 Slave Slave Slave Slave Slave 11
장애 발생 Slave Master Vote:2 Slave Slave Slave Slave Slave 12
마스터 노드 결정하기 가장최근에 동기화 Master Slave Vote:2 Slave Slave Slave Slave Slave 13
마스터 노드 결정하기 가장최근에 동기화 Master Vote:3 Slave Vote:2 Slave Slave Slave Slave Slave 14
재 동기화 가장최근에 동기화 Master Vote:3 Slave Vote:2 Slave Slave Master의 데이터로 재동기화 Slave Slave Slave 15
슬레이브에서 연산 수행하기 슬레이브 사용 용도 데이터 백업 오프라인 데이터 처리용 읽기 분산 16
읽기 분산 방법1. 생성시 slaveOkey옵션을 지정하여 query를 받을 수 있도록 변경 방법2. --master --slave 옵션을 동시에 적요하여 생성 쿼리를 받을 수 있고, 마스터로부터 계속 복제가 이루어진다. 처음 시작시 빈 db로 시작해야 함 17
작동 원리( Oplog ) 1: CUD command Master Slave 여유공간 5% 정도 2: Oplog에 기록 oplog 제한 컬렉션 멱등원 형태로 변환 $inc $set 18
작동 원리( 동기화 ) 초기 연결시: 완전 동기화 진행 Master Slave 용량을 넉넉히 잡아서 동기화 중 oplog공간이 부족하지 않게 해야 함 oplog 19
작동 원리( 동기화 ) 동기화 완료 이후… Master Slave [N초마다]복제 요청 oplog 20
작동 원리( 동기화 ) Master Slave 이전 요청 ~ 현재까지 oplog전달 oplog 21
복제 상태와 로컬 데이터베이스 local database Mongodb에서 사용하는 database Replica set에 대한 정보 Replica set 관련 collection local.system.replset : config정보 local.oplog.rs : oplog local.replset.minvalid : 내부용, 동기화정보를 추적하기 위한 정보 보관 Master/Slave replication 관련 collection Master node local.oplog.$main : oplog local.slaves Slave node local.sources Other local.me 22
노드 동기화 N개의 노드들이 쓰기 연산 복제 완료까지 대기 보통 N을 2 ~ 3으로 설정 ( 효율성 / 안정성 trade-off ) > db.runCommand( {getLastError: 1, w : N } ) 23
관리 진단 Oplog변경 > db.printReplicationInfo() configured oplog size:   944.1375732421875MB log length start to end: 1266secs (0.35hrs) oplog first event time:  Thu Aug 04 2011 23:47:12 GMT+0900 oplog last event time:   Fri Aug 05 2011 00:08:18 GMT+0900 now:                     Fri Aug 05 2011 23:44:46 GMT+0900 > db.printSlaveReplicationInfo() source: localhost:27017 syncedTo: Fri Aug 05 2011 23:46:11 GMT+0900 $ rm /data/db/local.* $ mongod --master --oplogSizesize //slave들을 --autosync로 재시작하거나 수동으로 재 동기화 필요함 24
관리 인증을 통한 복제 마스터 / 슬레이브의local db에 동일한 사용자와 비밀번호 추가 Slave 접속 시도 “repl”이라는 사용자로 접속시도 local.system.users의 제일 처음 이름을 사용 > use local Switched to db local > db.add.User( “repl”, password ); {“user” : “repl”,   “readOnly” : false,   “pwd” : “…” } 25
정리 복제를 하는 두가지 방법. Master-slave Replica set ( 편하다 ) Oplog사이즈를 적당히 크게 잡아주자. 재동기화 방지 Slave에 query를 날리려면? --master or --slaveOkey옵션으로 생성 26
끝 27

Contenu connexe

Tendances

MongoDB 모바일 게임 개발에 사용
MongoDB 모바일 게임 개발에 사용MongoDB 모바일 게임 개발에 사용
MongoDB 모바일 게임 개발에 사용흥배 최
 
Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범)
Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범) Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범)
Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범) InBum Kim
 
MongoDB in use(김인범, mongodb korea)
MongoDB in use(김인범, mongodb korea)MongoDB in use(김인범, mongodb korea)
MongoDB in use(김인범, mongodb korea)InBum Kim
 
Mongodb 개발 포인트
Mongodb 개발 포인트Mongodb 개발 포인트
Mongodb 개발 포인트흥배 최
 
mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교Woo Yeong Choi
 
Mongo db in use(naver)
Mongo db in use(naver)Mongo db in use(naver)
Mongo db in use(naver)InBum Kim
 
이것이 레디스다.
이것이 레디스다.이것이 레디스다.
이것이 레디스다.Kris Jeong
 
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'sung ki choi
 
Mongo db monitoring 어떤 것이 좋을까(mongodb korea, 김인범)
Mongo db monitoring 어떤 것이 좋을까(mongodb korea, 김인범)Mongo db monitoring 어떤 것이 좋을까(mongodb korea, 김인범)
Mongo db monitoring 어떤 것이 좋을까(mongodb korea, 김인범)InBum Kim
 
Mongo db로 배우는 nosql
Mongo db로 배우는 nosqlMongo db로 배우는 nosql
Mongo db로 배우는 nosqlSuwon Chae
 
실무로 배우는 시스템 성능 최적화 - 4부. 프로세스 이해하기
실무로 배우는 시스템 성능 최적화 - 4부. 프로세스 이해하기실무로 배우는 시스템 성능 최적화 - 4부. 프로세스 이해하기
실무로 배우는 시스템 성능 최적화 - 4부. 프로세스 이해하기Minchul Jung
 
실무로 배우는 시스템 성능 최적화 Ch8
실무로 배우는 시스템 성능 최적화 Ch8실무로 배우는 시스템 성능 최적화 Ch8
실무로 배우는 시스템 성능 최적화 Ch8HyeonSeok Choi
 
Apache ZooKeeper 로
 분산 서버 만들기
Apache ZooKeeper 로
 분산 서버 만들기Apache ZooKeeper 로
 분산 서버 만들기
Apache ZooKeeper 로
 분산 서버 만들기iFunFactory Inc.
 
7부. 애플리케이션 입장에서의 성능 튜닝 (1~8장)
7부. 애플리케이션 입장에서의 성능 튜닝 (1~8장)7부. 애플리케이션 입장에서의 성능 튜닝 (1~8장)
7부. 애플리케이션 입장에서의 성능 튜닝 (1~8장)Minchul Jung
 
A review of zookeeper 2010.12
A review of zookeeper 2010.12A review of zookeeper 2010.12
A review of zookeeper 2010.12HoJin Ha
 
[125]웹 성능 최적화에 필요한 브라우저의 모든 것
[125]웹 성능 최적화에 필요한 브라우저의 모든 것[125]웹 성능 최적화에 필요한 브라우저의 모든 것
[125]웹 성능 최적화에 필요한 브라우저의 모든 것NAVER D2
 
Redis basicandroadmap
Redis basicandroadmapRedis basicandroadmap
Redis basicandroadmapDaeMyung Kang
 
Ch9 프로세스의 메모리 구조
Ch9 프로세스의 메모리 구조Ch9 프로세스의 메모리 구조
Ch9 프로세스의 메모리 구조Minchul Jung
 

Tendances (20)

MongoDB 모바일 게임 개발에 사용
MongoDB 모바일 게임 개발에 사용MongoDB 모바일 게임 개발에 사용
MongoDB 모바일 게임 개발에 사용
 
Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범)
Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범) Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범)
Using R with MongoDB(R User Conference Korea 2015, SK C&C 김인범)
 
MongoDB in use(김인범, mongodb korea)
MongoDB in use(김인범, mongodb korea)MongoDB in use(김인범, mongodb korea)
MongoDB in use(김인범, mongodb korea)
 
Mongodb 개발 포인트
Mongodb 개발 포인트Mongodb 개발 포인트
Mongodb 개발 포인트
 
mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교
 
Mongo db in use(naver)
Mongo db in use(naver)Mongo db in use(naver)
Mongo db in use(naver)
 
이것이 레디스다.
이것이 레디스다.이것이 레디스다.
이것이 레디스다.
 
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
[110730/아꿈사발표자료] mongo db 완벽 가이드 : 7장 '고급기능'
 
Mongo db monitoring 어떤 것이 좋을까(mongodb korea, 김인범)
Mongo db monitoring 어떤 것이 좋을까(mongodb korea, 김인범)Mongo db monitoring 어떤 것이 좋을까(mongodb korea, 김인범)
Mongo db monitoring 어떤 것이 좋을까(mongodb korea, 김인범)
 
Mongo db로 배우는 nosql
Mongo db로 배우는 nosqlMongo db로 배우는 nosql
Mongo db로 배우는 nosql
 
실무로 배우는 시스템 성능 최적화 - 4부. 프로세스 이해하기
실무로 배우는 시스템 성능 최적화 - 4부. 프로세스 이해하기실무로 배우는 시스템 성능 최적화 - 4부. 프로세스 이해하기
실무로 배우는 시스템 성능 최적화 - 4부. 프로세스 이해하기
 
실무로 배우는 시스템 성능 최적화 Ch8
실무로 배우는 시스템 성능 최적화 Ch8실무로 배우는 시스템 성능 최적화 Ch8
실무로 배우는 시스템 성능 최적화 Ch8
 
Mongo db 최범균
Mongo db 최범균Mongo db 최범균
Mongo db 최범균
 
Apache ZooKeeper 로
 분산 서버 만들기
Apache ZooKeeper 로
 분산 서버 만들기Apache ZooKeeper 로
 분산 서버 만들기
Apache ZooKeeper 로
 분산 서버 만들기
 
7부. 애플리케이션 입장에서의 성능 튜닝 (1~8장)
7부. 애플리케이션 입장에서의 성능 튜닝 (1~8장)7부. 애플리케이션 입장에서의 성능 튜닝 (1~8장)
7부. 애플리케이션 입장에서의 성능 튜닝 (1~8장)
 
A review of zookeeper 2010.12
A review of zookeeper 2010.12A review of zookeeper 2010.12
A review of zookeeper 2010.12
 
주키퍼
주키퍼주키퍼
주키퍼
 
[125]웹 성능 최적화에 필요한 브라우저의 모든 것
[125]웹 성능 최적화에 필요한 브라우저의 모든 것[125]웹 성능 최적화에 필요한 브라우저의 모든 것
[125]웹 성능 최적화에 필요한 브라우저의 모든 것
 
Redis basicandroadmap
Redis basicandroadmapRedis basicandroadmap
Redis basicandroadmap
 
Ch9 프로세스의 메모리 구조
Ch9 프로세스의 메모리 구조Ch9 프로세스의 메모리 구조
Ch9 프로세스의 메모리 구조
 

En vedette

xUnitTestPattern/chapter12
xUnitTestPattern/chapter12xUnitTestPattern/chapter12
xUnitTestPattern/chapter12Hyosung Jeon
 
Mongo db 잡학상식
Mongo db 잡학상식Mongo db 잡학상식
Mongo db 잡학상식DaeMyung Kang
 
2014.4.30 프라이머 개발자 모임 - 서버 장애 예방 및 대응 방법 공유
2014.4.30 프라이머 개발자 모임 - 서버 장애 예방 및 대응 방법 공유2014.4.30 프라이머 개발자 모임 - 서버 장애 예방 및 대응 방법 공유
2014.4.30 프라이머 개발자 모임 - 서버 장애 예방 및 대응 방법 공유Kyoungchan Lee
 
MongoDB Basic Concepts
MongoDB Basic ConceptsMongoDB Basic Concepts
MongoDB Basic ConceptsMongoDB
 
JNR: Java Native Runtime
JNR: Java Native RuntimeJNR: Java Native Runtime
JNR: Java Native RuntimeYuichi Sakuraba
 
개발자가 도전하는 MariaDB 서버구축
개발자가 도전하는 MariaDB 서버구축개발자가 도전하는 MariaDB 서버구축
개발자가 도전하는 MariaDB 서버구축정해 이
 
The MongoDB Strikes Back / MongoDB 의 역습
The MongoDB Strikes Back / MongoDB 의 역습The MongoDB Strikes Back / MongoDB 의 역습
The MongoDB Strikes Back / MongoDB 의 역습Hyun-woo Park
 

En vedette (8)

xUnitTestPattern/chapter12
xUnitTestPattern/chapter12xUnitTestPattern/chapter12
xUnitTestPattern/chapter12
 
Nodejs express
Nodejs expressNodejs express
Nodejs express
 
Mongo db 잡학상식
Mongo db 잡학상식Mongo db 잡학상식
Mongo db 잡학상식
 
2014.4.30 프라이머 개발자 모임 - 서버 장애 예방 및 대응 방법 공유
2014.4.30 프라이머 개발자 모임 - 서버 장애 예방 및 대응 방법 공유2014.4.30 프라이머 개발자 모임 - 서버 장애 예방 및 대응 방법 공유
2014.4.30 프라이머 개발자 모임 - 서버 장애 예방 및 대응 방법 공유
 
MongoDB Basic Concepts
MongoDB Basic ConceptsMongoDB Basic Concepts
MongoDB Basic Concepts
 
JNR: Java Native Runtime
JNR: Java Native RuntimeJNR: Java Native Runtime
JNR: Java Native Runtime
 
개발자가 도전하는 MariaDB 서버구축
개발자가 도전하는 MariaDB 서버구축개발자가 도전하는 MariaDB 서버구축
개발자가 도전하는 MariaDB 서버구축
 
The MongoDB Strikes Back / MongoDB 의 역습
The MongoDB Strikes Back / MongoDB 의 역습The MongoDB Strikes Back / MongoDB 의 역습
The MongoDB Strikes Back / MongoDB 의 역습
 

Similaire à Mongo db 복제(Replication)

Redis trouble shooting
Redis trouble shootingRedis trouble shooting
Redis trouble shootingDaeMyung Kang
 
Redis Overview
Redis OverviewRedis Overview
Redis Overviewkalzas
 
Pgday bdr gt1000
Pgday bdr gt1000Pgday bdr gt1000
Pgday bdr gt1000정대 천
 
Pgday bdr 천정대
Pgday bdr 천정대Pgday bdr 천정대
Pgday bdr 천정대PgDay.Seoul
 
MySQL InnoDB Cluster 소개
MySQL InnoDB Cluster 소개MySQL InnoDB Cluster 소개
MySQL InnoDB Cluster 소개rockplace
 
Clonezilla se
Clonezilla seClonezilla se
Clonezilla se석 허
 
Osc4.x installation v1-upload
Osc4.x installation v1-uploadOsc4.x installation v1-upload
Osc4.x installation v1-uploadDong-Hwa jung
 
Binlog Servers 구축사례
Binlog Servers 구축사례Binlog Servers 구축사례
Binlog Servers 구축사례I Goo Lee
 
Cassandra 멘붕기 | Devon 2012
Cassandra 멘붕기 | Devon 2012Cassandra 멘붕기 | Devon 2012
Cassandra 멘붕기 | Devon 2012Daum DNA
 
Apache ZooKeeper 소개
Apache ZooKeeper 소개Apache ZooKeeper 소개
Apache ZooKeeper 소개중선 곽
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드KwangSeob Jeong
 
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안Jeongsang Baek
 
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석smartstudy_official
 
R2서버정진욱
R2서버정진욱R2서버정진욱
R2서버정진욱jungjinwouk
 
[2018] MySQL 이중화 진화기
[2018] MySQL 이중화 진화기[2018] MySQL 이중화 진화기
[2018] MySQL 이중화 진화기NHN FORWARD
 
MySQL Deep dive with FusionIO
MySQL Deep dive with FusionIOMySQL Deep dive with FusionIO
MySQL Deep dive with FusionIOI Goo Lee
 
MariaDB Other Features
MariaDB Other FeaturesMariaDB Other Features
MariaDB Other FeaturesJongJin Lee
 

Similaire à Mongo db 복제(Replication) (20)

Redis trouble shooting
Redis trouble shootingRedis trouble shooting
Redis trouble shooting
 
Redis Overview
Redis OverviewRedis Overview
Redis Overview
 
Redis acc 2015
Redis acc 2015Redis acc 2015
Redis acc 2015
 
Pgday bdr gt1000
Pgday bdr gt1000Pgday bdr gt1000
Pgday bdr gt1000
 
Pgday bdr 천정대
Pgday bdr 천정대Pgday bdr 천정대
Pgday bdr 천정대
 
MySQL InnoDB Cluster 소개
MySQL InnoDB Cluster 소개MySQL InnoDB Cluster 소개
MySQL InnoDB Cluster 소개
 
Clonezilla se
Clonezilla seClonezilla se
Clonezilla se
 
Osc4.x installation v1-upload
Osc4.x installation v1-uploadOsc4.x installation v1-upload
Osc4.x installation v1-upload
 
Cache governance
Cache governanceCache governance
Cache governance
 
Binlog Servers 구축사례
Binlog Servers 구축사례Binlog Servers 구축사례
Binlog Servers 구축사례
 
Cassandra 멘붕기 | Devon 2012
Cassandra 멘붕기 | Devon 2012Cassandra 멘붕기 | Devon 2012
Cassandra 멘붕기 | Devon 2012
 
Apache ZooKeeper 소개
Apache ZooKeeper 소개Apache ZooKeeper 소개
Apache ZooKeeper 소개
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드
 
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
 
Kubernetes
Kubernetes Kubernetes
Kubernetes
 
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
[스마트스터디]모바일 애플리케이션 서비스에서의 로그 수집과 분석
 
R2서버정진욱
R2서버정진욱R2서버정진욱
R2서버정진욱
 
[2018] MySQL 이중화 진화기
[2018] MySQL 이중화 진화기[2018] MySQL 이중화 진화기
[2018] MySQL 이중화 진화기
 
MySQL Deep dive with FusionIO
MySQL Deep dive with FusionIOMySQL Deep dive with FusionIO
MySQL Deep dive with FusionIO
 
MariaDB Other Features
MariaDB Other FeaturesMariaDB Other Features
MariaDB Other Features
 

Mongo db 복제(Replication)

  • 1. 9장 복제 MongoDB 전효성 http://cafe.naver.com/architect1 1
  • 2. Single server durability Single server durability 지원이 취약한 이유 일부러 하지 않는 않았다. 이유는? 기존의 DBMS도 single server durability를 보장 못하는 경우가 많다. 물리적 파괴와 같은 상황에서 복구가 힘들다. 그래서? Multi-server durability를 사용하시라. 2
  • 3. 복제의 용도 데이터 일관성 읽기 분산 운영 중 백업 오프라인 일괄 작업용 데이터 소스 3
  • 4. 마스터-슬레이브 복제 Master 노드 생성 Slave 노드 생성 # mongod --dbpath~/dbs/master --port 10000 --master # mongod --dbpath~/dbs/slave --port 10001 --slave --source localhost:10000 Slave 0 단방향 복사 master … MAX 12대 권장 Slave N oplog 4
  • 6. Shell에서 사용하기 Master 노드 띄우기 Slave 노드 띄우기 Shell로 slave에 접속 6
  • 7. 레플리카 셋 복제를 하는 또 하나의 방법 자동 장애 넘김 클러스터의 마스터가 유동적 장애로 마스터가 죽으면 다른 슬레이브가 알아서 마스터로 변신 제약사항( ver 1.6+ ) 최대 12대의 노드 구성 최대 7대의 노드가 투표 가능 7
  • 8.
  • 9. 장애처리 매커니즘 Node type 표준 노드(Standard) 수동 노드(Passive) { …, “Priority” : 0, … } 절대 마스터가 될 수 없다 결정권자 노드(Arbiter) { …, “arbiterOnly” : true, … } 투표만 한다 9
  • 10. 장애 판단 및 복구 장애 판단 Heartbeat수 대비 voting수가 반 이하로 떨어지면 마스터를 보조 노드로 변경 투표를 통해 높은 득표의 노드가 마스터로 변신 재 동기화 수행 Voting 각 노드들이 투표하여 마스터 노드 결정 10
  • 11. Vote: 가장 최근에 변경된 노드 Slave Master Vote:6 Slave Slave Slave Slave Slave 11
  • 12. 장애 발생 Slave Master Vote:2 Slave Slave Slave Slave Slave 12
  • 13. 마스터 노드 결정하기 가장최근에 동기화 Master Slave Vote:2 Slave Slave Slave Slave Slave 13
  • 14. 마스터 노드 결정하기 가장최근에 동기화 Master Vote:3 Slave Vote:2 Slave Slave Slave Slave Slave 14
  • 15. 재 동기화 가장최근에 동기화 Master Vote:3 Slave Vote:2 Slave Slave Master의 데이터로 재동기화 Slave Slave Slave 15
  • 16. 슬레이브에서 연산 수행하기 슬레이브 사용 용도 데이터 백업 오프라인 데이터 처리용 읽기 분산 16
  • 17. 읽기 분산 방법1. 생성시 slaveOkey옵션을 지정하여 query를 받을 수 있도록 변경 방법2. --master --slave 옵션을 동시에 적요하여 생성 쿼리를 받을 수 있고, 마스터로부터 계속 복제가 이루어진다. 처음 시작시 빈 db로 시작해야 함 17
  • 18. 작동 원리( Oplog ) 1: CUD command Master Slave 여유공간 5% 정도 2: Oplog에 기록 oplog 제한 컬렉션 멱등원 형태로 변환 $inc $set 18
  • 19. 작동 원리( 동기화 ) 초기 연결시: 완전 동기화 진행 Master Slave 용량을 넉넉히 잡아서 동기화 중 oplog공간이 부족하지 않게 해야 함 oplog 19
  • 20. 작동 원리( 동기화 ) 동기화 완료 이후… Master Slave [N초마다]복제 요청 oplog 20
  • 21. 작동 원리( 동기화 ) Master Slave 이전 요청 ~ 현재까지 oplog전달 oplog 21
  • 22. 복제 상태와 로컬 데이터베이스 local database Mongodb에서 사용하는 database Replica set에 대한 정보 Replica set 관련 collection local.system.replset : config정보 local.oplog.rs : oplog local.replset.minvalid : 내부용, 동기화정보를 추적하기 위한 정보 보관 Master/Slave replication 관련 collection Master node local.oplog.$main : oplog local.slaves Slave node local.sources Other local.me 22
  • 23. 노드 동기화 N개의 노드들이 쓰기 연산 복제 완료까지 대기 보통 N을 2 ~ 3으로 설정 ( 효율성 / 안정성 trade-off ) > db.runCommand( {getLastError: 1, w : N } ) 23
  • 24. 관리 진단 Oplog변경 > db.printReplicationInfo() configured oplog size: 944.1375732421875MB log length start to end: 1266secs (0.35hrs) oplog first event time: Thu Aug 04 2011 23:47:12 GMT+0900 oplog last event time: Fri Aug 05 2011 00:08:18 GMT+0900 now: Fri Aug 05 2011 23:44:46 GMT+0900 > db.printSlaveReplicationInfo() source: localhost:27017 syncedTo: Fri Aug 05 2011 23:46:11 GMT+0900 $ rm /data/db/local.* $ mongod --master --oplogSizesize //slave들을 --autosync로 재시작하거나 수동으로 재 동기화 필요함 24
  • 25. 관리 인증을 통한 복제 마스터 / 슬레이브의local db에 동일한 사용자와 비밀번호 추가 Slave 접속 시도 “repl”이라는 사용자로 접속시도 local.system.users의 제일 처음 이름을 사용 > use local Switched to db local > db.add.User( “repl”, password ); {“user” : “repl”, “readOnly” : false, “pwd” : “…” } 25
  • 26. 정리 복제를 하는 두가지 방법. Master-slave Replica set ( 편하다 ) Oplog사이즈를 적당히 크게 잡아주자. 재동기화 방지 Slave에 query를 날리려면? --master or --slaveOkey옵션으로 생성 26