Download presentation
Presentation is loading. Please wait.
Published byMervin Hawkins Modified 6년 전
1
작성자: 강동운(eastluck@lycos.co.kr) 발표일: 2012년 7월 28일
한국 몽고디비 사용자 그룹 제 2회 Meetup MongoDB HA(Replication & Sharding) Backup & Restore 작성자: 발표일: 2012년 7월 28일
2
소개 강동운(Software Engineer) Electronic Arts FIFA Online
Blog: Facebook: 주요 업무 및 활동 - MongoDB 공식 한국 사용자 그룹 스터디 - SQL Server MVP 2012 - SQLer.com 이스트럭(강동운) - SQLer Vision Study Leader
3
Contents Replication - 복제 셋(Replica sets) 과 master/slave 복제 - 데모
- 복제 셋 삭제, –rest 및 유의점 Sharding - chunk, balancing, balancer - config server, mongos - Sharding DEMO 백업과 복원 - mongodump, mongorestore - 세컨더리 파일 복사
4
Replication 고가용성의 기능(미러링) 복제 셋(replica set) - 표준, 수동, 결정권자 노드
Master/Slave Replication oplog 와 heartbeat, Priority
5
Replication 종류 복제셋(replica sets) - 자동 장애조치 가능 - 12개 노드까지 구성 가능
- 홀수 노드로 구성 권장 마스터,슬레이브(master-slave) - 자동 장애조치 불가능(수동) - 13개 이상 노드까지 구성 가능 - 현재 잘 안 쓰임
6
Oplog와 heartbeat oplog - capped collection - local database 내에 저장
변경된 document를 저장 Heartbeat(심장 박동) - 2초마다 각각 서버들에게 ping 전달 - 서버의 상태를 체크
7
Priority Priority - 서버내 우선 순위 - 기본 값 1 - 0일 경우 수동노드
8
복제 셋 노드 종류 표준 노드 - 1개의 PRIMARY - N개의 SECONDARY 단, Priority > 0
수동 노드 - 복제된 데이터는 가지고 있음 - Priority = 0 - 마스터가 될 수 없다.
9
복제 셋 노드 종류 결정권자 노드 - ARBITER 라고 함 - 데이터를 저장하지 않음
- PRIMARY FAILOVER 시 투표에는 참여
10
복제 셋 기본 구조 핑(heartbeat) SECONDARY PRIMARY 복제 복제 핑(heartbeat) ARBITER
11
복제 셋 기본 구조 PRIMARY SECONDARY Priority 1 SECONDARY Priority 1 SECONDARY
12
복제 셋 기본 구조 PRIMARY SECONDARY Priority 1 SECONDARY SECONDARY Priority 1
1초전 동기화 SECONDARY Priority 0 SECONDARY Priority 1 3초전 동기화 PRIMARY
13
복제 셋 셋팅 방법(서버시작) mongod --dbpath C:\DATA\first1 --port 10001
--replSet first --oplogSize 10 --rest --dbpath C:\DATA\first2 --port 10002 --dbpath C:\DATA\firstarbiter --port 10003
14
복제 셋 셋팅 방법 1 mongo localhost:10001/admin db.runCommand(
{"replSetInitiate" : {"_id" : "first", "members" : [ {"_id" : 1, "host" : "localhost:10001"} , {"_id" : 2, "host" : "localhost:10002"} , {"_id" : 3, "host" : "localhost:10003", arbiterOnly: true } ] } ) Ex) {"_id" : 2, "host" : "localhost:10002", "Priority" : "50"}
15
복제 셋 셋팅 방법 2 mongo localhost:10001/admin rs.initiate()
rs.add(“localhost:10002”) rs.add(“localhost:10003”, {arbiterOnly: true })
16
복제 셋 시작옵션 --rest 포트번호 + 1000번 웹으로 접속 --rest 옵션 추가 및 –replSet 없는 경우
모든 설정 끝 --rest 옵션 과 --replSet 옵션 추가 --rest 옵션 없는 경우 접속!
17
Master/Slave 셋팅 방법 mongod --dbpath C:\DATA\testmaster --port 10011
--oplogSize 10 --rest --master --dbpath C:\DATA\testslave --port 10012 --slave --source localhost:10011
18
복제 셋 및 Master/Slave DEMO
19
복제 셋 삭제 Rs.remove(‘localhost:포트번호’) 서버 재시작 해야 함. 초기화 방법은??
20
복제 셋 유의 점 홀수 노드로 구성 권장 프라이머리 선출 ARBITER 가 없어도 작동 함
SECONDARY에서 데이터를 읽기 위해서는 rs.slaveOk() 를 수행
21
Sharding 분산 처리 Shard Key(예: idx 또는 id, name 등) Member (25만) Member
샤드1 샤드2 Member (25만) Member (25만) Member(100만) 샤드3 샤드4 Member (25만) Member (25만)
22
Sharding Member (500 G) Member (400 G) Member (400 G) Member (600 G)
샤드1 샤드2 샤드3 샤드4 샤드5 Member (500 G) Member (400 G) Member (400 G) Member (600 G) Member (500 G) Member (700 G) Member (500 G) Member (400 G) Member (400 G) Member (900 G) Member (500 G) Member Member (400 G) A <= ID < F A <= ID < C C <= ID < H F <= ID < K C <= ID < K H <= ID < T H <= ID < Q K <= ID < T T <= ID < Z Q <= ID < Z Q <= ID < T T <= ID < Z 100G 200G 300G 400G
23
Sharding(Chunk) 한 샤드 안에는 N개의 청크가 있다. Chunk의 기본 사이즈 64 MB
(원랜 200MB, v1.8 이후로 64 MB) --chunkSize N 옵션으로 조절 가능 그냥 쓰는게 바람직..
24
Sharding Member (400 G) Member (500 G) Member (500 G) Member (400 G)
샤드1 샤드2 샤드3 샤드3 샤드5 Member (400 G) Member (500 G) Member (500 G) Member (400 G) Member (400 G) Member (500 G) Member (500 G) Member (400 G) Member A <= ID < C A <= ID < F F <= ID < I F <= ID < K K <= ID < T K <= ID < Q T <= ID < X T <= ID < Z C <= ID < F I <= ID < K Q <= ID < T X <= ID < Z 100G 100G 100G 100G
25
Sharding(Chunk 예제) Member (500 G) Member (500 G) Member (500 G) Member
샤드1 샤드2 샤드3 샤드3 샤드5 Member (500 G) Member (500 G) Member (500 G) Member (500 G) Member (500 G) A <= ID < C F <= ID < G C <= ID < F G <= ID < J J <= ID < K N <= ID < Q R <= ID < S Q <= ID < R S <= ID < T K <= ID < N T <= ID < X X <= ID < Z
26
Sharding(Balancing) 샤드 서버의 청크의 숫자 조절 작업을 수행하는 프로세스(balancer) Member
샤드1 샤드2 Member (청크 50개) Member (청크 49개) Member (청크 49개) Member (청크 48개) 청크 1개 이동
27
Sharding(Config server)
Config DB의 chunks collection에 chunk 정보 저장 하나라도 죽을 경우 balancing 작동 안함
28
Sharding(Mongos) 어플과 디비의 게이트웨이 어플은 단일 서버로 취급할 수 있다. 쓰거나 읽을 때 참조 해야 함.
개별 샤드로 접근 시 데이터 인식 못함.
29
Sharding(구조) Mongos CLIENT 샤드 1 샤드 2 샤드 3 Config1 Config2 Config3
Primary Secondary Primary Secondary Primary Secondary Arbiter Arbiter Arbiter
30
Sharding(DEMO chunkSize 1)
Config1 (50051) 샤드(fourth) Mongos (55555) P(50010) S(50011) Config2 (50052) 2.5만 2.5만 A(50012) Config3 (50053) 샤드(first) 샤드(second) 샤드(third) 10만 P(50001) S(50002) P(50004) S(50005) P(50007) S(50008) 2.5만 3.3만 2.5만 3.3만 2.5만 3.3만 2.5만 3.3만 2.5만 3.3만 2.5만 3.3만 A(50003) A(50006) A(50009)
31
Sharding DEMO
32
백업 Mongodump 파일 복사를 하는 방법
33
백업(mongodump) Mongodump –h 호스트명 --port 포트명 –d 데이터베이스명 -o 백업디렉토리명
34
복원(mongorestore) Mongorestore –h 호스트명 --port 포트명 –d 데이터베이스명 디비명
--drop (있는 경우 삭제)
35
백업(파일 복사 방법) PRIMARY 를 복사하지 말자 (파일에 LOCK이 걸릴 수 있음) SECONDARY 복사
db.fsyncLock() 하지만!! 밸런서가 움직이고 있다! Config 서버 중 한대를 정지 후 복사 복사 후 db.fsyncUnLock()
36
백업 및 복원 DEMO
37
SUMMARY 복제 셋, master/slave 복제
sharding(chunk, balancer, config server, mongos) 백업과 복원(mongodump, mongorestore, 파일복사) Document 공간을 미리 확보하자
38
참고 자료 주디아줌마 블로그 http://judydba.tistory.com/169 MongoDB 활용 가이드
MongDB 완벽 가이드 MongoDB.org DOCS
39
감사합니다.
Similar presentations