Шардинг mongoDB


 https://docs.mongodb.com/manual/reference/method/#sharding

https://docs.mongodb.com/manual/tutorial/deploy-sharded-cluster-ranged-sharding/

Преимущества шардинга

  • При репликации все записи идут в главный узел.
  • Обработка запросов ложится на первичный узел.
  • Один набор копий (replica set) имеет ограничение в 12 узлов.
  • При работе с большим количеством данных, одна машина не может хранить все данные.
  • Вертикальное масштабирование слишком дорогое

Шардинг в MongoDB

Ни рисунке ниже представлена общая схема шардинга в MongoDB:

shardreplica

Разберем все элементы данной схемы:

  • Конфигурационный сервер
    Сервер, который хранит метаданные кластера. Эти данные содержат информацию о маппинге данных кластера на шарды (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 шард, а затем мигрируют на второй шард,