Este código fornece um starter para se trabalhar com sharding no MongoDB, siga o passo a passo abaixo:
- Configurando o Servidor
- Criando o Shard 1
- Criando o Shard 2
- Criando o Mongos Router
- Adicionando o Sharding e Dados
Daniel Lopes Ferreira |
Gisela Miranda Difin |
Vítor Kehl Matter |
♦️ ATENÇÃO: Se você não quiser preservar nenhuma imagem no docker rodando atualmente, acesse como superuser, pare e exclua todos os atuais containers com os seguinte comandos:
sudo su
docker stop $(docker ps -a -q) && docker rm $(docker ps -a -q) && docker volume prune
- Iniciar instancia que será config server com replicaset
docker-compose -f config-server/docker-compose.yaml up -d
-
Conectar ao config server
OBS: Nesta etapa, deve-se utilizar o IP da sua máquina (basta rodar
ipconfig
e verificar o IPv4 Address)
mongo mongodb://192.168.100.52:40001
-
Iniciar o replica set do config server
OBS: Lembre de modificar o IP para o seu local
rs.status()
rs.initiate( {
_id: "cfgrs",
configsvr: true,
members: [
{ _id : 0, host : "192.168.100.52:40001" },
{ _id : 1, host : "192.168.100.52:40002" },
{ _id : 2, host : "192.168.100.52:40003" }
]
}
)
rs.status()
- Para iniciar instância que será shard1 com replicaset, rode o sequinte comando:
docker-compose -f shard1/docker-compose.yaml up -d
- Conectar ao shard1 server
mongo mongodb://192.168.100.52:50001
- Iniciar o replica set do shard1 server
rs.status()
rs.initiate(
{
_id: "shard1rs",
members: [
{ _id : 0, host : "192.168.100.52:50001" },
{ _id : 1, host : "192.168.100.52:50002" },
{ _id : 2, host : "192.168.100.52:50003" }
]
}
)
rs.status()
- Para iniciar instância que será shard1 com replicaset, rode o sequinte comando:
docker-compose -f shard2/docker-compose.yaml up -d
- Conectar ao shard2 server
mongo mongodb://192.168.100.52:50004
- Iniciar o replica set do shard2 server
rs.status()
rs.initiate(
{
_id: "shard2rs",
members: [
{ _id : 0, host : "192.168.100.52:50004" },
{ _id : 1, host : "192.168.100.52:50005" },
{ _id : 2, host : "192.168.100.52:50006" }
]
}
)
rs.status()
OBS: Antes de iniciar o container, acesse o arquivo yaml e modifique o IP para o seu local
- Iniciar instância que será Mongos Router
docker-compose -f mongos/docker-compose.yaml up -d
- Conectar ao mongos
mongo mongodb://192.168.100.52:60000
- Adicionar shard1 e shard2 ao cluster
sh.status()
sh.addShard("shard1rs/192.168.100.52:50001,192.168.100.52:50002,192.168.100.52:50003")
sh.status()
sh.addShard("shard2rs/192.168.100.52:50004,192.168.100.52:50005,192.168.100.52:50006")
sh.status()
Usado como nome do banco de dados "development" para o exemplo
-
Utilizar o database "development"
OBS: Não é necessário rodar um comando para criar a collection, basta inserir dentro dela.
use development
-
Já conectado ao Mongos Router, habilitar o sharding para a database:
OBS: Qualquer coleção que não tiver sharding habilitada, irá para o primary shard.
sh.enableSharding("development")
- Habilitar shard para collection e definir shard key:
sh.shardCollection("development.movies", { title: "hashed" } )
- Importar dataset movies.json na collection
mongoimport --host 192.168.100.52:60000 --jsonArray --db development --collection movies --file datasets/movies.json
- Rodar comando para verificar distribuição dos dados
use development
db.movies.getShardDistribution()