Área do cliente

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

banco de dados

[vc_row][vc_column][vc_row_inner][vc_column_inner][vc_column_text]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.[/vc_column_text][wgl_spacing spacer_size=”30px”][wgl_double_headings title_tag=”h3″ title_color=”#325060″ subtitle_color=”#fcb813″]Tutorial: Configurando o seu Replica Set[/wgl_double_headings][vc_column_text]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.[/vc_column_text][wgl_spacing spacer_size=”30px”][vc_column_text]

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/

[/vc_column_text][wgl_spacing spacer_size=”30px”][vc_column_text]Lembrando que o diretório no qual será criada a chave deve ser feito previamente, tanto no servidor principal, quanto no secundário.[/vc_column_text][wgl_spacing spacer_size=”30px”][vc_column_text]

mkdir -p /home/mongodb/keyFile/

[/vc_column_text][wgl_spacing spacer_size=”30px”][vc_column_text]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:[/vc_column_text][wgl_spacing spacer_size=”30px”][vc_column_text]

# 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:

[/vc_column_text][wgl_spacing spacer_size=”30px”][/vc_column_inner][/vc_row_inner][vc_column_text]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.[/vc_column_text][wgl_spacing spacer_size=”30px”][vc_row_inner equal_height=”yes” content_placement=”middle”][vc_column_inner width=”1/2″][vc_column_text]

use admin
db.createUser(
{
user: ‘admin’,
pwd: ‘admin’,
roles: [ { role: ‘root’, db: ‘admin’ } ] }

[/vc_column_text][/vc_column_inner][vc_column_inner width=”1/2″][vc_single_image image=”3721″ img_size=”full” alignment=”center” onclick=”img_link_large” img_link_target=”_blank”][/vc_column_inner][/vc_row_inner][wgl_spacing spacer_size=”30px”][vc_column_text]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.[/vc_column_text][wgl_spacing spacer_size=”30px”][vc_single_image image=”3722″ img_size=”full” alignment=”center” onclick=”img_link_large” img_link_target=”_blank”][wgl_spacing spacer_size=”30px”][vc_column_text]Para conectar, passar usuário e senha e o authenticationDatabase.[/vc_column_text][wgl_spacing spacer_size=”30px”][vc_column_text]

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

[/vc_column_text][wgl_spacing spacer_size=”30px”][vc_single_image image=”3723″ img_size=”full” alignment=”center” onclick=”img_link_large” img_link_target=”_blank”][wgl_spacing spacer_size=”30px”][vc_row_inner equal_height=”yes” content_placement=”middle”][vc_column_inner width=”2/3″][vc_column_text]Listar os bancos para validar se está tudo certo com o acesso.[/vc_column_text][wgl_spacing spacer_size=”30px”][vc_column_text]

show dbs

[/vc_column_text][/vc_column_inner][vc_column_inner width=”1/3″][vc_single_image image=”3724″ img_size=”full” alignment=”center” onclick=”img_link_large” img_link_target=”_blank”][/vc_column_inner][/vc_row_inner][/vc_column][/vc_row][vc_row][vc_column][vc_column_text]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:[/vc_column_text][vc_row_inner equal_height=”yes” content_placement=”middle”][vc_column_inner width=”1/4″][vc_column_text]

rs.initiate()

[/vc_column_text][/vc_column_inner][vc_column_inner width=”3/4″][vc_single_image image=”3725″ img_size=”full” alignment=”center” onclick=”img_link_large” img_link_target=”_blank”][/vc_column_inner][/vc_row_inner][wgl_spacing spacer_size=”30px”][vc_row_inner equal_height=”yes” content_placement=”middle”][vc_column_inner width=”1/2″][vc_single_image image=”3727″ img_size=”full” alignment=”center” onclick=”img_link_large” img_link_target=”_blank”][/vc_column_inner][vc_column_inner width=”1/2″][vc_column_text]Pronto, já temos um primário.

Agora, vamos validar os membros do Replica Set.[/vc_column_text][wgl_spacing spacer_size=”30px”][vc_column_text]

rs.status().members

[/vc_column_text][/vc_column_inner][/vc_row_inner][wgl_spacing spacer_size=”30px”][vc_column_text]E validar também a configuração do Replica Set.[/vc_column_text][wgl_spacing spacer_size=”30px”][vc_column_text]

rs.config()

[/vc_column_text][wgl_spacing spacer_size=”30px”][vc_single_image image=”3728″ img_size=”full” alignment=”center” onclick=”img_link_large” img_link_target=”_blank”][wgl_spacing spacer_size=”30px”][vc_column_text]Neste momento, adicionaremos o secundário.[/vc_column_text][wgl_spacing spacer_size=”30px”][vc_column_text]

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

[/vc_column_text][wgl_spacing spacer_size=”30px”][vc_single_image image=”3729″ img_size=”full” alignment=”center” onclick=”img_link_large” img_link_target=”_blank”][wgl_spacing spacer_size=”30px”][vc_column_text]Neste caso, você pode adicionar o IP e a porta da seguinte maneira:[/vc_column_text][wgl_spacing spacer_size=”30px”][vc_column_text]

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

[/vc_column_text][wgl_spacing spacer_size=”30px”][vc_column_text]Vamos validar os membros do Replica Set.[/vc_column_text][wgl_spacing spacer_size=”30px”][vc_single_image image=”3730″ img_size=”full” alignment=”center” onclick=”img_link_large” img_link_target=”_blank”][wgl_spacing spacer_size=”30px”][vc_column_text]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.[/vc_column_text][wgl_spacing spacer_size=”30px”][vc_single_image image=”3731″ img_size=”full” alignment=”center” onclick=”img_link_large” img_link_target=”_blank”][wgl_spacing spacer_size=”30px”][vc_row_inner equal_height=”yes” content_placement=”middle”][vc_column_inner width=”1/4″][vc_column_text]Não temos mais o erro. Agora vamos validar se replicou os dbs do primário para o secundário.[/vc_column_text][/vc_column_inner][vc_column_inner width=”3/4″][vc_single_image image=”3732″ img_size=”full” alignment=”center” onclick=”img_link_large” img_link_target=”_blank”][/vc_column_inner][/vc_row_inner][wgl_spacing spacer_size=”30px”][vc_column_text]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.[/vc_column_text][wgl_spacing spacer_size=”30px”][vc_row_inner equal_height=”yes” content_placement=”middle”][vc_column_inner width=”1/2″][vc_single_image image=”3733″ img_size=”full” alignment=”center” onclick=”img_link_large” img_link_target=”_blank”][/vc_column_inner][vc_column_inner width=”1/2″][vc_column_text]

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

[/vc_column_text][/vc_column_inner][/vc_row_inner][wgl_spacing spacer_size=”30px”][vc_column_text]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.[/vc_column_text][wgl_spacing spacer_size=”30px”][vc_column_text]

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

[/vc_column_text][wgl_spacing spacer_size=”30px”][vc_single_image image=”3734″ img_size=”full” alignment=”center” onclick=”img_link_large” img_link_target=”_blank”][wgl_spacing spacer_size=”30px”][vc_column_text]E está feito! Espero que tenham gostado e contem para gente como foi sua experiência configurando seu Replica Set.[/vc_column_text][/vc_column][/vc_row]