MongoDB Sharding - Blog 4Linux
28 de junho de 2018 Alisson Machado 2796 Views
Sharding, no MongoDB, consiste uma forma para distribuir informações através de múltiplos servidores, dispondo de um grande cluster de dados.
O Recurso de Sharding é utilizando quando se trabalha com grandes datasets. Em certa semana, por exemplo, precisei configurar um cluster de mongodb com 3 máquinas guardando 3 terabytes de dados. Neste caso, trata-se de, Pré-Requisito, criar um cluster com sharding e replicação.
Mas, por que usar os dois recursos?
Porque a replicação garante a redundância dos seus dados. O sharding permite que você aumente o tamanho do seu dataset. No futuro, 3 terabytes podem não ser suficientes para armazenar todos os dados, sendo assim, bastará adicionar mais um servidor no sharding, desse modo o tamanho total de armazenamento aumentará.
Arquitetura do cluster.
Observe uma imagem da arquitetura de cluster.
Entenda a arquitetura.
No diagrama apresentado, temos a representação de 1 servidor rodando o serviço chamado MongoService, responsável por balancear a carga entre os 2 servidores, atrás dele, que estarão replicados. Em uma arquitetura ideal, seria interessante contar, pelo menos, com 2 servidores executando o MongoService, garantindo uma alta disponibilidade, possuindo também um proxy-loadbalancer na frente. Nessa arquitetura, foi colocado apenas um, pois o cliente disponibilizou somente 3 máquinas.
Atrás desse servidor com o MongoService, temos 2 servidores. Em cada um deles serão executados 2 serviços do MongoDB, de forma diferente. Um dos servidores armazenará os dados, será chamado de DataServer, o outro denominado ConfigServer manterá os metadados do cluster.
Uma arquitetura minima, viável, para criar um cluster de sharding, reune pelo menos 6 máquinas. A seguir uma imagem da documentação oficial do mongodb.
Na imagem acima observamos:
– 2 servidores MongoService.
– 2 ConfigServer em Réplica.
– 2 Servidores em Shard em réplica.
Bom… Agora chega de imagens e arquitetura, vamos por a mão na massa…
Observe a seguir os apontamentos do meu arquivo /etc/hosts. Compartilhei as notas, pois toda a configuração será feita através de nomes. Lembrando, esse arquivo deve ser copiado para todas as máquinas, permitindo que conversem através dos nomes.
Para fazer a instalação do mongodb, será necessário configurar o repositório e fazer a instalação dos pacotes, nas 3 máquinas, conforme as instruções abaixo.
Executados os comandos acima, devem existir 2 serviços rodando na máquina, um na porta 27017 e outro na porta 27019.
Veja que os serviços citados, são mostrados na saída do comando ss -ntpl.
Agora, faça a mesma coisa no mongodb2.
Criando a réplica dos dados.
Para criar a réplica dos dados em qualquer um dos servidores, você pode digitar as instruções abaixo:
Com os comandos apresentados, o próprio servidor foi adicionado ao replicaset rs0, criado anteriormente. Agora, para adicionar o segundo servidor execute as linhas abaixo:
Para validar que estão em replica, você pode acessar o console do segundo servidor e validar se está aparecendo como SECONDARY:
Na saída do comando mostrado verificamos, no console, que o servidor faz parte do rs0, está como SECONDARY.
Para fazer a réplica do configserver em qualquer um dos dois servidores, você pode executar as seguintes instruções dentro do console do mongodb.
No exemplo, o cliente do mongodb foi executado para acessar a porta 27019, responsável por fazer a replicação do configserver, sendo a réplica criada nesta.
Com todas as réplicas configuradas, chegou o momento de configurar o service.
Acesseo servidor mongoservice e execute o seguinte comando:
Esse comando iniciará um processo na porta 27017.
O mongoservice será o ponto de acesso para as réplicas configuradas no começo do artigo, este acesso será da seguinte maneira:
Note que agora o console está diferente, ao invés de ficar somente o sinal de maior ( > ), aparece mongos>, pois estamos acessando o service e não a base diretamente.
Para adicionar o nosso cluster de shard execute a linha:
A saída do comando mostra que o shard foi adicionado com sucesso.
No MongoService você pode adicionar quantos clusters de shard precisar.
Para criar um banco de dados dentro do seu cluster será necessário executar a instrução:
Você poderá, acessar o banco de dados, criar um documento e fazer uma busca, para certificar-se de que já funciona:
Veja que ao fazer o find do documento, é mostrado no log que o dado foi buscado dentro do servidor mongodb1.
Eu reiniciei o servidor primary, fazendo a mesma busca. Observe que a busca ocorreu no segundo servidor:
Ao finalizar é importante adicionar autenticação ao mongodb, uma vez que por padrão, o usuário é anônimo.