MongoDB分片只处理一个实例

时间:2015-03-03 10:12:22

标签: mongodb sharding

我在localhost上创建了三个mongodb实例,其中包含不同的端口,如

mongod.exe --config C:\MongoDB2.6\mongod.cfg

mongod.exe --config D:\MongoDB2.6\mongodinst1.cfg

mongod.exe --config E:\MongoDB2.6\mongodinst2.cfg

这3个成功实例化(在端口2021,2022,2023上运行)。 现在我使用mongos命令进行这三个实例的聚类,我的命令就像这样

mongos.exe --configdb 127.0.0.1:2021,127.0.0.1:2022,127.0.0.1:2023

它正在成功同步三个mongodb实例。现在我连接到端口27017上的mongos实例并创建分片

 sh.addShard("127.0.0.1:2021")
 sh.addShard("127.0.0.1:2022")
 sh.addShard("127.0.0.1:2023")

这个过程也很成功。在mongos实例(27017)之后,我创建了一个db(myshard)和集合(mycoll)。

现在我将数据插入此集合中:

db.myshard.insert([
...
{
   title: 'NoSQL Database', 
   description: 'NoSQL database doesn',
   by: 'tutorials point',
   url: 'http://www.tutorialspoint.com',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 20, 
   comments: [  
      {
         user:'user1',
         message: 'My first comment',
         dateCreated: new Date(2013,11,10,2,35),
         like: 0 
      }
   ]
},
...
])

现在它在我在端口2021上运行的其中一个实例上反映了这些值,但在其他实例上没有反映这些值,如2022和2023端口。

我是mongodb的新手而不理解为什么会这样发生。有人可以解释一下这种行为吗?

1 个答案:

答案 0 :(得分:3)

基本上,这里发生的是分片群集根据您的分片键决定使用哪个分片(默认为_id)。您不一定要提前知道将使用哪个分片以及文档的存储位置。

这个“问题”由mongos和配置服务器处理。配置服务器包含有关群集的元信息,例如,数据位于分片群集中的位置。

为了利用分片机制,所有查询都应在mongos shell 上执行。这是您可以用来从任何分片中提取任何数据的唯一方法。 mongos shell将根据配置服务器包含的元信息查询数据库和集合。