我正在尝试设置Sharding,所以我创建了:
以下是我的主服务器的sh.status
输出:
mongos> sh.status();
--- Sharding Status ---
sharding version: {
"_id" : 1,
"version" : 4,
"minCompatibleVersion" : 4,
"currentVersion" : 5,
"clusterId" : ObjectId("57b86fb87925691e5a11e35f")
}
shards:
{ "_id" : "shard0000", "host" : "192.168.1.3:27018" }
{ "_id" : "shard0001", "host" : "192.168.1.4:27018" }
databases:
{ "_id" : "admin", "partitioned" : false, "primary" : "config" }
{ "_id" : "shardDB", "partitioned" : true, "primary" : "shard0000" }
shardDB.user
shard key: { "name" : 1 }
chunks:
shard0000 1
{ "name" : { "$minKey" : 1 } } -->> { "name" : { "$maxKey" : 1 } } on : shard0000 Timestamp(1, 0)
所以我认为它有效,但我不确定它是否正常。
主机上的 shard0000
数据块192.168.1.3:27018
与user
主数据192.168.1.6:27020
上的用户数据具有相同的db.users.find()
数据,那样可以吗?< / p>
我认为重点是在不同的分片上有不同的数据,以减少主服务器的负载?
答案 0 :(得分:3)
维拉德,
这是一个生产系统吗?如果是,则应该有3个配置服务器,每个分片应该是一个副本集,每个副本至少有3个mongod守护进程。您当前的设置对于dev来说没问题,但不应该在PROD中部署。
Look at this document to see the architecture.
mongos是路由器,而不是主机。即使您始终应该从mongos查询系统,数据实际上也存在于分片服务器中。同样,mongos只是一个路由器,当您的应用程序访问群集时,它会将您的查询发送到正确的位置。
您目前只在一个分片中看到数据的原因是您还没有足够的数据来分配两个分片。随着您的数据量的增长,MongoDB将自动化#34;创建新的&#34;数据块&#34;并将它们移动到新的分片以保持群集平衡。
我还注意到您使用时间戳作为分片键。使用时间作为分片键通常是一个糟糕的选择有两个原因:
上面描述的问题只有在您的数据量和/或查询量增加时才会显示。