quarta-feira, 23 de dezembro de 2015

MongoDB - Sharding


Como forma de manter a alta performance na leitura e escrita de dados, deve ser adicionado mais máquinas para dividir os dados, isso é o que chamamos de Sharding. Isso proporciona um crescimento horizontal.

A diferença de crescimento horizontal e vertical é que no vertical ele irá exigir a máquinas cada vez mais potentes para poder atender a demanda, já a horizontal é vai utilizar várias maquinas para dividir o processamento. As maquinas utilizadas no crescimento horizontal não precisam ser de alta performance, ela possibilita o uso de máquinas de pequeno e médio porte.

O cluster no MongoDB, possui 3 serviços diferentes:
shards
config servers
router

Os shards que é onde ficam os dados, os config servers são os servidores de configuração do servidor e os routers que são os servidores que recebem as requisições e busca o shard correto para executar a ação. A aplicação sempre vai se conectar ao router, que usará os metadados que são só config servers para saber em qual shard ele deve se conectar.

Criando um cluster…

Primeiro (config server)
Precisamos criar uma pasta com o nome configdb, dentro de data que fica na pasta raiz. Essa pasta será usada para o nosso config server.
cd /
mkdir /data/configdb
mongod --configsvr --port 27010

O ideal é criamos mais de um config server, porque caso o nosso config caia o router ficar perdido. Então para evitarmos falhas, devemos criar outros config.

Segundo (router)
Agora iremos levantar o nosso router, passando a porta do nosso config server. Lembre-se de executar em uma nova aba/janela.
mongos --configdb localhost:27010 --port 27011

Terceiro (shards)
Criaremos pastas onde ficaram nossas shards, dentro também da pasta data.
cd /
mkdir /data/shard1 && mkdir /data/shard2 && mkdir /data/shard3

E iremos levantar cada shard no terminal. Cada shard precisa ser executado em aba/janela diferente.

cd/
mongod --port 27012 --dbpath /data/shard1

cd/
mongod --port 27013 --dbpath /data/shard2

cd/
mongod --port 27014 --dbpath /data/shard3

Agora precisamos registrar nossos Shards no nosso Router. Para isso devemos conectar ao Router:
mongo --port 27011 --host localhost

Depois registramos os shards, passando o ip e a porta:
sh.addShard(“localhost:27012”)
sh.addShard(“localhost:27013”)
sh.addShard(“localhost:27014”)

Feito isso, vamos especificar qual database iremos shardear com o comando
sh.enableSharding(“database”)

E agora iremos selecionar a collection, no primeiro parâmetro iremos passar o nome da database e da collection e como segundo parâmetro o campo que era irá quebrar para saber a faixa de dados que vai ficar em cada shard.
sh.shardCollection(“database.collection”, {_id: 1})
No exemplo assim, passamos a _id para ser dividido.

Agora quando formos fazer inserção de dados no nosso cluster, basta executar no nosso router.

Até a próxima ;)

0 comentários:

Postar um comentário