1. 샤딩의 개념과 정의
* 샤딩의 목적
: 데이터의 분산 저장
: 한대의 서버에 빅 데이터를 저장하는 것은 불가능하다.
: 서비스의 성능저하, 하드웨어의 한계
: 데이터를 분산하여 순차적으로 저장한다면, 부하를 분산할 수 있다.
: 백업과 복구 전략
: 시스템 성능 향상, 데이터 유실 가능성으로부터 보호
: 미리 분산하여 안정적이고 효과적인 시스템 운영을 한다.
: 여러 독립된 프로세스로 병렬 작업을 하기 때문에 빠른 처리 성능을 보인다.
:
: 3대 이상의 서버를 샤드로 활용하는 것을 추천한다. (최소 2대)
: 기존 한대일때보다 20~30%더 메모리를 사용한다.
* config 서버
: 샤드 서버의 인덱스를 찾는데 필요
: 샤드 시스템에 대한 메타 데이터 저장/관리 역할
: 샤드와 별도 서버에 구축
: 최소 3대 이상 사용(최소1대)
: 저사양 서버 사용 가능
* mongos 서버
: 하나 이상의 프로세스를 사용
: config 서버의 meta-data를 캐시한다
: 빅데이터를 샤드 서버로 분산해주는 프로세스
: mongs 서버를 통해 데이터를 쓰고 읽는 작업을 한다.
* 샤딩 시스템 계층
: 중개자 계층은 샤딩 시스템의 핵심적인 부분 (mongos 부분)
* Shard Key 구성
: Shard Key는 여러개의 Shard 서버로 분할 될 기준필드를 가리킨다.
: partition 과 load balancing에 기준이 되며, mongodb 데이터 저장과 성능에 절대적인 영향을 미친다
: 데이터 분포가 낮으면 Low Cardinality라고 한다.
: Chunk Migration의 횟수와 빈도를 결정한다.
- migration : 데이터의 이동, 서버에 균등하게 데이터를 재조정하는 과정
- Chunk : 일정한 데이터양에 도달했을 때 서버로 분할하는 단위
2. 샤딩 시스템 구성
* 데이터 저장 공간 생성
> mkdir shard1 // 저장공간 만들기
> mkdir shard2 // 저장공간 만들기
> mkdir shard3 // 저장공간 만들기
* config 서버용 저장 공간 생성
> mkdir config1 // config 서버용 저장공간 생성
* 서버 실행
> Mongod -shardsvr -dbpath 경로 -port 40001 // 샤드 서버 실행 , 포트는 다른 컴퓨터면 같아도됨
> Mongod -shardsvr -dbpath 경로 -port 40002 // 샤드 서버 실행
> Mongod -shardsvr -dbpath 경로 -port 40003 // 샤드 서버 실행
> mongod -configsvr -dbpath 경로 -port 50001 // config 서버 실행
* mongos 서버 실행
> mongos -configdb localhost:50001 -port 27017 -chunkSize 1 // mongo 명령어를 통해 shell 진입시 해당 포트를 입력해야 한다.
* 샤드 서버 추가
> db.runCommand({addshard:"localhost:40001"}) // Shard를 런 타임중에 추가할 수 있음
> db.runCommand({addshard:"localhost:40002"})
> db.runCommand({addshard:"localhost:40003"})
* 샤드 키 지정
> db.runCommand({enablesharding:"person"}) // Shard DB지정
> db.runCommand({shardcollection:"person.users",key:{_id:1}}) // Shard Collection과 index지정
* 현재 샤드 상태 조회
> printShardingStatus();
* 데이터 확인
> mongo localhost:40001
> use person
> db.users.count()
* 샤드 삭제
> db.runCommand({removeshard:"localhost:40000"})
3. 샤딩의 한계
: 샤드 노드의 개수를 약 100개정도로 한정하고 있다
: 마스터 서버가 fail되어도 mongos는 여전히 fail된 mongod를 마스터로 간주할 수 있다.
: 중요한 데이터는 RDBMS에 저장하자
'프로그래밍 > NoSQL - MongoDB' 카테고리의 다른 글
mongoDB 리플리카 셋으로 장애 대응방법 배우기 (0) | 2017.04.04 |
---|---|
MongoDB를 이용한 복제 방법 살펴보기 (0) | 2017.04.04 |
MongoDB Index기능 (0) | 2017.04.03 |
MongoDB 명령어 (0) | 2017.04.03 |
NoSQL 개요 & MongoDB 개요 (0) | 2017.04.03 |