quarta-feira, 23 de dezembro de 2015

MongoDB - Criando Replicas



Com a necessidade de criar um blog para um curso, tive a ideia de aproveitar o blog e junto com alguns amigos fazer postagens de assuntos relacionados a Computação, como: Teoria para grafos, Telecomunicações, Sistemas Operacionais, Desenvolvimento, entre outros.
As postagens servirão como estudo tanto para os autores dos post's, como para todos os leitores que tem interesse nos assuntos abordados e que desejam aprender cada vez mais. Essa é a nossa forma de poder ajudar amigos e colegas da área, compartilhando conhecimentos adquiridos de forma simples e didática para um fácil entendimento.

Nesse post irei explicar passo a passo como construir Replicas no MongoDB, onde construiremos localmente um conjunto de 3 Replicas.

Todos os comandos serão executados no terminal.

Primeiro
De inicio precisamos criar 3 pastas novas dentro de data (aquela mesma pasta que foi preciso criar na instalação do MongoDB), são nessas pastas que serão armazenados os dados das Replicas. Segue o comando para criar as pastas pelo termial:
cd /
mkdir /data/rs1
mkdir /data/rs2
mkdir /data/rs3

Segundo
Pare todos os processos do mongod caso esteja com algum rodando. E execute os seguintes comandos, cada um em uma aba/janela do terminal:

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

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

cd /
mongod --replSet replica_set --port 27019 --dbpath /data/rs3
Depois do parâmetro --replSet é colocado o nome do nosso conjunto de replicas, logo em seguida é passado o número da porta que será usado e o caminho da pasta que ficará as Replicas.

Terceiro
Agora vamos levantar o nosso client em uma nova aba/janela, passando a porta da nossa replica primária, que no caso é a primeira que criamos.
Mongo --port 27017

Quarto
No mongo client, criaremos uma variável que conterá as configurações para a criação da nossa ReplicaSet:
rsconf = {
   _id: "replica_set",
   members: [
    {
     _id: 0,
     host: "127.0.0.1:27017"
    }
  ]
}
Onde como você pode ver, no _id passamos o nome do nosso grupo de replicas e uma array de membros adicionando nossa primeira replica, a nossa replica primária.

Quinto
Agora iremos inicializar a nossa ReplicaSet ainda no mongo client, passando a variável que criamos no passo anterior:
rs.initiate(rsconfig)

Se após você receber a configuração da inicialização e você for na aba que está sendo executado o servidor mongo de endereço 127.0.0.1:27017, você verá algumas mensagem como a criação do oplog e o seu tamanho, a alocação dos arquivos, a inicialização a replicação e a transação do status, onde no final ficará como PRIMARY.

Sexto
Agora iremos adicionar as outras duas replicas, com o seguinte comando (ainda no mongo client):
rs.add(“127.0.0.1:27018”)
rs.add(“127.0.0.1:27019”)

Pronto! Replicas criadas.

Os comandos de escrita são feitos apenas na replica primária, se você tentar fazer uma alteração ou até mesmo uma seleção na replica secundaria, verá que o MongoDB não vai deixar. As modificações feitas na replica primaria serão automaticamente sincronizadas com as outras replicas.

Status
Você pode executar o comando
rs.status()
Para ver o status da replica, vendo o nome do grupo, os membros que fazem parte, o estado de cada membro (primário ou secundário). É muito interessante.

Também podemos ver o status do oplog, executando
rs.printReplicationInfo()
Onde mostra o tamanho do oplog e quando foram registrado as alterações.

No MongoDB temos um comando para rebaixar nossa replica primária, isso serve para você poder simular o que aconteceria se o servidor da nossa replica caísse. O comando é o seguinte:
rs.stepDown()

Quando a replica primaria cai. As outras replicas fazem uma votação entre elas para eleger qual será a replica principal, essa é a nossa garantia de que mesmo que nosso servidor principal caia, nossa base de dados continuara ativa, disponível.

Não perca nossos post's ;)

Aaaaah!

Caso você crie um número par de replicas é preciso criar um arbitro, pois se sua replica primaria cair, pode haver um empate na votação, precisando de um arbitro que terá o voto do desempate.

Para criarmos devemos criar outra pasta, dentro de data no diretório raiz.
cd /
mkdir /data/arb

Depois levante o mongod em uma outra aba/janela utilizando o comado:
mongod --port 30000 --dbpath /data/arb –replSet replica_set

Fazendo isso, vá no client da nossa replica primária e adicione o árbitro:
rs.addArb(“127.0.0.1:30000”)

0 comentários:

Postar um comentário