0

我有 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之间肯定有什么关系,现在该怎么办?

4

1 回答 1

0

最后,我发现 shard2 的 primary 丢失了一些数据,但 shard2 的副本集保留了完整的数据。我关闭了主副本并创建了一个新的副本集。现在一切都很好。

于 2013-08-25T13:43:57.990 回答