我尝试在 MongoDB 中测试分片。例如,我使用 host1.com 和 host2.com 代替真实的服务器名称。
所以我在 host1.com 创建了配置服务器:
mongod --dbpath /path/to/configdb/ --configsvr
mongos
在同一台机器上启动:
mongos --configdb host1.com --port 27020
并从mongod
两台机器(host1.com 和 host2.com)开始:
mongod --dbpath /path/to/test_shard_db/ --shardsvr
我添加了分片,使用分片键 {'name': 1} 为数据库test
和集合启用分片test
(集合只有此字段并_id
用于测试),如教程中所述。但在所有这些操作之后,我的所有数据都只写入一个分片,这是数据库的主要分片。
这是配置:
分片状态:
mongos> db.printShardingStatus()
--- Sharding Status ---
sharding version: { "_id" : 1, "version" : 3 }
shards:
{ "_id" : "shard0000", "host" : "host1.com:27018", "maxSize" : NumberLong(1) }
{ "_id" : "shard0001", "host" : "host2.com:27018", "maxSize" : NumberLong(10) }
databases:
...
{ "_id" : "test", "partitioned" : true, "primary" : "shard0000" }
test.test chunks:
shard0001 1
{ "name" : { $minKey : 1 } } -->> { "name" : { $maxKey : 1 } } on : shard0001 Timestamp(1000, 0)
收藏统计:
mongos> db.printCollectionStats()
test
{
"sharded" : false,
"primary" : "shard0000",
"size" : 203535788,
...
}
平衡器状态:
mongos> sh.isBalancerRunning()
true
那么,为什么我添加了超过 1 兆字节的数据,但集合中的所有数据都只驻留在一个分片中呢?为什么要给db.printCollectionStats()
我看那个test
数据库"sharded" : false
。我做错了什么?