首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mongodb不分片

Mongodb不分片
EN

Stack Overflow用户
提问于 2014-02-24 13:27:00
回答 1查看 3.9K关注 0票数 3

我们尝试在MongoDB2.4.9中跨3个副本集(rs1、rs2、rs3)共享一个大型集合。目前,所有数据都驻留在rs1上。

我们有3个配置服务器在运行,并启用了分片,使用:

代码语言:javascript
复制
sh.enableSharding("test")

然后我们选择了一个分片键并对一个集合进行了分片:

代码语言:javascript
复制
sh.shardCollection("test.fs.chunks", { files_id : 1 , n : 1 } )   

之后,我们添加了额外的分片:

代码语言:javascript
复制
sh.addShard( "rs2/mongo2:27017" )

sh.addShard( "rs3/mongo3:27017" )

但是,4天后,所有数据仍驻留在rs1上。查看配置,我们正在分片的数据库被列为"partitioned = true":

代码语言:javascript
复制
{  "_id" : "test",  "partitioned" : true,  "primary" : "rs1" }

然而,当我们执行db.fs.chunks.getShardDistribution()时,我们会看到一个错误,声明集合没有被分片:

代码语言:javascript
复制
mongos> db.fs.chunks.getShardDistribution()
Collection test.fs.chunks is not sharded.

然后,我们尝试重新执行shardCollection命令,并收到一条错误消息,指出该命令已被分片:

代码语言:javascript
复制
mongos> sh.shardCollection("test.fs.chunks", { files_id : 1 , n : 1 } )

"code" : 13449,

"ok" : 0,

"errmsg" : "exception: collection test.fs.chunks already sharded with 33463 chunks"

所有3个配置服务器均可正常运行。mongos日志包含一系列均衡器分布式锁获取/解锁消息,但没有其他值得注意的消息。

有没有人有任何建议,关于我们如何进一步解决这个问题,并获得一些分片发生?

谢谢

戴夫

EN

回答 1

Stack Overflow用户

发布于 2014-02-24 20:39:43

我在使用集合时遇到了类似的问题,但我使用以下命令修复了它:

http://docs.mongodb.org/manual/reference/command/splitChunk/

我百分之百确定这不是你应该做的,但它确实起作用了!

实际上,另一个想法是创建一个只包含一条记录的新集合,将其分片,然后将另一个集合中的所有记录插入其中。

我有一个集合,每一条记录都在一个块中。使用sh.status()找出哪些块是最大的。

然后使用:

代码语言:javascript
复制
db.adminCommand({split:<database>.<collection>,find:{<database>.<collection>._id:<any doc in the shard>}});

这将在中点处拆分块。有趣的是,Mongodb的分块过程做了一些进一步的拆分,但仍然需要一些重写来使块的大小合适。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21979544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档