database/noSql

mongodb cluster 구축

아르르르를를르 2019. 12. 20. 14:27

나중에 내가 써먹으려고 쓰는 mongodb cluster 구축. 책을 읽고 내용을 정리해본다.
mongodb는 mysql과 다르게 대소문자를 구별한다.

mongodb cluster
1) 실제 데이터를 저장하는 shard
2) 요청을 적절한 shard로 배분해주는 mongos process
3) cluster의 설정을 유지해주는 mongod 설정서버

chunk 기본 설정 크기 : 64MB
balancing : 충분한 수의 chunk가 확보되면 다른 shard로 데이터를 이동한다.  데이터 고르게 분산, 전송량 최소화
mongos : 사용자와 클러스터 간의 접점, 단일 서버처럼 다룰 수 있게 해준다.
1) 사용자 document 입력
2) mongos가 문서의 shard key 확인
3) chunk 조회, 알맞은 shard로 document 배분
mongod : 설정 서버, 클러스터의 결정적인 정보가 저장된다.


cluster 구축
1. shard key 선택
상승하는 값 : ObjectId, timestamp 필드는 key로 선택하지 말자. 하나의 shard에만 입력되어 짧은 시간에 많은 입력이 발생하는 경우 핫스팟 발생 가능
무작위 값 : md5 필드도 지양하자. sharding key에는 index를 걸게 되어있다. index하나 낭비 -> write속도 느려짐, RAM 압박, 디스크 I/O 빈번해진다.
좋은 값 : 복합 key 구성
{"month", "search"} 등 상승하지만 구분있는 값과 검색 query시에 사용되는 값
단순히 {"ascendingKey"} 의 경우 거대하고 분할 불가능한 chunk를 생성할 가능성이 있어 불가하다.

2. collection sharding
mongod : 설정서버는 서버들을 연결해주는 역할이 아니다. mongos --configdb에서 설정
mongos : routng 역할을 하는 서버, cluster 구성 후에 각각 데이터 저장소를 달아준다.
database admin으로 접속
db.runCommand({"addShard":"shard이름:port번호"}) 또는 레플리카셋 구성
각 shard maxSize 지정 (<원하는 size)

 

 

관리/장애대응
cluster 요약정보 cmd
db.printShardingStatus() : cluster의 모든 database와 shard 정보 출력
config collection : 
config.mongos - 과거 ~ 현재 모든 mongos process 일람
config.shards - cluster에 저장된 모든 shard 일람
config.database - shard 관련 모든 database 일람
config.collections - shard 관련 모든 collections 일람
config.chunks - cluster에 저장된 모든 chunks 일람

모니터링 : 

mongostat --discover






참고도서 : mongodb 활용 가이드 / 크리스티나 초도로우 / 한빛미디어

'database > noSql' 카테고리의 다른 글

카산드라 아키텍쳐  (0) 2020.12.08
mongodb와 cassandra 비교  (0) 2020.11.30
server 상태 조회  (0) 2020.06.30
GridFs  (0) 2019.11.10