Пытаюсь протестировать шардинг в 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
Я добавил сегменты, включил сегментирование для базы данных test
и коллекцию test
с ключом сегмента {'name': 1} (в коллекции есть только это поле и _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
. Что я сделал не так?
"primary" : "shard0000"
иtest.test chunks: shard0001 1
для вывода состояния, подтверждает, что первичный находится на 0000, а единственный осколок - на 0001. Другой метод двойной проверки - убедиться, что есть индекс над полемname
: если ваша коллекция пуста, это создается автоматически. Если, однако, он не пуст, сегментирование не произойдет. - person Ori Dar   schedule 04.04.2013