Área do cliente

Como ativar e configurar um Replica Set no seu servidor com MongoDB

Como configurar Mongo DB em Replicaset

Quando se trabalha com alto volume de dados, uma das maiores preocupações é na possibilidade de algum problema, ou na armazenagem ou na transferência, causar a perda deles. Por isso, é necessário montar um sistema com a redundância em mente. Ou seja, os servidores precisam realizar cópias do arquivo principal, o qual sempre estará em comunicação com as partes replicantes. No caso em que o dado principal não estiver disponível, a cópia pode ser usada, garantindo a integridade do que é armazenado.

De fato, há diversas variantes que os Data Centers precisam se atentar, como software, hardware, questões de rede elétrica, temperatura da sala dos servidores e assim por diante. Porém o passo primordial é conseguir fazer com que o processo de replicação de dados esteja efetivamente operacional no sistema da empresa. Por isso, montamos um tutorial de como você pode configurar este mecanismo utilizando o software open source MongoDB.

Tutorial: Configurando o seu Replica Set

Em termos técnicos, vamos ensinar como converter uma instância Standalone em Replica Set, mantendo dois Nodes: um principal e um secundário. Meus servidores já estão com o MongoDB instalado e o principal já possui alguns Databases (dbs) criados. Focaremos em converter o MongoDB principal em Replica Set e em adicionar o Node secundário na replicação.

Para isso, temos dois servidores que vamos chamar de mongodb01 (Primário) e mongodb02 (Secundário).

Versão do sistema operacional: CentOS 8

Versão do MongoDB: 5.0.8

Primeiro passo é criar uma chave no servidor primário e compartilhar com o secundário. 

1 

openssl rand -base64 756 > /home/mongodb/keyFile/mongo-key 

2 

chmod 400 /home/mongodb/keyFile/mongo-key 

3 

scp /home/mongodb/keyFile/mongo-key root@xxx.xxx.xx.x:/home/mongodb/keyFile/

Lembrando que o diretório no qual será criada a chave deve ser feito previamente, tanto no servidor principal, quanto no secundário. 

mkdir -p /home/mongodb/keyFile/

Após isso, precisamos colocar a chave nos arquivos de configuração do MongoDB primário e secundário. 

Abaixo o arquivo de configuração que estou utilizando: 

# mongod.conf 
# for documentation of all options, see: 
# http://docs.mongodb.org/manual/reference/configuration-options/ 
# where to write logging data. 
systemLog: 
destination: file 
logAppend: true 
path: /var/log/mongodb/mongod.log 
# Where and how to store data. 
storage: 
dbPath: /var/lib/mongo 
journal: 
enabled: true 
# engine: 
# wiredTiger: 
# how the process runs 
processManagement: 
fork: true # fork and run in background 
pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile 
timeZoneInfo: /usr/share/zoneinfo 
# network interfaces 
net: 
port: 27017 
bindIp: 127.0.0.1,192.168.15.6 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting. 
security: 
authorization: enabled 
keyFile: /home/mongodb/keyFile/mongo-key 
#transitionToAuth: true 
#operationProfiling: 
#replication: 
# replSetName: replicaset01 
#sharding: 
## Enterprise-Only Options 
#auditLog: 
#snmp: 

IMPORTANTE: Para que nossa replicação funcione, não podemos esquecer dos seguintes parâmetros:

bindip: com o ip da máquina local, no exemplo da minha instância primária ficou bindIp: 127.0.0.1,192.168.15.6.

authorization: enabled = Habilitar a autenticação obrigatória no MongoDB, assim não sendo possível conectar sem passar usuário e senha.

keyFile: /home/mongodb/keyFile/mongo-key = Nossa chave de autenticação

replSetName: replicaset01 = O nome da nossa replicação, manter comentado com um # por enquanto.

Após configurar no MongoDB primário e secundário, vamos criar um usuário admin no nosso MongoDB primário, pois, como ativamos a opção de autenticação, será necessário a criação deste.

user: ‘admin’,
pwd: ‘admin’,
roles: [ { role: ‘root’, db: ‘admin’ } ] }

No meu caso, criei o usuário “admin” com senha “admin” na role “root” dentro do db “admin”.

IMPORTANTE: Lembrando que meu ambiente é de teste. Na realidade, configurar um usuário e uma senha com maior complexidade.

Após isso, realizar o reinício da instância.

Para conectar, passar usuário e senha e o authenticationDatabase

mongo -u “admin” -p “admin” –authenticationDatabase “admin” 

Listar os bancos para validar se está tudo certo com o acesso.

show dbs 

Validei que o acesso está funcionando no meu caso. 

Agora que a mágica acontece! Vamos converter nossa instância do servidor mongodb01 em Replica Set. No arquivo de configuração, descomentaremos as linhas replication: e replSetName: replicaset01 e realizar o reinício da instância. 

Conectado com o usuário admin, execute: 
rs.initiate() 

Pronto, já temos um primário. 

Agora, vamos validar os membros do Replica Set. 

rs.status().members 

E validar também a configuração do Replica Set. 

rs.config() 

Neste momento, adicionaremos o secundário. 

rs.add(“IP da máquina réplica”) 

Neste caso, você pode adicionar o IP e a porta da seguinte maneira: 

rs.add(“IP da máquina réplica:porta”) 

Vamos validar os membros do Replica Set. 

Observe que a replicação já adicionou meu secundário, porém apresenta uma mensagem de falha de conexão. Isso ocorreu pois ainda tenho que descomentar os parâmetros de chave e replicação na instância mongodb02 e reiniciá-la. 

Após isto, a replicação conectou nos dois Nodes.

Não temos mais o erro. Agora vamos validar se replicou os dbs do primário para o secundário. 

Observe que, no secundário, eu executei o rs.slaveOk() (que está sendo substituído pelo rs.secondaryOk()), já que, por se tratar de um secundário, não conseguimos executar os mesmos comandos que na instância primária, a não ser que você mesmo execute. 

Nossa replicação já está funcionando, mas, dessa forma, podemos ter chaveamento entre primário e secundário. No meu caso, eu quero manter o mongodb01 como primário e o mongodb02 como secundário. Sendo assim, vamos executar os seguintes comandos no primário. 

cfg = rs.conf() 
cfg.members[0].priority = 1 
cfg.members[1].priority = 0.5 
cfg.members[0].votes = 1 
rs.reconfig(cfg,{force: true})

Com isso, nossa replicação está configurada com sucesso. Você pode testar o sincronismo criando dbs. 

Aqui executei o comando para criação do db que no exemplo chamei de roxdb. 

use roxdb 
db.user.insert({nome: “MySQL”, tipo: “banco de dados”})

E está feito! Espero que tenham gostado e contem para gente como foi sua experiência configurando seu Replica Set. 

Por Rodrigo Rabaco

rox-ball

Pronto para Maximizar a Eficiência do Seu Banco de Dados?

Aperfeiçoou seu MongoDB com um Replica Set? Fale conosco para otimizar ainda mais seu sistema com nossos serviços de Data Management!

Conheça a Rox School

Somos especialistas em cuidar dos seus dados, oferecendo soluções inovadoras e parcerias com os maiores nomes da tecnologia para manter você sempre à frente.

Veja os cursos