Uma das minhas recentes atividades foi treinar a configuração de um replicaset para fins de estudo, portanto, estou utilizando meu sistema operacional Windows, o que resulta em algum grau de dificuldade, tendo em vista que o SO do LINUX é mais comum para trabalhar com bancos que exigem alto desempenho e escalabilidade, principalmente MongoDB.
Vamos começar por onde eu tive um pouco mais de dificuldade: Entendendo a importância da keyfile, e de controle de acesso ao nosso banco.
Nós podemos fazer um implantação de replicaset com controle de acesso desativado, mas isso interfere diretamente na segurança, isso porque o uso de um keyfile é altamente recomendado em um replicaset no mongoDB, e abaixo, trago as razões pelo qual devemos utilizar uma keyfile.
Segurança: O keyfile garante que apenas membros autorizados possam se conectar ao replicaset e acessar seus dados. Sem um keyfile, um invasor pode se conectar ao replicaset e manipulá-los.
Autenticidade: Garante que os membros do replicaset sejam autenticados corretamente.
Confiabilidade: O keyfile ajuda a garantir que o replicaset funcione de maneira confiável e consistente.
Então, começaremos com a criação de uma keyfile. Bom, no meu caso, precisei fazer o download do openssl, e na sequência a criação da keyfile, seguindo o passo a passo do quadro 1.
Após a criação do nosso keyfile, vamos para as configurações dos nossos nós. Nossa instância do standalone já está rodando com a porta padrão 27017, então, vamos para os próximos. Abaixo, as características dos nossos nós:
1) Criação dos nós e das pastas de ambos os nós, com database file, logfile, configuration file. Entre no prompt de comando (como super usuário).
mkdir c:\data1\config c:\data1\db c:\data1\log
mkdir c:\data2\config c:\data2\db c:\data2\log
2) Configuração do nosso arquivo do primeiro nó
Na pasta do mongod, dentro da pasta bin, localizamos o arquivo TXT do mongo.conf, esse arquivo pode ser copiado e colado nas pastas do nó1 e nó2. Na figura 1, o exemplo do mongo.conf como standalone.
Antes de prosseguir para o passo 2, é importante entender a relevância do arquivo mongo.conf na configuração e execução do MongoDB, especialmente em ambientes de produção. O mongo.conf é um arquivo de configuração de texto que contém diversas opções de configuração do servidor, como o diretório de dados, o nome do servidor e o número da porta. Essas opções podem ser personalizadas de acordo com as necessidades específicas do servidor. As alterações serão feitasda seguinte maneira, a edição dos arquivos de configuração de cada nó (lembrando de copiar o arquivo mongo.conf para todos os nós que foram criados acima).
Figura 1 - Configuração mongo.conf
Pontos a serem anotados:
1) A pasta do storage deve estar direcionada a um arquivo db0 (podemos usar o mesmo processo de criação da pasta1 e pasta2, e transferir o arquivo mongod.cfg para o config do db0).
2) A porta também é alterada a cada replica criado (como no exemplo da figura 2)
3) A pasta de log também foi criada com o comando do passo 1 anterior. E deve ser inserida no path do systemlog.
4) A inclusão de authorization: enabled no security e do keyfile (que é uma ferramenta de segurança).
5) Por fim, o nome do replicaset.
Figura 2 - Configuração mongo.conf
Perfeito, arquivos criados, devidamente configurados, na figura 2, mais um exemplo do nó2, para fixar as alterações que são recomendadas:
Na sequência, vamos ao prompt de comando, como administrador, para iniciar nosso mongo.
cd C:\Program Files\MongoDB\Server\6.0\bin
mongod --dbpath C:\data0\ -port 27017 --replSet "testers0”
mongod --dbpath C:\data1\ -port 27018 --replSet "testers0”
mongod --dbpath C:\data2\ -port 27019 --replSet "testers0”
Após acessar os seus nós através do prompt, vamos abrir o mongoshell e iniciar a nossa máquina:
URI DE COMANDO: mongodb://localhost/
Com os comandos rodando, vamos ao mongoshell, conectamos com o nosso localhost, e damos o initiate.
Na sequência, vamos conectar nossos nós, com o rs.add():
rs.add({_id:1, host: “localhost:27018”}
rs.add({_id:2, host: “localhost:27019”}
Para incluir novos nós, ou um árbitro é necessário seguir o mesmo passo a passo acima.
Nesse caso, criei mais um nó, e um árbitro. A seguir, os próximos comandos feitos para mudanças no meu replicaset, serão feitos no próprio MongoShell.
COMANDOS DO REPLICASET
rs.isMaster(): Com este comando conseguimos ver quantos nós, e quantos árbitros possuímos:
rs.remove(): Faz a exclusão de um nó. Fiz um rs.remove(“localhost:27021”), intencionalmente para apagar o árbitro, e transformar um nó em nó Hidden (usado como secundário que não é visível para a maioria das operações e é usado par fins de backup e recuperação)
rs.isMaster() para mostrar como o árbitro não existe mais:
Transformando um nó em Hidden:
Transformando meu membro 3 em hidden
rs.conf(): Podemos obter informações específicas dos nossos nós, como prioridade, e poder de voto. No caso dos Hidden, pode-se observar o poder de voto é 0, e que Hidden é TRUE.
rs.status(): Retorna o status do conjunto de réplicas do ponto de vista do membro em que o método é executado.
rs.reconfig(): Reconfigura um conjunto de réplicas existente, substituindo a configuração do conjunto de réplicas existente. Para executar o método, você deve se conectar ao primário do conjunto de réplicas.
E então? Será que com esse passo a passo fica mais fácil para você estudar e praticar a implantação de um replica set na sua máquina?
Recomendo que leia este artigo juntamente com o último publicado, Replicaset e Backup, pois ambos são necessários.
Ao longo do texto, é explicado os tipos de nós e sua importância para proteger e garantir a disponibilidade do banco de dados. Todas as informações sobre os comandos podem ser consultadas na documentação do MongoDB.
Todas as figuras e quadros foram feitas pela autora.