Mongo db 복제(Replication)

5,691 views
5,322 views

Published on

mongo db 완벽 가이드 9장 복제 파트 스터디 자료

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,691
On SlideShare
0
From Embeds
0
Number of Embeds
131
Actions
Shares
0
Downloads
75
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

Mongo db 복제(Replication)

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

×