NoSQl – parte 2 (MongoDB)
Continuando (antes tarde do que nunca) com a segunda parte do tutorial, vamos ver como construir agora uma arquitetura distribuida com MongoDB, fazendo uso da feature ReplicaSet. Para isso, vou supor que você tenha o MongoDB instalado, e/ou adicionado no seu PATH.
Arquitetura
Teoricamente, teremos 3 máquinas: server1, server2 e arbiter. Ok, server1 e server2 eu sei pra que serve, mas pra que eu preciso de um arbiter? Um arbiter (arbitro) é um servidor que monitora os membros da nossa infraestrutura (arquitetura, replicaset, chame do que quiser) e quando o nosso master cai por algum motivo, ele escolhe (por meio de votes) um outro nó da nossa infraestrutura para ser o novo master, garantindo assim, alta disponibilidade da aplicação.
Montando a infraestrutura
Vamos manter a seguinte convenção: server1 é o master e server2 é o slave.
Com isso em mente, vamos até o server1 e inicializamos o processo mongod nele, da seguinte forma:
mongod –rest –replSet geek
Atente para o parâmetro replSet. É o nome lógico do nosso ReplicaSet. Se formos verificar o status do ReplicaSet agora (rs.status()) teremos o seguinte retorno:
rs.status()
{
“startupStatus” : 3,
“errmsg” : “can’t get local.system.replset (EMPTYCONFIG)”,
“ok” : 0
}
Isso acontece por que nós ainda não inicializamos o nosso ReplicaSet. Vamos iniciar ele agora fazendo isso:
rs.initiate()
{
“info2″ : “no configuration explicitly specified — making one”,
“info” : “Config now saved locally. Should come online in about a minute.”,
“ok” : 1
}
Agora, o comando rs.status() vai ficar um pouco mais legal
rs.status()
{
“set” : “geek”,
“myState” : 1,
“members” : [
{
"name" : "mb17:27017",
"self" : true
}
],
“ok” : 1
}
Mas de acordo com a tag members, nós só temos um membro no nosso ReplicaSet ainda. Vamos deixar as coisas mais excitates ainda, adicionado outro membro à nossa infraestrutura. Para isso, vamos ao nosso server2 e iniciamos o processo mongod da mesma forma que fizemos no nosso master:
mongod –rest –replSet geek
Aqui, seu outro servidor deve ter iniciado corretamente, mas o nosso master (server1) ainda não sabe que existe outro membro na nossa infraestrutura. Vamos mudar essa história, e fazer com que eles sejam amiguinhos
No server1, apenas adicionamos o server2 ao ReplicaSet da seguinte forma:
rs.add(“server2”);
(Lembrando, esse comando rs.add está disponivel dentro do console do MongoDB, com o comando mongo).
Agora, um rs.conf() nos mostrará a configuração, e retornará algo muito mais legal do que antes:
rs.conf()
{
“_id” : “geek”,
“version” : 2,
“members” : [
{
"_id" : 0,
"host" : “sf1"
},
{
"_id" : 1,
"host" : “sf2"
}
]
}
Se você acessar a pagina “http://server1:28017/_replSet” veremos os dois membros la, mas ambos tem 1 voto. Caso o master caia, ninguem será o master (pensando em uma arquitetura maior) visto que teremos um empate. Vamos adicionar o nosso arbitro nesse ReplicaSet:
mongod –rest –replSet geek –oplogSize 8
Um arbitro, praticamente não consoem recursos da maquina, e pode rodar em uma maquina 32bits.
Agora, temos um arbitro rodando, mas ainda a nossa arquitetura não sabe da existencia dele. Vamos adicionar ele:
rs.add( { _id:2, host:”arbiter”, arbiterOnly:true } )
Derrube o master, e acesse a pagina “http://server2:28017/_replSet” e você verá que o nosso server2 se tornou o master da nossa arquitetura.
Posts similares:
- None Found
| Este artigo foi escrito por Luiz Kowalski em novembro 15, 2011 às 7:38 PM, e está arquivado em Dev, NoSQL. Siga quaisquer respostas a este artigo através do RSS 2.0. Você pode deixar uma resposta ou fazer um trackback do seu próprio site. |
-
Régis Eduardo
-
Luiz Eduardo
-
http://twitter.com/caarlos0 Carlos Alexandro Becker

