繁体   English   中英

在MongoDB中进行分片

[英]Sharding in MongoDB

我尝试在MongoDB中测试分片。 例如,我使用host1.com和host2.com而不是真实的服务器名称。

所以我在host1.com创建了配置服务器:

mongod --dbpath /path/to/configdb/ --configsvr

在同一台机器上启动mongos

mongos --configdb host1.com --port 27020

并在两台机器(host1.com和host2.com)上启动了mongod

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 我做错了什么?

默认的块大小为64MB,因此在分割发生之前您有增长的空间。 您可以事先自己拆分分片键范围,这样可以允许写入从一开始就转到多个分片。 有关详细信息,请参阅MongoDB Split Chunks文档

关于块大小和maxSize之间的区别:

maxSize将限制给定分片上的数据量。 到达平衡器时,将查看将块移动到尚未达到maxSize的分片。 块是一组文档,它们都属于分片键范围的一部分。 MongoDB平衡器将在块级别的分片之间移动数据以平衡。 当块接近maxSize值时,它将被拆分为2,这可能导致移动。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM