Como ativar e configurar um Replica Set no seu servidor com MongoDB
- Por Rodrigo Rabaco
[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]
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.