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에 저장하자


+ Recent posts