[MongoDB] setShardVersion failed 에러 발생시 [client version differs from config's for collection]
DataBase 2012. 10. 5. 14:19
MongoDB에서 DB를 생성하고 컬렉션을 막 샤딩을 했다가 지우고 이것저것 하다가,
실제로 클라이언트 프로그램에서 insert 등을 수행할 때 다음과 같은 에러를 만날 수 있다.
setShardVersion failed host: HOSTNAME:PORT { oldVersion: Timestamp 0|p, ns: "DBNAME.COLLECTION", version: Timestamp 2000|3, globalVersion: Timestamp 1000|4, errmsg: client version differs from config's for collection 'DBNAME.COLLECTION'", ok: 0.0 }
좀 뒤적거려보니 원인은 각 mongos 프로세스가 캐시하고 있는 데이터와 실제 config 서버의 데이터 사이에 sync가 맞지 않아서 일어나는 에러이다.
해결책은 각 mongos 프로세스의 캐시를 강제로 flush 하는 것이다.
모든 mongos 서버에 접속해서 아래의 명령어를 수행해주면 된다.
서버 하나에 접속해서 하는 방법
mongos> use config
switched to db config
mongos> var mongoses = db.mongos.find()
mongos> while (mongoses.hasNext()) { new Mongo(mongoses.next()._id).getDB("admin").runCommand({flushRouterConfig: 1}) }
{ "flushed" : true, "ok" : 1 }
참고: http://docs.mongodb.org/manual/reference/commands/#flushRouterConfig
'DataBase' 카테고리의 다른 글
[SQLite3] INSERT/UPDATE 속도 높이기 (increase write speed) (0) | 2013.01.17 |
---|---|
[MongoDB] PHP에서 db, collection 상태확인 (php driver, stats) (0) | 2012.11.15 |
[MongoDB] log rotate (0) | 2012.08.30 |
[MongoDB] 배열의 수를 기준으로 질의 (advanced query - $size) (0) | 2012.06.27 |
[MongoDB] disk io가 일어날 때를 대비한 전략 (0) | 2012.05.03 |