배포와 관리
MongoDB - 배포와 관리
목표
배포 고려사항 및 하드웨어 필요사항
관리, 백업, 보안 방법
성능 문제 해결 방법
배포 환경
아키텍처
몽고디비는 가상 주소공간으로 매핑하기 때문에 충분한 메모리를 확보할 수 있는 64비트 운영 체제를 사용하자.
리틀 엔디언 서버에서 실행해야한다.
CPU
- 몽고디비는 cpu연산이 많은 어플리케이션이 아니다.
램
작업 데이터의 크기가 램 용량을 넘어서게 되면 성능 저하가 심각해 진다.
자주 사용하는 인덱스와 작업 데이터를 램이 수용할 수 있도록 충분한 램을 확보하자.
디스크
몽고디비에 쓰기를 할 때 서버가 매 60초마다 디스크에 동기화를 하기 때문에 디스크 속도가 느리면 성능이 저하될수 있다.
읽기 쓰기를 수행할때 물리적인 메모리가 다찰 때까지 새로운 가상메모리 페이지를 램으로 읽어들인다. 디스크가 빠르면 이작업이 빨라진다.
파일 시스템
- ext4, xfs 파일 시스템은 몽고디비에서 빈번하게 일어나는 선할당의 속도가 빨라진다.
파일 디스크립터
- 실제 서비스에서 모자라게 되는 일이 없도록 제한값을 높게잡고 시작한다.
클럭
복제는 시스템 클럭 차이에 민감하다.
복제셋의 노드를 호스팅하는 서버의 클럭이 서로 달라지게 되면 복제가 올바르게 작동하지 못할 수도 있다.
각 서버에서 NTP를 사용해서 클럭을 동기화 할 필요가 있다.
클라우드
클라우드를 이용하게 되면 메모리 제한에서 자유로울수 없다.
클라우드는 블랙박스 이기 때문에, 서비스 문제를 분석하고 해결할 수 있는 방법이 업다.
클라우드의 디스크는 높은 수준의 처리율을 제공하지 않는다.
서버 설정
구성 선택
- 최소한의 권장 배포 구성은 세 멤버로 이루어진 복제셋이다.
저널링
2.0부터 디폴트로 사용된다.
모든 쓰기를 핵심 데이터 파일에 쓰기 전에 저널에 먼저 쓴다.
예상치 않게 셧다운 되었을 때 신속하고 정확하게 온라인 상태로 되돌아오게 해준다.
저널링을 사용하면 쓰기 성능 옵션이 저하된다.
100미리초의 동기화 시간이 있기 때문에 100미리초 만큼의 연산이 소실될수 있다.
데이터 import, export
Mongoimport
- JSON, CSV, TSV 파일을 들여오기 할 수 있다.
Mongoexport
- 컬렉션의 모든 데이터를 JSON, CSV파일로 내보낼수 있다.
보안
안전한 환경
모든 데이터베이스 클라이언트는 모든 복제셋 노드에 연결할 수 있어야 한다.
샤드 클러스터는 부분적으로 복제셋으로 이루어져 있다.
인증 API
- 인증 시작을 위해서는 admin 데이터 베이스에 사용자를 추가해야한다.
복제셋 인증
패스워드 역할을 하는 최소한 6개의 문자로 이루어진 base64파일을 생성해야한다.
keyFile 옵션을 사용해 패스워드 파일의 위치를 지정한상태로 복제셋 멤버를 실행
샤딩 인증
- 복제셋과 동일
모니터링과 진단
로깅
logpath, -v 옵션을 이용해 로그를 저장한다.
logappend 옵션을 사용하면, 로그를 새로쓰지 않고 추가한다.
logrotate 명령을 실행하면 로그 파일을 주기적으로 순환한다.
모니터링 도구
serverStatus
서버의 상태를 알려준다.
top
연산이 평균적으로 얼마나 오래 실행되고 있는지를 알려준다.
db.currentOp()
몽고디비가 현재 무엇을 수행하고 있는지 알려준다.
MONGOSTAT
다른 명령어는 순간의 내용이지만 MONGOSTAT은 실시간 액티비티를 제공한다.
웹콘솔
시각화된 인터페이스를 제공
–rest 옵션 + 몽고디비를 실행중인 포트 + 1000하면 사용가능
모니터링 외부 어플리케이션
진단도구
mongosniff
- 클라이언트로부터 전송되는 패킷을 검사하고 알기쉽게 추출.
bsondump
- BSON 원파일을 검사할수 있다.
유지보수
백업과 복구
- mongodump, mongorestore를 이용하거나, 데이터파일을 카피.
압축과 수리
mongod –repair를 사용하여 서버의 모든 데이터베이스를 수리할수 있다.
데이터베이스 단위의 수리는 db.repairDatabase()를 사용한다.
업그레이드
- 가능한 최신 안정버전을 업그레이드 하여 사용하도록 하자.
성능문제 해결
인덱스와 쿼리 효율성
성능문제 발생시 가장먼저 확인해야 하는것이 인덱스.
중복된 인덱스로 인해 디스크 공간과 램이 더많이 필요해 지면, 쓰기연산에 더 많은 작업이 필요해진다.
램추가
인덱스조정이 항상 해결책은 아니다. 데이터가 메모리용량보다 많으면 디스크 액세스가 자주 발생해 속도가 저하될수 있다.
dataSize와 storageSize의 크기 차이를 잘 확인해야함.
storageSize 가 너무 크면 디스크 파편화로 성능이 저하될수 있다. 이 파편화로 실제 필요한것 이상의 램을 사용할수 있다.
디스크 성능 향상
- RAID를 구성하거나 SSD를 구입하자.
수평적 확장
- 전체 작업 데이터를 어느 한서버의 물리적인 램이 수용할수 없을때, 어느 한서버에 쓰기부하가 너무 클때 샤드클러스터를 구축하자.
전문가의 도움
- 그래도 안되면 전문가를 부르자
Share this post
Twitter
Google+
Facebook
Reddit
LinkedIn
StumbleUpon
Email