https://docs.mongodb.com/manual/reference/method/#sharding
https://docs.mongodb.com/manual/tutorial/deploy-sharded-cluster-ranged-sharding/
Преимущества шардинга
- При репликации все записи идут в главный узел.
- Обработка запросов ложится на первичный узел.
- Один набор копий (replica set) имеет ограничение в 12 узлов.
- При работе с большим количеством данных, одна машина не может хранить все данные.
- Вертикальное масштабирование слишком дорогое
Шардинг в MongoDB
Ни рисунке ниже представлена общая схема шардинга в MongoDB:

Разберем все элементы данной схемы:
- Конфигурационный сервер
Сервер, который хранит метаданные кластера. Эти данные содержат информацию о маппинге данных кластера на шарды (shards).
- Шарды (Shards)
Используются для хранения данных. Обеспечивает высокую производительность. В промышленной разработке, каждый шард представляет собой отдельную replica set.
ориг
mkdir ~/mongoSharde
mkdir ~/mongoSharde/instance1
mkdir ~/mongoSharde/instance2
mkdir ~/mongoSharde/config
mongod --shardsvr --dbpath ~/mongoSharde/instance1 --port 27000
mongod --shardsvr --dbpath ~/mongoSharde/instance2 --port 27001
mongod --configsvr --replSet rs01 --dbpath ~/mongoSharde/config --port 27002
mongo --port 27002
rs.initiate();
rs.status();
exit
mongos --configdb rs01/127.0.01:27002 --port 27100
mongo --port 27100
sh.addShard("127.0.0.1:27000")
sh.addShard("127.0.0.1:27001")
db.printShardingStatus()
use admin
sh.enableSharding("bank")
use bank
db.tickets.insert({name: "Max", amount: Math.random()*100})
db.tickets.insert({name: "Max", amount: 0.222})
for (var i=0; i<21000; i++) { db.tickets.insert({name: "Max", amount: Math.random()*100}) }
db.tickets.ensureIndex({amount: 1})
db.tickets.stats()
use admin
db.runCommand({shardCollection: "bank.tickets", key: {amount: 1}})
sh.status(true)
db.printShardingStatus()
Как мы увидели, сначала чанки сохраняются на primary шард, а затем мигрируют на второй шард,