Replication, Sharding 이란?
- 데이터를 여러 서버에 분할하는 것을 말한다. MongoDB의 데이터 분할은 상황에 따라
각 Shard로 이동되어 MongoDB 이용자(앱, 웹)는 여러 서버를 인식하지 않고
데이터를 적재시킨다.
- 복제는 동일한 데이터의 사본을 여러 DB에 가지고 있는 반면,
Sharding은 다른 데이터를 여러 서버(DB)에 가진다.
- 보통의 MongoDB 운영은 Sharding + ReplicaSet 구성
1. 샤드 : 실제로 데이터가 저장되어 있는 mongod 프로세스이며, 하나의 문서는 하나의 샤드에
저장되어 샤드간의 데이터 복제는 하지 않는다. ReplicaSet(복제)를 구성하는 것을 권장
2. config server : 샤드 메타 데이터를 관리하는 mongod 프로세스로 단일 장애 지점이 된다.
3. mongos server : 샤드의 라우팅 프로세스이다. 샤드와 클라이언트를 연계시킨다.
필요하다면 여러 개의 mongos 서버를 가질 수 있다.
상태 값이나 데이터는 전혀 갖고 있지 않다. 연계, 실행만 시켜주는 역할
4. 샤드 키 : 데이터를 분산하는 범위의 키로 복수 지정할 수 있다.
키에 어떤 범위의 데이터가 어떤 샤드에 저장되는지를 MongoDB가 관리하고
데이터의 편차에 따라 자동으로 조정된다.
5. 청크 : 샤드의 덩어리를 말하며 분산 데이터의 단위
구체적으로는 컬렉션의 연속된 범위의 데이터의 문서를 말한다.
청크의 최대 크기에 도달하면 분할된 샤드가 가지고 있는 청크 수에 따라
필요한 경우 다른 샤드로 이동된다. 청크의 최대 크기는 변경할 수 있다.
============================================================================
1. mongod 3개를 실행하여 shard를 구성 - 각각의 dbpath, logpath, port를 다르게 해주고 replSet의 별칭을 지정
mongod --shardsvr --dbpath C:\data\mydata02 --logpath C:\data\mydata02\log\monod1.log --port 27030 --replSet RS
mongod --shardsvr --dbpath C:\data\mydata03 --logpath C:\data\mydata03\log\monod2.log --port 27031 --replSet RS
mongod --shardsvr --dbpath C:\data\mydata04 --logpath C:\data\mydata04\log\monod3.log --port 27032 --replSet RS
2. Shard와 Replica Set을 구성
mongo localhost:27030
use admin
var config = {
_id: 'RS',
members: [
{_id:0, host: 'localhost:27030'},
{_id:1, host: 'localhost:27031'},
{_id:2, host: 'localhost:27032'}
]
}
rs.initiate(config)
이후 각각의 mongo로 접속해 확인
3. mongod의 config server를 설정해 라우팅 기능을 부여
start mongod --configsvr --dbpath C:\data\mongoc1 --logpath C:\data\mongoc1\log\mongoc.log --port 27011 --replSet CRS
start mongod --configsvr --dbpath C:\data\mongoc2 --logpath C:\data\mongoc2\log\mongoc.log --port 27012 --replSet CRS
start mongod --configsvr --dbpath C:\data\mongoc3 --logpath C:\data\mongoc3\log\mongoc.log --port 27013 --replSet CRS
4. config server의 Replica Set을 구성
mongo localhost:27011
use admin
var conf = {
_id : 'CRS',
version : 1,
members: [
{_id : 0, host:'localhost:27011'},
{_id : 1, host:'localhost:27012'},
{_id : 2, host:'localhost:27013'}
]
};
rs.initiate(conf)
5. mongos를 통해 라우팅을 지정
mongos --configdb CRS/localhost:27011,localhost:27012,localhost:27013 --port 1000
mongo localhost:1000
sh.addShard('RS/localhost:27030,localhost:27031,localhost:27032');
sh.status로 addShard 전과 후 비교
'데이터과학자 - 강의 > javascript & mongoDB' 카테고리의 다른 글
210615 MongoDB - mongoimport, mongoexport (0) | 2021.06.16 |
---|---|
210615 MongoDB - aggregate, mongofiles (0) | 2021.06.15 |
210614 MongoDB - aggregate (0) | 2021.06.14 |
210611 MongoDB (0) | 2021.06.12 |
210610 MongoDB (0) | 2021.06.10 |