목표

  • 배포 고려사항 및 하드웨어 필요사항
  • 관리, 백업, 보안 방법
  • 성능 문제 해결 방법

배포 환경

  • 아키텍처
  • 몽고디비는 가상 주소공간으로 매핑하기 때문에 충분한 메모리를 확보할 수 있는 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를 구입하자.

  • 수평적 확장
  • 전체 작업 데이터를 어느 한서버의 물리적인 램이 수용할수 없을때, 어느 한서버에 쓰기부하가 너무 클때 샤드클러스터를 구축하자.

  • 전문가의 도움
  • 그래도 안되면 전문가를 부르자