본문 바로가기
MongoDB

[MongoDB] Ch14 - 샤딩 소개

by 잭피 2022. 2. 21.

Ch14 샤딩 소개

  • 샤딩과 클러스터 구성 요소 소개
  • 샤딩 구성 방법
  • 샤딩과 애플리케이션의 상호작용 기본

14.1 샤딩이란

샤딩은 여러 장비에 걸쳐 데이터를 분할하는 과정이다 (파티셔닝이라고도 불린다)

각 장비에 데이터 서브셋을 넣음으로써, 더 많은 수의 덜 강력한 장비로 더 많은 데이터를 저장하고 더 많은 부하를 처리할 수 있다

 

또한, 더 자주 접근하는 데이터를 성능이 좋은 서버에 배치할 수 있다

몽고DB는 애플리케이션에서 구조를 추상화하고 시스템 관리를 간단하게 하는 자동 샤딩을 지원한다

운영 측면에서 몽고DB가 샤드에 걸쳐 데이터 분산을 자동화하므로 용량을 추가하고 제거하기가 쉽다

 

샤딩은 몽고DB를 구성하는 가장 어렵고 복잡한 방법이다

모니터링할 구성 요소가 많고, 클러스터에서 데이터가 자동으로 옮겨 다니기 때문이다

 

따라서 샤드 클러스터를 배포하거나 사용하기에 앞서 독립 실행형 서버나 복제 셋을 다루는 데 충분히 익숙해져야 한다

 

💡 샤드 클러스터를 구성하고 배포할 때 몽고DB 옵스 매니저나 몽고 DB 아틀라스를 사용하기를 권장한다

 

1. 클러스터 구성 요소 이해하기

몽고DB 샤딩을 통해, 많은 장비(샤드)의 클러스터를 생성하고, 각 샤드에 데이터 서브셋을 넣음으로써 컬렉션을 쪼갤 수 있다

샤딩의 한 가지 목적은 2개, 3개, 10개, 심지어 1000개의 샤드 클러스터가 하나의 장비처럼 보이게 하는 것이다

14.2 단일 장비 클러스터에서의 샤딩

단일 장비에서 클러스터를 설정해보자

mongo --nodb --norc

클러스터를 생성하기위해 ShardingTest 클래스를 사용해보자

st = ShardingTest({
	name:"jack-coding-shards", # 샤드 클러스터에 대한 레이블
	chunkSize: 1,
	shards:2, # 클러스터가 2개의 샤드로 구성되도록 지정
	rs: {
		nodes:3,
		oplogSize:10
	},
	other: {
		enableBalancer: true # 두 샤드에 균등하게 분산
	}
});

ShardingTest는 몽고DB 엔지니어링 내부용으로 설계된 클래스이므로 외부적으로 문서화되지 않았다

ShardingTest는 서버 테스트 셋을 지원하도록 설계됐고, 이러한 용도로 사용되고 있다

 

💡 ShardingTest는 /data/db 디렉터리가 있다고 가정한다

 

명령을 실행하면,

두 개의 샤드가 있는 클러스터를 생성하며, 각 샤드는 복제 셋이다

 

복제 프로토콜을 설정하는 데 필요한 옵션으로 복제 셋을 구성하고 각 노드를 시작한다

mongos를 시작해 전체 샤드의 요청을 관리하며, 클라이언트는 독립형 mongod와 통신하듯 클러스터와 상호작용을 할 수 있다

마지막으로 구성 서버에 대한 추가 복제 셋을 시작하는데, 이 서버는 쿼리를 올바른 샤드로 전달하는 데 필요한 라우팅 테이블 정보를 유지한다

 

샤딩은 주로 하드웨어 및 비용 제약을 해결하거나 애플리케이션에 나은 성능을 제공하려고 데이터셋을 분할하는 데 사용된다

sh.status()를 실행해 클러스터를 전체적으로 볼 수 있다

(샤드, 데이터베이스, 컬렉션에 대한 요약을 제공)

 

특정 컬렉션을 샤딩하려면 먼저 컬렉션의 데이터베이스에서 샤딩을 활성화한다

sh.enableSharding("jack")

jack 데이터베이스에서 샤딩이 활성화되고,

데이터베이스 내에서 컬렉션을 샤딩할 수 있다.

 

컬렉션을 샤딩할 때 샤드 키를 선택하는데, 이는 몽고DB가 데이터를 분할하는 데 사용하는 필드다

인덱싱과 유사한 개념이며, 컬렉션이 커질수록 샤드 키가 컬렉션에서 가장 중요한 인덱스가 된다

샤드 키를 만들려면 필드에 인덱스를 생성해야 한다

댓글