백업/복구
- db의 백업/복제
- 데이터베이스 솔루션을 사용하는 이유: 데이터의 안전한 저장과 값에 대한 일관성 보장
- 하나의 서비스를 진행하다보면 각종 장애 상황에 접하게 됨
- 장애 발생 시 가장 중요하게 필요한 것이 백업과 복구에 관련된 기능
- 기존에 관계형 데이터베이스 솔루션의 경우에는 테이블별로 사용하는 솔루션에 따라 단순히 데이터가 저장된 파일을 복사하는 것만으로도 가능한 경우가 있음
- mongodb는 기본적으로 데이터를 덤프를 뜨고 복구하거나 리플리케이션 하는 등의 다양한 백업/복구 기능 지원
- 복구 종류
- shutdown & file copy
- 서비스를 종료하고 실제 저장된 데이터를 운영체제 명령어를 통해 복사하는 방법
- mongodb는 특정폴더 또는 지정된 폴더에 해당 데이터를 저장
- 운영체제 명령어 cp 등을 활용하여 데이터 복제
- 서비스 종료 이유는 카피 도중 새로운 데이터 유입되어 무결성에 문제가 생길 수 있기 때문이다.
- FsyncLock & backup
use admin db.copyDatabase("test", "test1"); // test database 를 test1 database로 복제 db.copyDatabase("test", "test", "192.168.1.77:27017"); // IP로 원격 서버에 있는 데이터를 복제해 올 수 있다.
- FsyncLock은 db 전체에 락을 걸고 데이터를 복제하는 방법으로 새로운 데이터 유입을 막고 무결성 문제를 해결한다.
- clone database 기능을 활용하면 local이 아닌 remote 상의 똑같은 데이터베이스 구조로 복제 가능
- local에서는 copydatabase 명령어를 사용
- 복제 완료 후 unlock을 해주어야 한다
- MondoDump, MongoRestore
// mongo dump 생성 $ mongodump --host 127.0.0.1 // 해당 서버에 덤프 생성 $ mongorestore -h 127.0.0.1 ./dump/ // dump 디렉터리 밑에 복구
- mongodb내의 데이터를 컬렉션, db, 전체 데이터 단위로 백업 가능
- 백업되는 데이터를 bson형태로 저장되어 문자열 형태로 저장된 데이터보다 빠르게 백업과 복구 가능
- 백업된 데이터는 mongorestore 명령어를 통해 복구 가능
- MongoExport, MongoImport
// -c: things collection, -d: test database $ mongoexport -h 192.168.1.77 -c things -d test -o "C:\data\db\export\test.exp" // json 타입, 저장된 text.exp 파일을 통해 test database, things collection에 복구 $ mongoimport -d test -c things --type json --file "C:\data\db\export\test.exp"
- bson형태보다 속도면에서 느리지만 다양한 형태(json, csv, tsv) 로 백업 가능하며 마이그레이션 시 외부 툴 활용이 가능하다
- 백업된 데이터를 MongoImport 명령어를 통해 복구 가능
- Replica
- Master 에서 입력된 그대로 N개 이상의 slave에 동일한 쿼리가 반복 복제되어 입력
- Master에 변경/삭제 쿼리가 Slave에도 복제되기 때문에 서비스 운영중에 쿼리 명령어를 통해 유실된 데이터 복구는 어려움
- ReplicationSet
- Master 서버가 장애가 발생면 Slave 서버 중 Master서버로 선정되어 운영되는 기능
- SnapShot 백업
- mongodb 내부에서 사용하는 백업 방식으로 일종의 버퍼
- 1.6 버전 부터 Journal 시스템에 해당 내용을 저장한 뒤 디스크에 내용을 저장
- 디스크에 문제가 발생하여도 Journal에 존재하는 데이터를 통해 복구가능
- shutdown & file copy
로그 수집/분석
- 모니터링 전략
- DB 활동을 실시간 리포팅하는 유틸리티 활용
- MongoDB 다운로드 패키지에 포함된 유틸리티
- 데이터베이스 명령 활용
- 현재 데이터베이스의 상태에 대한 통계 확인 가능
- MMS 모니터링 서비스(MMS Monitoring Service) 활용
- MongoDB Management Service: 데이터에 대한 시각화 및 경고 등을 제공하는 무료 서비스
- DB 활동을 실시간 리포팅하는 유틸리티 활용
- MongoStat
mongostat -rowcount 50 // 로우 수 지정 가능
- MongoDB가 동작하는 내부 상황에 대한 정보를 확인하기 위한 툴
- 1초에 한번씩 mongod, mongos 성능 측정
- mongod: mongodb 시스템의 주요 데몬으로 데이터 요청을 다루고, 접근을 관리하며 백그라운드 관리 operation 수행
- mongos: client의 요청을 받아 환경설정서버의 partitioning 정보를 참고해 적절한 데이터 서버로 요청을 포워딩함(샤딩), 쿼리 라우터처럼 동작하며, client 애플리케이션과 sharding 클러스터간의 인터페이스를 제공
- MongoDB내에서 일어나는 다양한 이벤트에 대한 정보와 메모리 상태등의 정보 확인 가능
- mapped: 메모리 상에 매핑되는 메모리 크기 단위(MB)
- vsize: 프로세스의 가상 크기
- res: 프로세스 resident 크기
- faults: 초당 발생하는 페이지 폴트 수
- locked: 글로벌 Write 락이 발생하는 전체시간에 대한 비율
- idx miss: btree index를 로드하며 인덱스를 읽을 때 페이지 폴트가 나는 비율
- qr: Mongodb 인스턴스로부터 data읽기를 기다리기 위한 client의 queue 길이
- qw: Mongodb 인스턴스로부터 data쓰기를 기다리는 client queue 길이
- ar: 읽기 작업 수행중인 Active 클라이언트 수
- aw: 쓰기 작업 진행중인 Active 클라이언트 수
- netIn: 몽고디비로 received된 네트워크 트래픽 양
- netOut: 몽고디비에서 밖으로 sent 된 네트워크 트래픽 양
- conn: 접속된 connection 수
- set: Replica 이름
- repl: Replication 유형(M(Master), SEC(Secondary), REC(Recovering), UNK(Unknown), SLV(Slave))
- faults의 수가 증가하면 full scan 쿼리를 날렸을 가능성이 높다
- qr 수치가 증가하면 쓰기 요청이 많아지며, 대기중인 상태가 많아지므로 서비스 지연으로 느낄 수 있다
- MongoTop
mongotop 5 // 5초마다 refresh
- 리눅스에서 시스템 상황을 확인하는 top과 유사한 명령어로 다른 점은 인스턴스 내 모든 컬렉션에 대한 read/write 확인이 가능하다
- ns: db + collection 명
- db: db명
- total: mongod 프로세스가 해당 콜렉션에서 수행한 총 시간
- read: mongod 프로세스가 해당 콜렉션에서 읽기 작업을 수행한 총 시간
- write: mongod 프로세스가 해당 콜렉션에서 쓰기 작업을 수행한 총 시간
- 시간: 분석 결과를 반환한 시간
- 리눅스에서 시스템 상황을 확인하는 top과 유사한 명령어로 다른 점은 인스턴스 내 모든 컬렉션에 대한 read/write 확인이 가능하다
- 웹 모니터링 도구
mongod -dbpath c:\mongodb\var --rest
- 웹상에서 상황을 모니터링할 수 있으며, -dbpath path —rest를 통해 모니터링할 수 있다
- localhost:28017을 입력
- 로그 수집
mongod -dbpath c:\mongodb\var -logpath c:\mongodb\testlog.txt
- logpath 옵션으로 몽고디비의 로그를 저장할 수 있다
- log 파일명을 일정 시간단위로 바꿔 줄 필요가 있다
출처
- https://blog.skcc.com/3225 [SK(주) C&C 블로그]
- https://mongsil1025.github.io/til/mongo/mongoMonitoring/