Replicas Em Mongodb

No mongoDB para realizar uma replica usamos o comando replicaSet para realizar o espelhamento dos dados. Ele suporta até 50 membros de replica.

A replicação ocorre em 2 etapas

Initial Sync

Ele inicia os passos de replicas:

1º Consulta todas as coleções e reconstroe os dados válidos, os “id’s” e os índices dos _id; 2º Aplica as alterações dos dados (oplog); 3º Contrue todos os outros índices em todas as coleções, exceto os indices de _id que já foram criados no 1ª passo; 4º Ele realiza a transição para um estado normal, ou seja secundário.

Replication

Após o Initial Sync ele vai replicando os dados e sincronizando todas as informações. Ele sempre ficará rodando para sempre manter os dados sincronizados.

Criando os diretorios

$ mkdir rs1 && mkdir rs2 && mkdir rs3

Para vermos os logs rodando abri 3 terminais e em cada terminal podemos rodar um comando para habilitar nossa replica.

Vamos iniciar a 1º replica:

mongod --replSet replica_set --port 27017 --dbpath /data/rs1

a 2º replica, em outro terminal:

mongod --replSet replica_set --port 27018 --dbpath /data/rs2

e nossa 3º replica, em outro terminal:

mongod --replSet replica_set --port 27019 --dbpath /data/rs3

Aqui podemos criar um arquivo para rodar esses 3 comandos:

#!/bin/bash
mongod --replSet replica_set --port 27017 --dbpath /data/rs1 --logpath /data/rs1/log.txt --fork
mongod --replSet replica_set --port 27018 --dbpath /data/rs2 --logpath /data/rs2/log.txt --fork
mongod --replSet replica_set --port 27019 --dbpath /data/rs3 --logpath /data/rs3/log.txt --fork

Configurando e iniciando

Primeiro conectamos no primário, ou seja, roda será rodados os comandos:

mongo --port 27017

Criamos o json de configuração ‘rsconf’

rsconf = {
"_id": "replica_set",
"members": [
         {
                "_id":0,
                "host":"127.0.0.1:27017"
         }
        ]
}

Iniciamos o replicaSet usando o comando ‘rs.initiate()’, esse comando leva uns segundos…

> rs.initiate(rsconf)

Para adicionarmos a replica usamos o comando add()

Adicionando a replica no rs2 (27018)

> add("127.0.0.1:27018")

e adicionando a replica no rs2 (27019)

> add("127.0.0.1:27019")

Arbitro

É um serviço que não replica os dados e ele nunca vira um primário mas ele arbitra, ou seja, ele vota em qual Replica secundária virá primária. Um detalhe muito importe é que o arbitro só deve ser usado quando o numero de replica é um par. Por exemplo, tenho 4 replicas, então eu uso um arbitro.

Vamos criar um replica.

Criamos um diretorio
> mkdir /data/arb
Subimos o mongoDB com os paramêtros abaixo
> mongod --port 30000 -dbpath /data/arb --replSet replica_set
Agora conecte na Replica primária e adicione o arbitro
> rs.addArb("127.0.0.1:30000")

Compartilhe

Back