sábado, 17 de maio de 2014

3-nodereplicaset

 

 

Neste artigo vamos ver como implementar uma replicação MongoDB em 3 passos de maneira bem simples.



Para começar, vamos seguir os passos a seguir:

  1. Criar os diretórios de dados

  2. Criar o conjunto de replicação e as instâncias

  3. Configure os nós primário, secundario e um árbitro


Passo 1) Crie os diretórios de dados


Comece criando um diretório de dados para cada membro do conjunto de réplica, um para o primário,outro para o secundário e também adicionar um árbitro. O árbitro não replica os dados, mas escolhe um novo primário, caso haja uma interrupção do primário existente.
mkdir /mongodb/0/node1
mkdir /mongodb/0/node2
mkdir /mongodb/0/arbiter

Passo 2) Criar o conjunto de replicação e as instâncias


Em seguida, comece  cada membro como um mongod separado. Desde que você esteja rodando cada processo na mesma máquina, é provavelmente mais fácil de começar cada mongod em uma janela de terminal separado:
mongod --replSet cadastro --dbpath /mongodb/0/node1 --port 40001 --smallfiles
mongod --replSet cadastro --dbpath /mongodb/0/node2 --port 40002 --smallfiles
mongod --replSet cadastro --dbpath /mongodb/0/arbiter --port 40003 --smallfiles



Revisando os processos


[root@Mongo01 ~]# ps auxww | grep mongo
root 5376 0.7 3.5 809000 36072 ? Sl 05:21 6:27 mongod --dbpath /mongodb/0/m01 --port 37019
root 5443 0.7 5.2 453740 53172 ? Sl 05:23 6:56 mongod --configsvr --dbpath /mongodb/0/c01 --port 27019
root 5474 0.4 0.7 125044 7992 ? Sl 05:27 3:53 mongos --configdb Mongo01:27019
root 8261 0.6 3.3 717992 34144 pts/3 Sl 20:09 0:00 mongod --replSet cadastro --dbpath /mongodb/0/node1 --port 40001 --smallfiles
root 8313 3.8 3.5 719012 36640 pts/3 Sl 20:10 0:00 mongod --replSet cadastro --dbpath /mongodb/0/node2 --port 40002 --smallfiles
root 8360 0.7 3.0 199652 31164 pts/3 Dl 20:11 0:00 mongod --replSet cadastro --dbpath /mongodb/0/node3 --port 40003 --smallfiles

Passo 3) Configurar, primário, secundaries e um árbitro


Conecte no nó principal para continuar, você precisa configurar o conjunto de réplicas, porque se você examinar a saída do log mongod, a primeira coisa que você notará são mensagens de erro dizendo que a configuração não pode ser encontrada.
[root@Mongo01 ~]# mongo localhost:40001
MongoDB shell version: 2.6.1
connecting to: localhost:40001/test
> use cadastro
switched to db cadastro
> rs.initiate()
{
"info2" : "no configuration explicitly specified -- making one",
"me" : "Mongo01:40001",
"info" : "Config now saved locally. Should come online in about a minute.",
"ok" : 1
}

Agora conecte novamente para o nó principal, e adicionar o nó secundário, incluindo o nó árbitro:
[root@Mongo01 ~]# mongo localhost:40001
MongoDB shell version: 2.6.1
connecting to: localhost:40001/test

cadastro:PRIMARY> rs.add('Mongo01:40002')
{ "ok" : 1 }
cadastro:PRIMARY> rs.add('Mongo01:40003', {arbiterOnly:true})
{ "ok" : 1 }

Verifique se a configuração está OK com o comando rs.status()
cadastro:PRIMARY> rs.status()
{
"set" : "cadastro",
"date" : ISODate("2014-05-18T01:39:39Z"),
"myState" : 1,
"members" : [
{
"_id" : 0,
"name" : "Mongo01:40001",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 9012,
"optime" : Timestamp(1400370644, 1),
"optimeDate" : ISODate("2014-05-17T23:50:44Z"),
"electionTime" : Timestamp(1400369450, 2),
"electionDate" : ISODate("2014-05-17T23:30:50Z"),
"self" : true
},
{
"_id" : 1,
"name" : "Mongo01:40002",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 6863,
"optime" : Timestamp(1400370644, 1),
"optimeDate" : ISODate("2014-05-17T23:50:44Z"),
"lastHeartbeat" : ISODate("2014-05-18T01:39:37Z"),
"lastHeartbeatRecv" : ISODate("2014-05-18T01:39:39Z"),
"pingMs" : 0,
"syncingTo" : "Mongo01:40001"
},
{
"_id" : 2,
"name" : "Mongo01:40003",
"health" : 1,
"state" : 7,
"stateStr" : "ARBITER",
"uptime" : 6853,
"lastHeartbeat" : ISODate("2014-05-18T01:39:39Z"),
"lastHeartbeatRecv" : ISODate("2014-05-18T01:39:38Z"),
"pingMs" : 0
}
],
"ok" : 1
}


E agora é hora de verificar se ele funciona. Nós colocamos uma pessoa em nosso banco de dados principal:

cadastro:PRIMARY> db.cadastro.save({ "name" : "Paulo", "group" : [ "Oracle", "ExaData", "Big Data"], } )
WriteResult({ "nInserted" : 1 })
cadastro:PRIMARY> db.cadastro.save({ "name" : "Pedro", "group" : [ "Oracle", "ExaData", "Big Data"], } )
WriteResult({ "nInserted" : 1 })
cadastro:PRIMARY> db.cadastro.save({ "name" : "Alberto", "group" : [ "Oracle", "ExaData", "Big Data"], } )
WriteResult({ "nInserted" : 1 })
cadastro:PRIMARY> db.cadastro.save({ "name" : "Cezar", "group" : [ "SQL Server", "ExaData", "Big Data"], } )
WriteResult({ "nInserted" : 1 })
cadastro:PRIMARY> db.cadastro.save({ "name" : "Jose", "group" : [ "MongoDB", "ExaData", "Big Data"], } )
WriteResult({ "nInserted" : 1 })
cadastro:PRIMARY> db.cadastro.save({ "name" : "Patricia", "group" : [ "MongoDB", "ExaData", "Big Data"], } )
WriteResult({ "nInserted" : 1 })

cadastro:PRIMARY> db.cadastro.find()
{ "_id" : ObjectId("537811db203fdb70de30ddc2"), "name" : "Paulo", "group" : [ "Oracle", "ExaData", "Big Data" ] }
{ "_id" : ObjectId("537811e3203fdb70de30ddc3"), "name" : "Pedro", "group" : [ "Oracle", "ExaData", "Big Data" ] }
{ "_id" : ObjectId("537811ec203fdb70de30ddc4"), "name" : "Alberto", "group" : [ "Oracle", "ExaData", "Big Data" ] }
{ "_id" : ObjectId("537811ff203fdb70de30ddc5"), "name" : "Cezar", "group" : [ "SQL Server", "ExaData", "Big Data" ] }
{ "_id" : ObjectId("53781213203fdb70de30ddc6"), "name" : "Jose", "group" : [ "MongoDB", "ExaData", "Big Data" ] }
{ "_id" : ObjectId("53781230203fdb70de30ddc7"), "name" : "Patricia", "group" : [ "MongoDB", "ExaData", "Big Data" ] }

Conecte no secundário e verifique se os dados estão lá  e não se esqueça de permitir a leitura com "rs.slaveOk () "ou "db.getMongo (). SetSlaveOk ()"
[root@Mongo01 ~]# mongo localhost:40002
MongoDB shell version: 2.6.1
connecting to: localhost:40002/test
cadastro:SECONDARY> rs.slaveOk()
cadastro:SECONDARY> use cadastro
switched to db cadastro

cadastro:SECONDARY> db.cadastro.find()
{ "_id" : ObjectId("537811db203fdb70de30ddc2"), "name" : "Paulo", "group" : [ "Oracle", "ExaData", "Big Data" ] }
{ "_id" : ObjectId("537811e3203fdb70de30ddc3"), "name" : "Pedro", "group" : [ "Oracle", "ExaData", "Big Data" ] }
{ "_id" : ObjectId("537811ec203fdb70de30ddc4"), "name" : "Alberto", "group" : [ "Oracle", "ExaData", "Big Data" ] }
{ "_id" : ObjectId("537811ff203fdb70de30ddc5"), "name" : "Cezar", "group" : [ "SQL Server", "ExaData", "Big Data" ] }
{ "_id" : ObjectId("53781213203fdb70de30ddc6"), "name" : "Jose", "group" : [ "MongoDB", "ExaData", "Big Data" ] }
{ "_id" : ObjectId("53781230203fdb70de30ddc7"), "name" : "Patricia", "group" : [ "MongoDB", "ExaData", "Big Data" ] }


Agora podemos testá-lo com um script para popular dados. Digite no nó principal algo como:
cadastro:PRIMARY> for(i=0; i<10000; i++) { db.cadastro.save({DadosAutomaticos: i}); }
WriteResult({ "nInserted" : 1 })

Conecte no nó secundário e verifique se a collection foi preenchida
cadastro:SECONDARY> db.cadastro.find()
{ "_id" : ObjectId("537811db203fdb70de30ddc2"), "name" : "Paulo", "group" : [ "Oracle", "ExaData", "Big Data" ] }
{ "_id" : ObjectId("537811e3203fdb70de30ddc3"), "name" : "Pedro", "group" : [ "Oracle", "ExaData", "Big Data" ] }
{ "_id" : ObjectId("537811ec203fdb70de30ddc4"), "name" : "Alberto", "group" : [ "Oracle", "ExaData", "Big Data" ] }
{ "_id" : ObjectId("537811ff203fdb70de30ddc5"), "name" : "Cezar", "group" : [ "SQL Server", "ExaData", "Big Data" ] }
{ "_id" : ObjectId("53781213203fdb70de30ddc6"), "name" : "Jose", "group" : [ "MongoDB", "ExaData", "Big Data" ] }
{ "_id" : ObjectId("53781230203fdb70de30ddc7"), "name" : "Patricia", "group" : [ "MongoDB", "ExaData", "Big Data" ] }
{ "_id" : ObjectId("53781506203fdb70de30ddc8"), "DadosAutomaticos" : 0 }
{ "_id" : ObjectId("53781506203fdb70de30ddc9"), "DadosAutomaticos" : 1 }
{ "_id" : ObjectId("53781506203fdb70de30ddca"), "DadosAutomaticos" : 2 }
{ "_id" : ObjectId("53781506203fdb70de30ddcb"), "DadosAutomaticos" : 3 }
{ "_id" : ObjectId("53781506203fdb70de30ddcc"), "DadosAutomaticos" : 4 }
{ "_id" : ObjectId("53781506203fdb70de30ddcd"), "DadosAutomaticos" : 5 }
{ "_id" : ObjectId("53781506203fdb70de30ddce"), "DadosAutomaticos" : 6 }
{ "_id" : ObjectId("53781506203fdb70de30ddcf"), "DadosAutomaticos" : 7 }
{ "_id" : ObjectId("53781506203fdb70de30ddd0"), "DadosAutomaticos" : 8 }
{ "_id" : ObjectId("53781506203fdb70de30ddd1"), "DadosAutomaticos" : 9 }
{ "_id" : ObjectId("53781506203fdb70de30ddd2"), "DadosAutomaticos" : 10 }
{ "_id" : ObjectId("53781506203fdb70de30ddd3"), "DadosAutomaticos" : 11 }
{ "_id" : ObjectId("53781506203fdb70de30ddd4"), "DadosAutomaticos" : 12 }
{ "_id" : ObjectId("53781506203fdb70de30ddd5"), "DadosAutomaticos" : 13 }
Type "it" for more
cadastro:SECONDARY> db.cadastro.count()
10006

Nó Primario
cadastro:PRIMARY> db.cadastro.count()
10006

OK, funcionou perfeitamente, temos os mesmos dados em ambos os nós.

 

0 comentários:

Postar um comentário

Blog Archive

SmarttNet Solution Provider. Tecnologia do Blogger.

Postagens populares

Twitter MongoDBBrazil

Total de visualizações de página