Mongo sharding没有删除源分片中的分片收集的数据
问题描述:
我有5个机器上安装了MongoDB 3.2.6,这些机器都构成由2个分片组成的分片群集(每个都是具有主 - 次仲裁器配置的副本集)。Mongo sharding没有删除源分片中的分片收集的数据
我也有一个非常大的集合(约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我看到的数量正在增加。
当我登录到主副本设置(我的复制品-1),我看到在我收集的是一些记录不降低虽然在我的复制品,2号为增加(预期)所以我想mongodb在迁移到第二个分片时不会从源分片中删除块。
有谁知道这是正常的,如果不是这是为什么发生?
编辑:实际上现在它开始在my-replica-1上减少,虽然它依然在mongos上指数增长(有时它会下降然后上升)。也许这是正常行为迁移大型集合时,我没有按文件here你正在观察一个有效的情况下知道
伊万
答
。 当文档从a
移动到b
时,它将被计数两次,只要a
收到确认重定位成功的确认。
在分片簇,db.collection.count()可导致不准确的 计数是否存在孤立文档或如果一个块的迁移 正在进行中。
要避免这些情况,请在分片群集上使用db.collection.aggregate()方法的$ group阶段 对文档进行求和。对于 例如,下面的操作计数文件集合中:
db.collection.aggregate(
[
{ $group: { _id: null, count: { $sum: 1 } } }
]
)