티스토리 뷰
MongoDB Installation Guide.
일단 설치하기전에 간단히 MongoDB에 대해 소개를 해보자 합니다.
MongoDB는 NoSQL의 한 종류이며 NoSQL 기본적으로 distributed processing ( sharding ) 및 Replication 을 지원합니다.
당연히 MongoDB도 NoSQL이기 때문에 Sharding과 Replication을 지원합니다.
일단 설치에 앞서 서버 구성에대하여 설명하도록 하겠습니다.
[그림 1] 서버 구성
서버 두대를 이용하여 Sharding & Replication Set을 셋팅합니다.
Server architecture는 아래와 같습니다.
[그림 2] 서버 Architecture
MongoDB 설치 환경
Server1
CPU : Intel(R) Pentium(R) Dual CPU T2410 @ 2.00GHz
Memory : 2GB
MongoDB : mongodb-linux-i686-static-2.0.4.tgz
Server2 ( VM OS )
CPU : Intel(R) Core(TM) i5-2500 CPU @ 3.30GHz ( X2 )
Memory : 2GB
MongoDB : mongodb-linux-i686-static-2.0.4.tgz
Download URL
http://www.mongodb.org/downloads
Installation Guide
http://www.mongodb.org/display/DOCS/Quickstart+Unix
1. MongoDB 설치
ubuntu에 MongoDB 서버와 client를 설치한다.
Step1. apt-get 을 이용한 패키지 설치
apt-get을 이용하여 DB를 설치합니다. ( Server1, Server2 )
2.ReplSet 을 위한 셋팅
ReplSet이란 MongoDB의 복제셋을 생성하는 기능으로 Master장비가 죽었을경우 생성된 복제셋이 존재하여 복구하기 때문에 시스템의 가용성을 높일 수 있습니다.
Step1. DB 저장 디렉토리 생성
DB데이터 저장공간과 replication & log 저장 공간을 생성합니다. ( Server1, Server2 )
$ sudo mkdir /data/db/first
$ sudo mkdir /data/db/log
Step2. Replication Daemon 실행
ReplSet (복제셋) 생성을 위한 데몬을 실행합니다. ( Server1, Server2 )
Step3. ReplSet 설정
MongoDB에 접속하여 ReplSet설정을 합니다. ( Server1 )
Step4. TEST 데이터 삽입
MongoDB에 접속한 상태에서 아래의 명령을 실행합니다. ( Server1 )
switched to db test
first:PRIMARY> people = ["Marc", "Bill", "George", "Eliot", "Matt", "Trey", "Tracy", "Greg", "Steve", "Kristina", "Katie", "Jeff"];
first:PRIMARY> for(var i=0; i<1000000; i++){
3.Config Server 셋팅
Config Server는 각 서버에 대한 샤딩정보등을 담고있는 서버이다. Config Server는 1대 아니면 3대를 추천합니다. (몽고디비에서 추천)
Step1. DB 저장 디렉토리 생성
config 데이터를 저장할 디렉토리를 생성합니다. ( Server1 )
mkdir /data/db/config2
mkdir /data/db/config3
Step2. Config Server Daemon 실행
Config Server Daemon을 실행합니다. ( Server1 )
$ mongod --configsvr --dbpath /data/db/config2 --port 20002 > /data/db/log/config2.log &
$ mongod --configsvr --dbpath /data/db/config3 --port 20003 > /data/db/log/config3.log &
4. Sharding 설정
Sharding은 NoSQL을 사용하는 궁극의 목적이라 볼 수 있습니다. Sharding설정을 통하여 데이터 Chunk사이즈를 조절하여 데이터를 테이블단위로 나누어 분산저장을 할 수 있습니다.
Step1. MonogS 설정
Mongos를 이용하여 Sharding을 위한Routing 서버를 셋팅합니다. chunkSize 1 (1M) 는 테스트에서만 추가하는 것으로 실제서비스에서는 이 옵션을 생략합니다. (기본 64M) ( Server1 )
Step2. Sharding 설정
이제 first ReplSet에 대한 샤딩을 설정합니다. mongo server1/admon 으로 접속을 하게되면 자동으로 현재 살아있는 config server로 접속하게 됩니다. ( Server1 )
$ mongo server1/admin
> db.runCommand( { addshard : "first/server1:10001,server2:10001"})
{ "shardAdded" : "first", "ok" : 1 }
5. Second ReplSet 설정
두번째 복제셋을 생성
Step1. mongod 실행
위에서 first ReplSet을 설정한 바와 같이 second ReplSet을 설정합니다. ( Server1, Server2 )
$ mkdir /data/db/second
$ mongod --dbpath /data/db/second --port 10002 --replSet second > /data/db/log/second.log &
Step2. ReplSet 설정
second 노드를 복제셋으로 묶어줍니다. ( Server1 )
$ mongo server1:10002/admin
> db.runCommand({"replSetInitiate" : {"_id" : "second", "members" : [{"_id" : 1, "host" : "server1:10002"},{"_id":2,"host":"server2:10002"}]}})
{
"info" : "Config now saved locally. Should come online in about a minute.",
"ok" : 1
}
6. Sharding 설정 (Second Node) 및 지정
first와 마찬가지로 second node도 Sharding을 추가합니다.
Step1. Sharding 추가
mongos (config)로 로그인하여 Sharding을 추가합니다. ( Server1, Server2 무관 )
$ mongo server1/admin
> use adminswitched to db admin
> db.runCommand( { addshard : "second/server1:10002,server2:10002"})
{ "shardAdded" : "second", "ok" : 1 }
Step2. Test
Sharding이 제대로 설정되었는지 확인해봅니다. ( Sever1, Server2 무관 )
> db.runCommand({listshards:1})
{
"shards" : [
{
"_id" : "first",
"host" : "first/server1:10001,server2:10001"
},
{
"_id" : "second",
"host" : "second/server1:10002,server2:10002"
}
],
"ok" : 1
}
Step3. Sharding할 DB 지정
위 까지 Sharding에대한 설정을 하였다면 이제 직접적으로 Sharding 할 DB를 지정해 줌으로 실질적인 Sharding을 하게 됩니다. ( Sever1, Server2 무관 )
> db.runCommand( { enablesharding : "test" } )
{ "ok" : 1 }
Step4. Sharding Key 지정
샤딩 키를 바탕으로 샤드들이 정렬되며 분산되기 때문에 샤딩키를 적절히 정해주어야 합니다. (중요) 인덱스 개념이라고 보시면 됩니다. ( Sever1, Server2 무관 )
switched to db test
mongos> db.test_collection.ensureIndex({number:1})
Step5. Index 지정
test 디비에 test_collection 이라는 컬렉션에서 number 라는 컬럼을 인덱스로 지정해 줍니다. ( Server1, Server2 무관 )
switched to db admin
> db.runCommand( { shardcollection : "test.test_collection", key : {"number":1} })
{ "collectionsharded" : "test.test_collection", "ok" : 1 }
Step6. DB Status 확인
지금까지의 설정이 제대로 되었는지 확인합니다. ( Server1, Server2 무관 )
{
"raw" : {
"first/server1:10001,server2:10001" : {
"db" : "test",
"collections" : 3,
"objects" : 984347,
"avgObjSize" : 100.33353685234984,
"dataSize" : 98763016,
"storageSize" : 132950528,
"numExtents" : 16,
"indexes" : 2,
"indexSize" : 74948608,
"fileSize" : 520093696,
"ok" : 1
},
"second/server1:10002,server2:10002" : {
"db" : "test",
"collections" : 3,
"objects" : 15665,
"avgObjSize" : 100.32786466645388,
"dataSize" : 1571636,
"storageSize" : 2800128,
"numExtents" : 7,
"indexes" : 2,
"indexSize" : 1638400,
"fileSize" : 201326592,
"ok" : 1
}
},
"objects" : 1000012,
"avgObjSize" : 100.33344799862401,
"dataSize" : 100334652,
"storageSize" : 135750656,
"numExtents" : 23,
"indexes" : 4,
"indexSize" : 76587008,
"fileSize" : 721420288,
"ok" : 1
}
Step7. Sharding Status 확인
현재 입력한 데이터가 제대로 분산이 되고있는지 확인합니다.
> db.printShardingStatus()
--- Sharding Status ---
sharding version: { "_id" : 1, "version" : 3 }
shards:
{ "_id" : "first", "host" : "first/server1:10001,server2:10001" }
{ "_id" : "second", "host" : "second/server1:10002,server2:10002" }
databases:
{ "_id" : "admin", "partitioned" : false, "primary" : "config" }
{ "_id" : "test", "partitioned" : true, "primary" : "first" }
test.test_collection chunks:
second 6
first 185
too many chunksn to print, use verbose if you want to force print
(빨간 표시의 수치가 현재 Sharding의 chunk 수를 나타냅니다. 시간이 지난후 확인해보시면 균등히 분산되어있는걸 확인 할 수 있습니다. )
이상 MongoDB Replication & Sharding 관련 테스트를 마치도록 하겠습니다.
참조 원문 : http://crazia.tistory.com/search/mongo
.by rocksea
'Developer' 카테고리의 다른 글
SSH Local Tunneling (0) | 2012.04.18 |
---|---|
redmine1.3.2 mylyn-connector 설치 (0) | 2012.04.17 |
Media WIKI 설치 (0) | 2012.03.28 |
redmine (0) | 2012.03.26 |
Jboss Clustering (0) | 2012.03.19 |
- Total
- Today
- Yesterday
- Python Django
- 도덕경
- 대명사 구문
- Business English
- 조동사
- 다낭
- 여행
- ubuntu
- mongoDB
- hdfs
- 스페인 여행
- JBOSS
- memcached
- AWS
- it
- hadoop
- 비교구문
- 베트남
- 해외여행
- 영작
- 가정법
- redis
- Python
- 영문법
- k8s
- nodejs
- NGINX
- PostgreSQL
- 비지니스 영어
- maven
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |