0

いくつかのシャードで構成される小さなクラスターがあり、すべてのシャードは 2 つの実際のノードと 1 つの ARBITER のレプリカ セットです。コレクションでシャーディングが有効になっています。たとえば、generator_v1_food とします。

コレクションを更新するすべてのプログラムを停止しました(これらのプログラムでは、操作のみ があり、まったくありません)。すると、このように収集回数が返ってきます(2~3秒間隔)。バランサーも外しました。ログ (私が操作したシャード) の最後の行はすべてレプリカ セットに関するものでした。upsertfindremove

mongos> db.generator_v1_food.find().count()
28279890
mongos> db.generator_v1_food.find().count()
28278067
mongos> db.generator_v1_food.find().count()
28278008
... 

舞台裏で何が起こっているのですか?どんな指針も素晴らしいでしょう。

4

1 に答える 1

1

見積もり:

バランサーの状態を「オフ」に設定したからといって、まだ実行されていないわけではなく、最後に実行された moveChunk からのクリーンアップが完了しています。

最後の moveChunk.commit イベントがあったときの変更ログ コレクションの構成 DB を確認できるはずです。これは、moveChunk プロセスが、新しい (ターゲット) シャードに移動される一部のチャンクからドキュメントにコミットされたときです。しかしその後、古いシャードは、もはやそれに属していないドキュメントを非同期的に削除する必要があります。「カウント」はメタデータから取得され、「実際に」存在するドキュメントの数を実際に照会するわけではないため、バランシング ラウンド中に「処理中」のドキュメント (または、適切にクリーンアップされていないか、バランスが取り消されたもの) を 2 倍にカウントします。試み)。

アシャ

于 2013-09-06T03:04:50.660 に答える