mongosのキャッシュクリア
MongoDBでマスタを入れるときに特定のShardに入れたいときがあります。例えば、マスタ系のデータはすべてShard1に寄せて、トランザクション系のデータはすべてのシャードに分けるとか。
そういう時には、
use admin;
// testMaster3コレクションをShardCollectionに指定
db.adminCommand({"shardCollection":"blog.testMaster3",key:{"id":1}, unique:true});
// 初期データをshard0001に設定
db.runCommand({moveChunk : "blog.testMaster3", find : {id : {$minKey : 1} }, to : "shard0001"});
mongos> db.printShardingStatus()
--- Sharding Status ---
sharding version: { "_id" : 1, "version" : 3 }
shards:
{ "_id" : "rs", "host" : "rs/localhost:27030,localhost:27032,localhost:27031" }
{ "_id" : "shard0000", "host" : "localhost:27040" }
{ "_id" : "shard0001", "host" : "localhost:27050" }
databases:
{ "_id" : "admin", "partitioned" : false, "primary" : "config" }
{ "_id" : "blog", "partitioned" : true, "primary" : "shard0000" }
blog.testMaster3 chunks:
shard0001 2
{ "id" : { $minKey : 1 } } -->> { "id" : 1 } on : shard0001 { "t" : 2000, "i" : 1 }
{ "id" : 1 } -->> { "id" : { $maxKey : 1 } } on : shard0001 { "t" : 2000, "i" : 2 }で、ここで大きな問題が。
複数のmongosから接続した時に、上記コマンドを打ったmongosからは参照できるのですが、別のmongosからは見えない問題が。statsを見ると、shardの設定がうまくみえて模様。ちなみに、mongosを再起動したら見えるようになったので、mongosがキャッシュしている模様。
mongos> db.testMaster3.stats()
{
"sharded" : true,
"flags" : 1,
"ns" : "blog.testMaster3",
"count" : 100,
"numExtents" : 1,
"size" : 5204,
"storageSize" : 8192,
"totalIndexSize" : 16352,
"indexSizes" : {
"_id_" : 8176,
"id_1" : 8176
},
"avgObjSize" : 52.04,
"nindexes" : 2,
"nchunks" : 2,
"shards" : {
"shard0001" : {
"ns" : "blog.testMaster3",
"count" : 100,
"size" : 5204,
"avgObjSize" : 52.04,
"storageSize" : 8192,
"numExtents" : 1,
"nindexes" : 2,
"lastExtentSize" : 8192,
"paddingFactor" : 1,
"flags" : 1,
"totalIndexSize" : 16352,
"indexSizes" : {
"_id_" : 8176,
"id_1" : 8176
},
"ok" : 1
}
},
"ok" : 1
}
// 見えてないとき
mongos> db.testMaster3.stats()
{
"sharded" : false,
"primary" : "shard0000",
"ns" : "blog.testMaster3",
"count" : 0,
"size" : 0,
"storageSize" : 8192,
"numExtents" : 1,
"nindexes" : 2,
"lastExtentSize" : 8192,
"paddingFactor" : 1,
"flags" : 1,
"totalIndexSize" : 16352,
"indexSizes" : {
"_id_" : 8176,
"id_1" : 8176
},
"ok" : 1
}ちなみに、再起動しなくても、以下のコマンドでクリアができました。でも、これをやるんだったらmongosを再起動するのと手間は同じだよな。普通、mongosからconfigサーバに見に行く時にわからないものなのか?
db.adminCommand("flushRouterConfig")参考
MongoDB