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
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