En aquest article us ensenyarem com configurar MongoDB amb rèplica en 3 servidors, de manera que tindrem les dades desades en 3 servidors. Crearem 3 servidors que anomenarem mongodb1, mongodb2 i mongodb3. Partim de l'article Com instal·lar MongoDB i en farem només el primer pas d'instal·lació.
Actualitzar hosts
Editarem el fitxer hosts de cada servidor per afegir-hi el host de cada servidor amb la IP privada corresponent:
10.20.10.22 mongodb1
10.20.10.23 mongodb2
10.20.10.24 mongodb3Creació de la clau
Aquest pas només s'ha d'executar en un dels 3 servidors; en el nostre exemple ho farem a mongodb1 i després ho copiarem a mongodb2 i mongodb3:
# openssl rand -base64 756 > /var/lib/mongodb/mongo.key
# scp /var/lib/mongodb/mongo.key mongodb2:/var/lib/mongodb/mongo.key
# scp /var/lib/mongodb/mongo.key mongodb3:/var/lib/mongodb/mongo.keyPermisos de la clau
Aquest pas s'ha d'executar en els 3 servidors; en el nostre exemple ho farem a mongodb1 i després ho copiarem a mongodb2 i mongodb3:
# chown mongodb:mongodb /var/lib/mongodb/mongo.key
# chmod 400 /var/lib/mongodb/mongo.keyCreació de l'usuari Admin
Aquest pas només s'ha d'executar a mongodb1:
# mongo
> use admin
> db.createUser({user: "mongo-replica", pwd: "CloudingEjemploKB", roles:[{role: "root", db: "admin"}]})
> quit()retornarà:
Successfully added user: {
"user" : "mongo-replica",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}Configurar MongoDB
Ara que ja tenim l'usuari administrador creat, configurarem MongoDB en els 3 servidors perquè s'autentiqui amb la clau que hem creat i assignarem un nom a la rèplica. Per fer-ho, afegirem el següent al fitxer de configuració:
# vi /etc/mongod.conf
security:
keyFile: /var/lib/mongodb/mongo.key
replication:
replSetName: rs0
Un cop fets els canvis, reiniciarem MongoDB en els 3 servidors:
# systemctl restart mongodIniciar les rèpliques de MongoDB
Aquest pas només el farem a mongodb1; primer ens connectarem amb l'usuari i la contrasenya que hem creat al pas anterior i iniciarem la rèplica:
# mongo -u mongo-replica -p --authenticationDatabase adminrs.initiate(
{
_id : "rs0",
members: [
{ _id : 0, host : "mongodb1:27017" },
{ _id : 1, host : "mongodb2:27017" },
{ _id : 2, host : "mongodb3:27017" }
]
}
)
retornarà:
{
"ok" : 1,
"operationTime" : Timestamp(1520358155, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1520358155, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}Podem veure la configuració:
rs.conf()rs.conf()
{
"_id" : "rs0",
"version" : 1,
"protocolVersion" : NumberLong(1),
"members" : [
{
"_id" : 0,
"host" : "mongodb1:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 1,
"host" : "mongodb2:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 2,
"host" : "mongodb3:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 2000,
"heartbeatTimeoutSecs" : 10,
"electionTimeoutMillis" : 10000,
"catchUpTimeoutMillis" : -1,
"catchUpTakeoverDelayMillis" : 30000,
"getLastErrorModes" : {
},
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
},
"replicaSetId" : ObjectId("5a9ed30a3a8cb5b9647406b5")
}
}També podem veure l'estat de les rèpliques executant:
rs.status(){
"set" : "rs0",
"date" : ISODate("2018-03-06T17:53:45.571Z"),
"myState" : 1,
"term" : NumberLong(1),
"heartbeatIntervalMillis" : NumberLong(2000),
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(1520358817, 1),
"t" : NumberLong(1)
},
"readConcernMajorityOpTime" : {
"ts" : Timestamp(1520358817, 1),
"t" : NumberLong(1)
},
"appliedOpTime" : {
"ts" : Timestamp(1520358817, 1),
"t" : NumberLong(1)
},
"durableOpTime" : {
"ts" : Timestamp(1520358817, 1),
"t" : NumberLong(1)
}
},
"members" : [
{
"_id" : 0,
"name" : "mongodb1:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 842,
"optime" : {
"ts" : Timestamp(1520358817, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2018-03-06T17:53:37Z"),
"electionTime" : Timestamp(1520358165, 1),
"electionDate" : ISODate("2018-03-06T17:42:45Z"),
"configVersion" : 1,
"self" : true
},
{
"_id" : 1,
"name" : "mongodb2:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 670,
"optime" : {
"ts" : Timestamp(1520358817, 1),
"t" : NumberLong(1)
},
"optimeDurable" : {
"ts" : Timestamp(1520358817, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2018-03-06T17:53:37Z"),
"optimeDurableDate" : ISODate("2018-03-06T17:53:37Z"),
"lastHeartbeat" : ISODate("2018-03-06T17:53:43.925Z"),
"lastHeartbeatRecv" : ISODate("2018-03-06T17:53:44.971Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "mongodb1:27017",
"configVersion" : 1
},
{
"_id" : 2,
"name" : "mongodb3:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 670,
"optime" : {
"ts" : Timestamp(1520358817, 1),
"t" : NumberLong(1)
},
"optimeDurable" : {
"ts" : Timestamp(1520358817, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2018-03-06T17:53:37Z"),
"optimeDurableDate" : ISODate("2018-03-06T17:53:37Z"),
"lastHeartbeat" : ISODate("2018-03-06T17:53:43.925Z"),
"lastHeartbeatRecv" : ISODate("2018-03-06T17:53:44.681Z"),
"pingMs" : NumberLong(0),
"syncingTo" : "mongodb1:27017",
"configVersion" : 1
}
],
"ok" : 1,
"operationTime" : Timestamp(1520358817, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1520358817, 1),
"signature" : {
"hash" : BinData(0,"4rm4LohRlAYnX8qwMh2XkFZCZ4A="),
"keyId" : NumberLong("6529888605471506433")
}
}
}Aquest article es basa en: https://docs.mongodb.com