我有3个Mongos实例和6个Mongod实例。有2个自动分片碎片,每个碎片有3个副本集。
今天我发现我在系统上找不到一些数据,但我可以在RockMongo上找到它。我尝试在mongos上找到它,但没有找到任何东西。但是count()的结果告诉我数据仍然存在。
mongos> db.video.find({ _id: ObjectId('51a0e7625c8e87cc6a000027') })
mongos> db.video.count({ _id: ObjectId('51a0e7625c8e87cc6a000027') })
1
mongos> db.runCommand({ count: "video", query: { _id: ObjectId('51a0e7625c8e87cc6a000027') } })
{ "shards" : { "s1" : 0, "s2" : 1 }, "n" : 1, "ok" : 1 }
我连接到shard2并找到记录,但很多字段都丢失了。与此同时,RockMongo的记录显示了所有领域。
shard2:PRIMARY> db.video.find({ _id: ObjectId('51a0e7625c8e87cc6a000027') })
{ "_id" : ObjectId("51a0e7625c8e87cc6a000027"), "comment" : 78, "like" : 142, "scores" : { "total" : 37042292210.73388, "popular" : 72980.66026813157, "total_play" : 8737, "week_play" : 71 }, "views" : 8739 }
然后我发现RockMongo中显示的数据计数是24w +,但是通过在mongos上运行db.xx.count()返回的结果是23w +。一些数据在Mongos上丢失了!
我试过转储集合并恢复到另一台服务器,一切正常。在mongos和mongod之间必定有一些东西,我现在该怎么办?
答案 0 :(得分:0)
最后,我发现shard2的主要部分丢失了一些数据,但是shard2的副本集保留了完整的数据。我关闭primary并创建一个新的副本集。一切都很好。