Mongo分片不删除源分片

时间:2016-06-09 14:55:33

标签: mongodb database-replication sharding

我在5台机器上安装了MongoDB 3.2.6,它们都形成了由2个分片组成的分片群集(每个分片都是带有主要辅助仲裁器配置的副本集)。

我还有一个包含非常大的集合(约50M记录,200GB)的数据库,它通过mongos导入,将其与其他集合一起放入主分片。

我在该集合上生成了散列ID,这将是我的分片键。

之后,我用以下方式对收集进行了分类:

> use admin
> db.runCommand( { enablesharding : "my-database" } )

> use my-database
> sh.shardCollection("my-database.my-collection", { "_id": "hashed" } )

Comand回复:

{ "collectionsharded" : "my-database.my-collection", "ok" : 1 }

它实际上开始碎片了。分片的状态如下所示:

> db.my-collection.getShardingDistribution()
Totals
data : 88.33GiB docs : 45898841 chunks : 2825
Shard my-replica-1 contains 99.89% data, 99.88% docs in cluster, avg obj size on shard : 2KiB
Shard my-replica-2 contains 0.1% data, 0.11% docs in cluster, avg   obj size on shard : 2KiB()

这一切看起来还不错,但问题是,当我通过 mongos 计算 my-collection 时,我看到数字正在增加。

当我登录主副本集(my-replica-1)时,我发现my-collection中的记录数量不是减少,尽管my-replica-2中的数字是增加(这是预期的)所以我想mongodb在迁移到第二个分片时不会从源分片中删除块。

有谁知道这是正常的,如果不是为什么会发生?

编辑:实际上现在它开始在my-replica-1上开始减少了,虽然它在依靠mongos时仍然会增长(有时它会下降然后上升)。也许这是迁移大型集合时的正常行为,我不知道

伊万

1 个答案:

答案 0 :(得分:1)

根据文件here,您正在观察有效情况。 当文档从b移至a时,只要db.collection.aggregate( [ { $group: { _id: null, count: { $sum: 1 } } } ] ) 收到重定位成功的确认,就会计算两倍。

  

在分片群集上,db.collection.count()可以生成   如果存在孤立文档或块迁移,则计数不准确   正在进行中。

     

要避免这些情况,请在分片群集上使用$ group阶段   db.collection.aggregate()方法的$ sum文件。对于   例如,以下操作计算集合中的文档:

enum