几天前我开始发现一个问题,即进入mongo的数据不再在群集中传播。即使分片键未更改,除了非常少量的数据之外的所有内容都将转到数据库的主分片。分片键是另一个文档字段的MD5总和,类似于mongo v2.4中的散列分片键,因此应该有足够的可变性来在三个分片上喷洒文档。我们目前正在运行2.0.5。
我在配置数据库中找不到任何可以指示文档仅转到主数据库的内容。我们每天创建一个新的集合,并在其中写入大约4000万个文档。我已经验证它们是分片的,并且平衡器正在从主要部分缓慢移动块,但速度不够快,无法跟上写入速率。
写入mongo的每个服务器都有自己的mongos实例,并且有几个mongos实例用于读取数据的进程。我们运行的总数有点超过25. mongos实例的数量是否会导致此问题?似乎我需要手动定义分片范围,但这对我来说似乎有问题。我想保持自动分片。在配置数据库中这些信息驻留在哪里?是否有可能看到mongos实例用于自动分片的范围是什么?
答案 0 :(得分:0)
请勿在使用前删除集合。
答案 1 :(得分:0)
根据我发现的内容,新创建的分片集合不会将任何块定向到主分片以外的分片。直到块被分割后才会将数据导向其他地方。对于大量插入Mongo,这可能会导致问题。总体积的增加可能会使系统无法正确分配数据,因为以前的集合能够正确地跨越三个分片。
解决方案是根据分片键的知识预分割集合。 How to define sharding range for each shard in Mongo?提供了有关如何正确执行此操作的信息。