MongoDB 分片仅在一个实例上工作
MongoDB sharding working on only one instace
我在本地主机上用不同的端口创建了三个 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) 和 collection(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 的新手,不明白为什么会这样。有人可以解释这种行为吗?
基本上这里发生的事情是分片集群根据您的分片键(默认为 _id
)决定使用哪个分片。您不一定提前知道将使用哪个分片以及文档将存储在何处。
这个 "issue" 由 mongos 和配置服务器处理。配置服务器保存有关集群的元信息,例如,数据在分片集群中的位置。
为了利用分片机制,您的所有查询都应在 mongos
shell 上执行。这是您可以用来从您的任何分片中提取任何数据的唯一方法。 mongos shell 将根据您的配置服务器包含的元信息查询您的数据库和集合。
我在本地主机上用不同的端口创建了三个 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) 和 collection(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 的新手,不明白为什么会这样。有人可以解释这种行为吗?
基本上这里发生的事情是分片集群根据您的分片键(默认为 _id
)决定使用哪个分片。您不一定提前知道将使用哪个分片以及文档将存储在何处。
这个 "issue" 由 mongos 和配置服务器处理。配置服务器保存有关集群的元信息,例如,数据在分片集群中的位置。
为了利用分片机制,您的所有查询都应在 mongos
shell 上执行。这是您可以用来从您的任何分片中提取任何数据的唯一方法。 mongos shell 将根据您的配置服务器包含的元信息查询您的数据库和集合。