6

RS1 と RS2 の 2 つのシャードを持つ Mongo クラスターがあります。RS1は約600G(※)、RS2は約460Gです。数分前に、新しいシャード RS3 を追加しました。mongos に接続してステータスを確認すると、次のように表示されます。

mongos> db.printShardingStatus()
--- Sharding Status --- 
  sharding version: { "_id" : 1, "version" : 3 }
  shards:
        {  "_id" : "RS1",  "host" : "RS1/dbs1d1:27018" }
        {  "_id" : "RS2",  "host" : "RS2/dbs1d2:27018" }
        {  "_id" : "RS3",  "host" : "RS3/dbs3a:27018" }
  databases:
        {  "_id" : "admin",  "partitioned" : false,  "primary" : "config" }
        {  "_id" : "demo",  "partitioned" : false,  "primary" : "RS1" }
        {  "_id" : "cm_prod",  "partitioned" : true,  "primary" : "RS1" }
                cm_prod.profile_daily_stats chunks:
                                RS2     16
                                RS1     16
                        too many chunks to print, use verbose if you want to force print
                cm_prod.profile_raw_stats chunks:
                                RS2     157
                                RS1     157
                        too many chunks to print, use verbose if you want to force print
                cm_prod.video_latest_stats chunks:
                                RS1     152
                                RS2     153
                        too many chunks to print, use verbose if you want to force print
                cm_prod.video_raw_stats chunks:
                                RS1     3257
                                RS2     3257
                        too many chunks to print, use verbose if you want to force print
          [ ...various unpartitioned DBs snipped...]

そのため、新しい RS3 シャードはシャードのリストに表示されますが、「各シャードが持つチャンクの数」のリストには表示されません。すべてのシャードされたコレクションのカウントが 0 で、そのリストに表示されると予想していました。

私が少ししたい場合、これは自分自身を整理する予想される動作ですか?

4

2 に答える 2

3

チャンクがそこに移動し始めます。はい、実際、予見可能な将来のすべてのチャンク移動のデフォルトのターゲットになります (基本的な選択は、チャンクが最も多いシャードからチャンクが最も少ないシャードに移動することです)。各シャード プライマリは、一度に 1 つの移行にしか参加できないため、特に他の 2 つがビジー状態の場合、多数のチャンクを移動するには時間がかかります。

バランサーをオフにして忘れてしまったというケースを見たことがあります。他の 2 つのシャードのバランスが取れていることを考えると、ここではそうではないと思いますが、念のため....

mongos に接続してから次の操作を行うことで、バランサーのステータスを確認できます。

use config;
db.settings.find( { _id : "balancer" } )

「停止」が true に設定されていないことを確認してください。

ロックを保持しているもの、つまりその時点でバランスを取っているものを確認するには:

use config;
db.locks.find({ _id : "balancer" });

最後に、バランサーが実際に何をしているかを確認するには、そのマシンの mongos ログを調べます。バランサーは、行を接頭辞付きのログに出力します[Balancer]。ログ内のプライマリ mongod インスタンスのログで移行メッセージを探すこともできます。

編集: これはSERVER-7003が原因である可能性があります- 2.2.0 ポストリリースで見つかったバグです。ソース シャードから移行されている範囲 (チャンク) に削除がある場合、すべてのチャンクの移行が中止され、ターゲット シャードが常に移行に参加しているように見えるこの種の麻痺が発生することがあります。いいえ。

これは 2.2.1 で修正されているため、この問題を解決するにはアップグレードが推奨されます。ただし、以下のコメントにあるように、再起動するか、ターゲット シャードの悪い状態が解決されると解決できます。

于 2012-08-31T00:16:08.293 に答える