Config 서버 장애

Pinterest

글 : 이승용

[그림 5-9]에서 config 서버가 장애가 발생한 후 데이터 삽입이 발생하였을 경우를 살펴보자. MongoDB의 config 서버는 데이터 삽입에 영향을 주지 않고, 샤딩 정책을 위한 메타 데이터를 저장하고 있기 때문에 샤딩에 영향을 준다. 따라서, config 서버가 죽더라도 데이터 삽입에 영향을 주어서는 안된다. [그리스트 5-3]은 포트 20001 config 서버를 강제로 종료하여 config 서버를 read-only로 만든 후에 데이터를 삽입한 결과를 보여준다. 데이터 삽입은 다음과 같다.[1]
 

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 });
}

 
[리스트 5-3] 포트 20001 config 서버 장애 이후 데이터 삽입

mongos> db.stats()
{
	"raw" : {
		"firstset/localhost:10001,localhost:10002,localhost:10003" : {
			"db" : "test",
			"collections" : 3,
			"objects" : 2000004,
			"avgObjSize" : 100.33407533184933,
			"dataSize" : 200668552,
			"storageSize" : 272633856,
			"numExtents" : 18,
			"indexes" : 1,
			"indexSize" : 64909264,
			"fileSize" : 1006632960,
			"nsSizeMB" : 16,
			"ok" : 1
		}
	},
	"objects" : 2000004,
	"avgObjSize" : 100.33407533184933,
	"dataSize" : 200668552,
	"storageSize" : 272633856,
	"numExtents" : 18,
	"indexes" : 1,
	"indexSize" : 64909264,
	"fileSize" : 1006632960,
	"ok" : 1
}
mongos>

 
[리스트 5-3]에서 데이터 백만건을 다시 입력한 것이라, [리스트 5-2]보다 정확하게 백만건이 더 삽입되어 있다. 두 번째 config 서버 장애 상황을 고려해 보자. 전자의 경우는 config 서버가 장애가 발생하고 난 다음에 백만건의 데이터를 삽입한 경우이고, 이번에 테스트할 사항은 백만건을 삽입하는 도중에 config 서버가 장애가 발생하는 경우이다. 테스트를 위해 앞에서 강제 종료한 포트 20001 config 서버를 다시 재 기동한다.
 

./mongod –configsvr --dbpath /data/example/config1 --port 20001

 
데이터를 백만건 삽입을 수행한 후에 포트 20001 config 서버를 강제 종료시킨다. 이와 같을 경우, config 서버가 데이터 삽입에 영향을 주지 않기 때문에 [리스트 5-4]와 같이 정확하게 3백만건이 삽입되어 있는 것을 볼 수 있다.
 
[리스트 5-4] 데이터 삽입 도중 config 서버 장애 발생

mongos> db.stats()
{
	"raw" : {
		"firstset/localhost:10001,localhost:10002,localhost:10003" : {
			"db" : "test",
			"collections" : 3,
			"objects" : 3000004,
			"avgObjSize" : 100.3336955550726,
			"dataSize" : 301001488,
			"storageSize" : 409849856,
			"numExtents" : 20,
			"indexes" : 1,
			"indexSize" : 97343456,
			"fileSize" : 2080374784,
			"nsSizeMB" : 16,
			"ok" : 1
		}
	},
	"objects" : 3000004,
	"avgObjSize" : 100.3336955550726,
	"dataSize" : 301001488,
	"storageSize" : 409849856,
	"numExtents" : 20,
	"indexes" : 1,
	"indexSize" : 97343456,
	"fileSize" : 2080374784,
	"ok" : 1
}
mongos>

 
마지막 세 번째 경우로 config 서버 3대를 모두 장애를 발생시킨 후 데이터 삽입을 수행한 경우를 살펴보자. 이를 위해 포트 20001, 20002, 20003 config 서버 3대를 Ctrl+C 키를 입력하여 강제 종료시킨다. 그러면 mongos는 한 개의 config 서버와도 연결되어 있지 않게 된다. 이 상태에서 동일한 백만건 데이터를 삽입하는 스크립트를 기동하고 난 다음에 DB 상태를 살펴본 결과는 [리스트 5-5]와 같다.
 
[리스트 5-5] config 서버 집합 3대 모두 장애 발생 후 데이터 삽입

mongos> db.stats()
{
	"raw" : {
		"firstset/localhost:10001,localhost:10002,localhost:10003" : {
			"db" : "test",
			"collections" : 3,
			"objects" : 4000004,
			"avgObjSize" : 100.33407666592333,
			"dataSize" : 401336708,
			"storageSize" : 499666944,
			"numExtents" : 21,
			"indexes" : 1,
			"indexSize" : 129794000,
			"fileSize" : 2080374784,
			"nsSizeMB" : 16,
			"ok" : 1
		}
	},
	"objects" : 4000004,
	"avgObjSize" : 100.33407666592333,
	"dataSize" : 401336708,
	"storageSize" : 499666944,
	"numExtents" : 21,
	"indexes" : 1,
	"indexSize" : 129794000,
	"fileSize" : 2080374784,
	"ok" : 1
}
mongos>

 
[리스트 5-5]를 살펴보면 정확하게 백만건 데이터가 삽입된 것을 볼 수 있다. 따라서, 앞에서 살펴본 config 서버는 데이터 삽입에 영향을 주지 않는 것을 알 수 있다.
Config 서버는 다시 기동시키면 mongos와 연결되어 복원된다. 3개의 config 서버가 모두 종료된 후에 다음과 같이 3개의 config 서버를 모두 재 기동시킨다. 재 기동된 서버는 mongos가 살아 있는 이상 config 서버가 자신의 상태 정보를 저장한 로컬에서 읽어 들여 상태를 복원한다. 그리고, mongos는 주기적으로 config 서버의 상태를 체크하기 때문에 복원된 서버와의 접속을 수행해 상태를 정상적인 상태로 유지시키게 된다.
 

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

 
 
이전 글 : 단일 샤드 서버 구성
 
다음 글 : 마스터 서버 장애

 


[1] People[] 배열은 앞에서 설정한 것으로 가정하였다. 만약 데이터 삽입에서 people[] 배열이 정의되지 않았다는 에러가 발생하면 이전 글의 people[] 배열을 재설정하면 된다. 또한, 백만건 데이터 삽입이 오래 걸리는 경우는 데이터 삽입 건수를 조정하여 테스트를 수행해도 무방하다.


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