[MongoDB] shard

moongq·2020년 11월 20일
0

MongoDB

목록 보기
2/7

몽고DB shard 문서 번역
출처: https://docs.mongodb.com/manual/sharding/

Sharding

Sharding은 데이터를 복수개의 저장소에 분산시키는 방법을 말합니다. MongoDB는 아주큰 데이터들을 관리하기위해, 그리고 아주 높은 처리량이 요구되는 작업을 위해 이 Sharding을 이용합니다.

대용량 데이터 세트 또는 처리량이 많은 애플리케이션에 이용되는 데이터베이스 시스템은 단일 서버만을 이용한다면 용량에 문제가 생길 수 있습니다. 예를 들어 쿼리가 많아지면 서버의 cpu 용량을 고갈시킬 수 있습니다. 또한 시스템의 램보다 사이즈가 큰 데이터를 작업하는 것은 디스크 드라이버의 I/O에 문제를 일으킬 수 있습니다.

"이런 문제를 해결하는 방법에는 두가지 종류가 있습니다. 수평 확장수직 확장입니다."

수직 확장

수직 확장은 단일 서버의 용량을 증가시키는 것을 말합니다. 예를 들면 더 강력한 CPU를 이용하기, RAM을 추가하기, 저장 공간을 키우기와 같은 물리적인 방법입니다. 그러나 단일 머신에 성능을 높이는 것에는 물리적 한계가 명확합니다. Cloud 기반에서도 사용가능한 하드웨어 구성이 이미 정해져있기 때문에 한계가 있습니다.

수평 확장

수평 확장은 여러 서버를 띄우는 것과 데이터들을 여러 저장소에 분산시키는 것을 말합니다. 수평 확장에서는 개별 서버들이 전체 업무를 나눠서 처리하게 됩니다. 개별 서버들의 성능과 용량이 전반적으로 높지 않더라도 아주 높은 성능의 단일 서버보다 빠르게 처리할 확률이 높습니다. 성능과 처리량을 늘리는 방법은 아주 간단합니다. 필요한만큼 서버를 늘리면 됩니다.
비용적 측면에서도 필요한만큼 서버를 늘리는 방식이 단일 서버의 성능을 키우는 것보다 훨씬 저렴합니다. 다만 수평 확장의 단점이 있다면 기반 시스템과 유지관리가 복잡해진다는 것입니다.

"MongoDB는 Sharding을 통해 수평 확장을 도와줍니다."

MongoDb의 sharded cluster는 3가지로 구성되어 있습니다.

  • shard: 각각의 shard는 분산된 데이터의 하위 집합을 포함합니다. 개별 shard는 replica set으로 배포가능합니다. (replica set: A cluster of MongoDB servers that implements replication and automated failover.)
  • mongos: mongose는 query router역할을 합니다. 클라이언트 어플리케이션과 shared cluster간의 상호작용을 돕습니다.
  • config servers: Config servers는 cluster의 구성 세팅과 메타데이터를 저장합니다.

아래 이미지는 분산된 클러스터내의 구성요소 및 상호작용을 설명합니다.

MongoDB는 데이터를 "collection" 레벨에서 분할하여서 개별 shard로 분산시킵니다.

MongoDB는 shard key를 이용하여 collection의 document들을 개별 shard로 분산시킵니다. shard key는 document들의 단일 필드 혹은 여러 필드들로 구성되어있습니다.

Advantages of Sharding

Reads / Writes

MongoDB는 각각의 shard들에 읽기/쓰기 작업을 나누어 전달합니다. 그리고 각 shard들은 나뉘어 분산된 작업들을 각자 진행하게 됩니다. 클러스터에 부여된 전체 작업을 나누어서 진행할 수 있도록 해줍니다.
shard key를 포함하는 query가 들어올 때면 mongos는 특정 shard에게만 query를 전달할수 있게 됩니다. 전체 데이터베이스에서 query를 하지 않아도 되므로 매우 효율적이라고 할수 있습니다.

Storage Capacity

sharding은 클러스터의 shard에 데이터를 분산하여 각 shard가 전체 클러스터 데이터의 하위 집합을 포함 할 수 있도록합니다. 데이터가 증가함에 따라 추가되는 shard는 클러스터의 스토리지 용량을 증가시킵니다.

High Availability

config server와 shard를 replica set으로 배포하는 것은 이용가능성을 향상시킵니다.
무슨말이냐면, 데이터를 여러개의 shard에 나눠서 분배하고 저장하기 때문에 몇몇 shard가 작동하지 않을때에 전체 데이터베이스가 멈추지 않습니다. 어느 부분이 고장나면 그 부분에서의 작업이 불가능해지는 것일 뿐 다른 shard에서의 업무는 모두 가능합니다.

Considerations Before Sharding

Sharded cluster 인프라 요구 사항과 복잡성에는 신중한 계획, 실행 및 유지 관리가 필요합니다.
몽고DB는 한번 나뉘어진 collection을 다시 돌리는 방법을 제공해주지 않습니다.
Shard key를 선택하는 것 또한 cluster의 성능과 효율성을 결정하기 때문에 신중해야 합니다.

sharding할때의 요구사항과 제한 사항이 있으니 참고하십시오! here

만약에 query에 shard key가 포함되어 있지 않다면 mongos는 모든 cluster에 query를 실행할 것입니다. sharding된 cluster 전체에 query를 실행시키는 것은 아주 느린 성능을 보여줄 것입니다.

Connection to a Sharded Cluster

Sharded cluster와 상호작용하기 위해 연결할때는 반드시 mongos와 연결해야 합니다. 특정 데이터만을 얻기 위해 특정 shard에만 연결하는 것은 절대 하면 안됩니다.

Transactions

몽고DB 4.2버전부터 sharded cluster에 multi-document transaction이 가능해졌습니다.
transaction이 커밋되기 전까지는 transaction안에서의 데이터 변화를 transaction밖에서는 알 수 없습니다.

__20.nov.2020

profile
https://medium.com/nodejs-server

0개의 댓글