배포와 관리
목표
- 배포 고려사항 및 하드웨어 필요사항
- 관리, 백업, 보안 방법
- 성능 문제 해결 방법
배포 환경
- 아키텍처
- 몽고디비는 가상 주소공간으로 매핑하기 때문에 충분한 메모리를 확보할 수 있는 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를 구입하자.
- 수평적 확장
-
전체 작업 데이터를 어느 한서버의 물리적인 램이 수용할수 없을때, 어느 한서버에 쓰기부하가 너무 클때 샤드클러스터를 구축하자.
- 전문가의 도움
- 그래도 안되면 전문가를 부르자
Comments