https://github.com/gabriel-dev-c/cluster-mongodb
Repositório criado para documentar o processo de criação de um cluster de 4 nós no MongoDB via Docker Desktop.
https://github.com/gabriel-dev-c/cluster-mongodb
cluster docker docker-container docker-image mongodb mongodbcompass server
Last synced: about 1 month ago
JSON representation
Repositório criado para documentar o processo de criação de um cluster de 4 nós no MongoDB via Docker Desktop.
- Host: GitHub
- URL: https://github.com/gabriel-dev-c/cluster-mongodb
- Owner: Gabriel-Dev-C
- Created: 2025-03-29T14:44:22.000Z (about 1 year ago)
- Default Branch: master
- Last Pushed: 2025-03-29T15:25:53.000Z (about 1 year ago)
- Last Synced: 2025-03-29T16:27:57.370Z (about 1 year ago)
- Topics: cluster, docker, docker-container, docker-image, mongodb, mongodbcompass, server
- Homepage:
- Size: 35.2 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Cluster MongoDB
> Repositório criado para documentar o processo de criação de um cluster de 4 nós no MongoDB utilizando o Docker Container.
Nesse arquivo irei listar e documentar o processo completo realizado em vídeo para que seja possível criar um sistema Replica Set funcional dentro do MongoDB.
## Ambiente de trabalho
Primeiro criamos um ambiente de trabalho favorável para a execução do projeto. Para isso devemos baixar e configurar o Docker Desktop e instalar o MongoDb Compass, para que seja mais fácil visualizar o processo.
## Docker Desktop
Já baixado e configurado, entramos no Docker e baixamos a imagem do MongoDB. Para isso, abrimos um terminal e rodamos o código:
``` docker pull mongodb/mongodb-community-server:latest ```
O próximo passo é criar uma rede Docker. Essa rede, chamada de "mongoCluster" permitirá que cada um dos contêineres em execução nessa rede vejam uns aos outros. Para criar uma rede, execute o comando:
``` docker network create mongoCluster ```
Com imagem baixada e network criado, podemos instânciar nossos contêiners, e para isso usamos o comando:
``` docker run -d --rm -p 27017:27017 --name mongo10 --network mongoCluster mongodb/mongodb-community-server:latest --replSet myReplicaSet --bind_ip localhost,mongo10 ```
Com esse comando criamos o primeiro contêiner na porta host 27017 com o nome "mongo10". Repetimos esse mesmo comando para os próximos 3 contêiners alterando apenas esses dois detalhes mencionados. Ficando assim:
``` docker run -d --rm -p 27018:27017 --name mongo20 --network mongoCluster mongodb/mongodb-community-server:latest --replSet myReplicaSet --bind_ip localhost,mongo20 ```
Terceiro contêiner:
``` docker run -d --rm -p 27019:27017 --name mongo30 --network mongoCluster mongodb/mongodb-community-server:latest --replSet myReplicaSet --bind_ip localhost,mongo30 ```
Quarto e último contêiner:
``` docker run -d --rm -p 27020:27017 --name mongo40 --network mongoCluster mongodb/mongodb-community-server:latest --replSet myReplicaSet --bind_ip localhost,mongo40 ```
O próximo passo é criar o conjunto de réplicas real com os quatro membros. Para isso utilizamos o comando:
``` docker exec -it mongo10 mongosh ```
Após isso, salvamos a string "Connection To" em um bloco de notas para que voce possa utilizar depois, na string de conexão do MongoDB Compass:
``` mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.3.8 ```
Verificamos se o container docker conectado está executando, com o comando:
``` db.runCommand ({hello:1}) ```
Agora, precisamos inicializar o nosso Replica Set para que seja feita a criação dos nós entre cada um dos contêiners criados. Para isso, usamos:
``` rs.initiate ({ _id: "myReplicaSet", members:[{_id:0, host: "mongo10"}, {_id:1, host: "mongo20"}, {_id:2, host: "mongo30"}, {_id:3, host: "mongo40"}]}) ```
Agora podemos sair do Contâiner Shell usando o comando:
``` exit ```
Para verificar se o conjunto de réplicas está em execução, podemos utilizar o comando:
``` docker exec -it mongo10 mongosh --eval "rs.status()" ```
## MongoDB Compass
Agora, dentro do MongoDB Compass, adicionamos uma nova conexão e inserimos a string anteriormente salva, assim iremos criar uma conexão direta com o nó primário do nosso Cluster.
``` mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.3.8 ```
Dentro do mongosh, podemos ver qual nó estamos conectados usando o comando:
``` rs.isMaster().primary ```
Agora podemos inserir dados através do nó primário usando o sistema corporativo:
```
use CorporeSystem
db.cliente.insertOne({codigo:1, nome: "Ana Maria"});
db.cliente.insertOne({codigo:2, nome: "Maria Jose"});
db.cliente.insertOne({codigo:3, nome: "Jose Silva"});
db.cliente.insertOne({codigo:4, nome: "Luis Souza"});
db.cliente.insertOne({codigo:5, nome: "Fernanda Silva"});
db.cliente.find()
```
Para verificação se o conjunto de réplicas está funcionando, iremos parar o contêiner primário com docker stop e tentar ler do seu banco de dados novamente:
``` docker stop mongo10 ```
Verificamos novamente o estado do Cluster:
``` docker exec -it mongo20 mongosh --eval "rs.status()" ```
Se tentarmos dar um novo insert na mesma seção aberta anteriormente, com esse comando:
``` db.cliente.insertOne({codigo:6, nome: "Teresa Maria"}); ```
irá dar um erro.
Para corrigir, abrimos outra conexão com a porta do Cluster primário, de acordo com o que o MongoDB elegeu:
``` mongodb://127.0.0.1:27018/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.3.8 ```
Usaremos o banco de dados CorporeSystem e faremos a consulta de um registro:
```
use CorporeSystem
db.cliente.findOne()
```
E então faremos uma nova inserção de dados para verificar se o cluster continuou ativo:
``` db.cliente.insertOne({codigo:7, nome: "Joao Cardoso"}); ```
Agora podemos voltar novamente o nó "mongo10" para reestabelecer uma conexão:
``` docker run -d --rm -p 27017:27017 --name mongo10 --network mongoCluster mongodb/mongodb-community-server:latest --replSet myReplicaSet --bind_ip localhost,mongo10 ```
E por fim podemos verificar novamente o estado atual do nosso Cluster:
``` docker exec -it mongo20 mongosh --eval "rs.status()" ```
Confirmando assim que o Cluster se manteve ativo mesmo com a queda do servidor primário.