2

我正在尝试在我们的 mongoDB 数据库上实现分片,这是场景

我们有 1 台服务器正在运行配置服务器

我们有 2 台服务器运行名为 node1 和 node2 的 mongod 实例

我们有 1 台服务器运行 mongos

我已使用以下命令将服务器 node1 和 node2 添加为 mongos shell 中的分片服务器

db.runCommand( { addhard : "serverhostname[:port]" } );

后来我在 node1 中创建了数据库,并从 Mongos 为该数据库启用了分片

现在我们有 2 个分片服务器,根据 MongoDB 文档,mongos 应该放置一些创建节点 1(数据库实际驻留的位置)的集合和节点 2 上的一些集合。

我从 mongos 创建了 300 个集合,但所有集合仍然只发送到一台服务器上面提到的支持中有什么问题

注意: - 由于我无法升级应用程序层,因此我无法在集合级别进行分片,因此我有一个脚本可以为某些要求动态创建多个集合。

请就我们如何在数据库级别进行分片提供您的建议,以便集合在所有分片服务器之间平均分配。

我正在寻找一些解决方案,例如

如果我自动创建 300 个集合,mongos 应该在两个分片服务器的每一个中创建大约 150 或 100 个集合。

提前感谢您介入并帮助我解决此问题。

4

1 回答 1

2

除非您在它们上启用分片然后添加数据,否则集合不会自动分布在分片上。然后,这些分片集合将在两个分片上都有数据(分成块并自动平衡)。

直到您实际对集合运行命令,并且其中有足够的数据以便它们开始拆分和迁移块,然后它们都将保持在原来的位置。

那是因为每个数据库都有一个主分片,它不会改变。这是最初创建数据库的地方,也是所有非分片数据所在的地方。如果添加另一个数据库,mongos 应该在第二个分片上创建它,并为每个创建的数据库交替(如果超过两个,则为循环)。在每种情况下,在您对集合进行分片之前,它将仅保留在该数据库的主分片上。

于 2012-08-30T17:46:12.827 回答