단일 샤드 서버 구성

Pinterest

글 : 이승용

샤드 서버에서의 장애 처리를 위해 우선 3개 서버로 구성된 한 개의 복제 집합이 한 개의 샤드로 구성된 샤드 서버 구조로 설치한다. Config 서버 3대, mongod 서버 3대, 그리고 mongos 서버 1대로 구성된 총 7개의 프로세스로 [그림 5-9]와 같이 구성한다.
 

[그림 5-9] 단일 샤드 서버 구성도


 

복제 집합 설치

 
[그림 5-9]과 같은 시스템을 구축하기 위해서 우선 복제 집합을 5.1.2절과 같이 복제 독립 서버 구조로 다음과 같이 설정한다.[1]
 

./mongod --dbpath /data/example/firstset1 --port 10001 --replSet firstset
./mongod --dbpath /data/example/firstset2 --port 10002 --replSet firstset
./mongod --dbpath /data/example/firstset3 --port 10003 --replSet firstset

 
3대의 mongod가 기동되었다면, 포트 10001 서버를 마스터로 만들기 위해 다음과 같은 수순으로 설정한다.
 

./mongo localhost:10001/admin

 

> db.runCommand({"replSetInitiate" : {"_id" : "firstset", "members" : [{"_id" : 1, "host" : "localhost:10001"}, {"_id" : 2, "host" : "localhost:10002"}, {"_id" : 3, "host" : "localhost:10003"}]}})
{
 "info" : "Config now saved locally. Should come online in about a minute.",
 "ok" : 1
}

 

Config 집합 설치

 
샤드 서버를 구성하기 위해서는 총 3대의 config 서버가 동작되어야 한다. Config 서버 역시 데이터 파일을 생성하기 때문에 dbpath가 설정되어야 한다. 따라서, 3대의 config 서버가 사용할 폴더 경로를 다음과 같이 설정한다.

  • /data/example/config1
  • /data/example/config2
  • /data/example/config3

 

./mongod –configsvr --dbpath /data/example/config1 --port 20001
./mongod –configsvr --dbpath /data/example/config2 --port 20002
./mongod –configsvr --dbpath /data/example/config3 --port 20003

 

mongos 설치

 
Config 서버 설치가 모두 완료되었다면, 다음과 같이 mongos를 기동시킨다. Mongos는 mongod와 config 서버와는 달리 dbpath를 가지지 않는다. 즉, 모든 정보는 메모리에 보관하고 있기 때문에 로컬 폴더 경로를 설정하지 않는다. Mongos의 기능 중 하나가 샤딩 정책을 수행하는 것으로 샤딩을 위한 청크chunk 크기를 설정하는 chunkSize 옵션을 사용한다. 본 보고서에서는 테스트를 위해 1이라는 값을 사용한다. 1은 1MByte를 의미하는 것으로, 1Mbytes의 데이터의 크기에 도달하면 샤딩을 수행한다는 의미이다. 디폴트 크기는 64Mbytes이다.
 

./mongos --configdb localhost:20001,localhost:20002,localhost:20003 --port 27017 --chunkSize 1

 
한가지 주의할 점은 mongos에는 config 서버 집합을 설정해 주어야 한다는 것이다. Mongos는 샤딩 정보를 메모리에 저장하고 이를 config 서버에 보낸다. Config 서버는 각 mongos에서 보내준 샤딩 정보를 취합하여 균일하게 관리하며, 각 mongos들간의 동기화를 수행한다.
 

mongos 연결

 
[그림 5-9]를 보면 클라이언트가 mongos로 연결된다. 복제 독립 서버에서는 클라이언트가 mongod에 바로 접속하였지만, 샤드 서버 구조에서는 클라이언트는 mongos에 접속한다. 이점을 주의하자. Mongos의 접속 방법은 다음과 같다.
 

./mongo localhost:27017/admin

 
앞에서 mongos를 포트 27017로 설정하였으므로, mongo 클라이언트를 포트 27017로 접속한다. 접속을 완료하면, mongos는 config 서버와 연결된 상태로, 아직 데이터 저장 서버인 샤드와의 접속은 없는 상태이다.
 

샤드 연결

 
Mongos와의 연결을 완료하였다면, 샤드를 등록한다. 샤드는 3개로 구성된 복제 독립 서버를 등록한다. 등록하는 방법은 다음과 같다.
 

mongos> db.runCommand( { addshard : "firstset/localhost:10001,localhost:10002,localhost:10003" } )
{ "shardAdded" : "firstset", "ok" : 1 }
mongos>

 

데이터 삽입 테스트

 
샤드가 정확하게 설치 되었는지 확인하기 위해 다음과 같이 수행한다.
 

mongos > use test
switched to db test
mongos > people = ["Marc", "Bill", "George", "Eliot", "Matt", "Trey", "Tracy", "Greg", "Steve", "Kristina", "Katie", "Jeff"];
mongos > for(var i=0; i<1000000; i++){
     name = people[Math.floor(Math.random()*people.length)];
     user_id = i;
     boolean = [true, false][Math.floor(Math.random()*2)];
     added_at = new Date();
     number = Math.floor(Math.random()*10001);
     db.test_collection.save({"name":name, "user_id":user_id, "boolean": boolean, "added_at":added_at, "number":number });
}

 
상기와 같이 데이터를 삽입하고 난 다음에 db.stats()를 수행하면 연결 데이터베이스의 상태를 다음과 같이 보여준다.
 
[리스트 5-2] 샤드 서버 구성 및 데이터 삽입 이후 DB 상태

mongos> db.stats()
{
	"raw" : {
		"firstset/localhost:10001,localhost:10002,localhost:10003" : {
			"db" : "test",
			"collections" : 3,
			"objects" : 1000004,
			"avgObjSize" : 100.33422666309335,
			"dataSize" : 100334628,
			"storageSize" : 141258752,
			"numExtents" : 15,
			"indexes" : 1,
			"indexSize" : 32458720,
			"fileSize" : 469762048,
			"nsSizeMB" : 16,
			"ok" : 1
		}
	},
	"objects" : 1000004,
	"avgObjSize" : 100.33422666309335,
	"dataSize" : 100334628,
	"storageSize" : 141258752,
	"numExtents" : 15,
	"indexes" : 1,
	"indexSize" : 32458720,
	"fileSize" : 469762048,
	"ok" : 1
}
mongos>

 
 
이전 글 : 샤드 서버
 
다음 글 : Config 서버 장애
 


[1] 앞 절에서 복제 독립 모드로 테스트를 수행하였다면, 초기화를 위해 /data 폴더를 모두 초기화 시켜 /data/example/config1, /data/example/config2, /data/example/config3, /data/example/firstset1, /data/example/firstset2, /data/example/firstset3 모두 빈 폴더로 만들어 둔다.


  • Facebook
  • Twitter
  • Delicious
  • LinkedIn
  • StumbleUpon
  • Add to favorites
  • Email
  • RSS
  1. 아직 댓글이 없습니다.
  1. 엮인글들이 아직 없습니다.