Como ativar e configurar um Replica Set no seu servidor com MongoDB
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.
openssl rand -base64 756 > /home/mongodb/keyFile/mongo-key chmod 400 /home/mongodb/keyFile/mongo-key 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.
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”
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:
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.
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.