読者です 読者をやめる 読者になる 読者になる

chunkSizeではまる

MongoDBのShardingまわりいじっててmongosの起動の際にパラメータ指定してもなんかどうにもchunkSizeが適用されない。
configサーバのsettingsコレクションが怪しい気がする。

> db.settings.find()                                    
{ "_id" : "chunksize", "value" : 64 }


1.8のデフォルトは64MBなのでその値が入ってるみたい。
mongosの起動パラメータにchunkSize指定したらここが変更されてもよさそうなのになー。んーんーんー。
でもその場合複数mongos起動した場合にそれぞれでchunkSizeの指定が違った場合に対応できないしなー。
いやでもchunkとか管理するのはcongfigサーバだからどっかにサイズ持ってそうなもんだしなー。


と思って調べてみるとこんなんが。
Google Groups


configサーバ立ち上げてから初めてmongos立ち上げたタイミングで指定したchunkSizeのみが適用される的な。
以降はsettingsを手動で更新しろよ的な。
英語わかんないけどなんかそういう感じでしょうか。


というわけでEliotさんを信じてためしてみる。

> db.settings.update({_id:"chunksize"},{$set:{value:1}})
> db.settings.find()                                    
{ "_id" : "chunksize", "value" : 1 }


この状態で適当にぶちこんでもなんか上手くいってない気がしたのでconfigサーバとmongos立ち上げ直して念のためenableshardingとかもやり直して再度適当にぶちこむ。

> db.printShardingStatus()
(略)
  databases:
        { "_id" : "admin", "partitioned" : false, "primary" : "config" }
        { "_id" : "test2", "partitioned" : true, "primary" : "set01" }
                test2.table01 chunks:
                                set01   28
                                set03   27
                                set02   43


おお分割されてる。
ちょっと待ったらmigrationが起きて均等に割り振られました。

  databases:
        { "_id" : "admin", "partitioned" : false, "primary" : "config" }
        { "_id" : "test2", "partitioned" : true, "primary" : "set01" }
                test2.table01 chunks:
                                set01   33
                                set03   32
                                set02   33


migration中にcountとか発行したら噂通り本来の数より多い数値が表示されました。
なるほどなー。

スポンサーリンク