1

たった 1 つのサーバーに、何百万ものオブジェクトを含むコレクションがありました。構成サーバーと 2 つのシャード ノードをセットアップしました。そのうちの 1 つはそのコレクション ドキュメントを持っています。コレクションを追加してシャードにすると、すべて問題なく表示されました。ただし、コレクションのサイズを尋ね続けると、mongod がそのコレクションをシャーディングしているときに、何か奇妙なことが起こっていdb.activity_items.count()ます。数が減少しています。なんで?どこかでデータを失っていますか?

これは、問題を説明するためのコンソール出力です。

mongos> db.activity_items.count()
19107620
mongos> db.activity_items.count()
19107223
mongos> db.activity_items.count()
19106939
mongos> db.activity_items.count()
19106922
mongos> db.activity_items.count()
19027118

編集

db.activity_items.stats(); http://pastebin.com/85RqZmQMを実行すると。最初のシャード ノードのカウンターが減少し、2 番目のシャード ノードのカウンターが増加していないことがわかります。これにより、データが途方に暮れていると思います.?.

編集2

バランサーを止めました。データが失われなくなりましたが、古いデータは戻ってきませんでした..

mongos> db.activity_items.count()
15736936

編集3

私はそれについてバグを埋めました: https://jira.mongodb.org/browse/SERVER-6696

4

2 に答える 2

0

まず、ここでデータが失われているとは思わないことを言わせてください。問題は、count() コマンドがシャード環境でどのように機能しているかにある可能性がはるかに高いです。たとえば、反対の動作をするバグがありました。

https://jira.mongodb.org/browse/SERVER-3645

ここで起こっていることは、カウントが実際には元のシャードで正しく実行されているだけで、新しいシャードでは返されていない (またはゼロが返されていない) ことだと思います。シャード プライマリに直接接続し、そこでカウントを実行するとどうなりますか?

また、移行を追跡できるように sh.status() を実行します。

これが一時的なもので、進行中の移行が原因であるかどうかを確認するための実験として、バランサーを一時的に無効にしてみてください。

// connect to mongos
> use config
> db.settings.update( { _id: "balancer" }, { $set : { stopped: true } } , true );

進行中の移行が完了したら、もう一度カウントを試して、意味があるかどうかを確認します。新しいシャードを追加したため、両方ともドキュメントを常に追加/削除しています。バランスが取れて移行が停止するまで、カウントの偏差の直接的な原因を特定するのは困難ですが、バランス調整が完了したら正常に見えるかどうかは早い段階でわかります。

編集:コメントごとに-バージョンとOSにこれが再現可能かどうかを確認し、再現可能であればバグを報告して修正してください。

于 2012-08-01T23:11:34.323 に答える
0

https://jira.mongodb.org/browse/SERVER-6696を参照してください。この問題は「設計どおりに機能する」と考えています。

于 2012-08-16T07:47:04.867 に答える